Hitachi
お問い合わせお問い合わせ
プログラミングやソフトウェア開発の現場で生成AIの利用が浸透しつつあるいま、次代のソフトウェア開発を担う若者たちには、いま、どのような能力が必要とされ、また、その力はどのように育まれているのでしょうか。京都工芸繊維大学の水野修 教授と、日立製作所 研究開発グループ 主管研究長の小川秀人が語り合います。

[Vol.1] リアルな世界での「創造」とソフトウェアエンジニアリング
[Vol.2] 生成AIの時代に育むソフトウェア開発の力

画像: バグ予測研究を専門とするに至った経緯を語る水野さん

バグ予測研究を専門とするに至った経緯を語る水野さん

嫌われ者の「バグ」を研究する

小川:
先生の研究は、昔から一貫してソフトウェア工学、特にバグや不具合の研究ですね。それも、ソースコードを解析する方法ではなくて、統計的に扱っているところが特徴的だと思います。

水野さん:
そうですね。もともとは、ソフトウェア開発プロジェクト全体の状況を把握するプロセス研究からスタートしたんです。プロジェクトの混乱を予測する研究をしていましたが、当時はそんな夢のようなことを考えているのか、と言われていました。その後、バグが入りやすいモジュールを予測するプロダクト研究にシフトしました。

小川:
プロジェクト全体を対象とした研究から、バグ予測の研究に進んだきっかけは何だったんですか?

水野さん:
ICSEというソフトウェア工学の国際会議で「SZZ(Sliwerski, Zimmermann, Zeller)」と呼ばれる、バグがいつ混入したかを推定するアルゴリズムの話を聞いたのがきっかけですね。すぐ実装できそうだなと思ってやってみたんです。次に、バグがどのコードに含まれているかを予測しようと思い、その頃流行っていたスパムフィルタの手法を応用したらできるんじゃないかと。同じ研究室にいた学生には即座に否定されましたけど、できないって言われたらやりたくなる性格なんです(笑)。

小川:
正直なところ、バグって、ソフトウェア開発では「出てほしくないもの」ですよね。バグに限らずソフトウェア工学では、プロジェクトの遅延とか赤字になったとか、ネガティブな事象を減らす研究が多い印象があります。学会で研究発表を聞いていても「近年、ソフトウェアの大規模化、開発の短期間により、品質確保が課題になっており…」みたいな背景から始まることが多くて。学生さんはもっと楽しいことを研究したいんじゃないかなと思うことがあります(笑)。それでもバグを研究対象にすることの楽しさは、先生はどのように考えていますか。

水野さん:
ソフトウェアの研究は、突き詰めると「コストの研究」か「バグの研究」か、そのどちらかになると思っています。バグの研究に進んだのは、おそらく自分がコードを書く側の人間だからなんでしょうね。人間が毎回同じようなミスに付き合うのはやっぱりおかしい、機械に分かることは機械に指摘してほしい、という感覚が出発点だった気がしています。正直、バグ研究自体がものすごく楽しいかと言われると、そうでもないかもしれません。バグを見つけて修正するのは、多くの人にとっては嫌な作業です。だから、その「嫌」を少しでも減らせたらいい、という気持ちでやってきたのかなと思います。

小川:
私は逆に、コードを書きたくなくてソフトウェアの研究に入りました。でもバグを見つけるのは結構好きなんです。重箱の隅をつつくみたいに、「ほら、ここ間違ってる」って見つけるのは楽しい。仕様書やコードのそんな間違いを見つけるために、テストを作る研究や正しさを証明する研究をしていました。

水野さん:
それは天職ですね(笑)。僕も学生の課題を見るのは好きです。毎年同じ課題を出すので、経験値がたまっていて、魔法使いのようにバグを指摘することができます。でも、たまに想定外のプログラムを書いてくる学生がいると、「え、なんでこれで動いてたん?」と驚くこともあります。

小川:
動く理由も、動かない理由も分からないということはありますね。そういったレアなプログラムを見つけるのも楽しい。その意味では、バグを見つける嫌な作業の研究というよりも、動くものも動かないものも含めて、その理由を突き詰めた上で人に説明する研究なのかもしれない。そう考えると楽しくなってきますね。野山で珍しいバグ(昆虫)を見つけて同定(種類を特定すること)するのと近いようにも思えます。

画像: バグ予測研究の面白さについて、率直に問いかける小川

バグ予測研究の面白さについて、率直に問いかける小川

プログラミングを効率的に学ばせる

小川:
生成AIがプログラミングをするようになってきて、初学者にソフトウェアをどう教えるかも議論になっています。水野先生は、プログラミング教育の仕組みづくりでも精力的に活動されていますね。

水野さん:
そうですね。プログラミングの練習をどう効率化するかということはずっと考えています。学生には、なるべく本質じゃないところで悩んでほしくないので、たとえば、Redmineのチケットにソースコードを投稿すると、突然テストが走って、「通ったよ」とか、「ダメだよ」と、結果をあくあたんが教えてくれる仕組みをつくったりしています。

小川:
コードを書いたら自動でテストが走って即差し戻されるんですね。あくあたんとの会話はゲーム感覚もありますが、結構厳しいですね(笑)。

水野さん:
はい、即差し戻しです(笑)。でも、テストを全部通したり、課題を提出するとメダルがもらえるようにしていて、これが意外と効くんですよ。みんな、メダルをもらうのをすごく喜ぶんです。しかも隠しメダルがあって、「条件は何でしょう?」と言うと、学生が必死に探し始めるんです。

小川:
テストをしてバグを見つけることは一般的には嫌な作業なのに、テストを通してメダルを貰うのは楽しい。テストの結果を自動で通知する仕組みは多くのツールにもありますが、メダル集めという体験に繋がっているのが水野先生らしいところです。なにより学生自身が意欲的にプログラミングの練習をする仕組みを、先生自身も手を動かして楽しみながら作っているという、楽しさの連鎖が出来ているのが面白いです。

水野さん:
少し楽しくしすぎたというか、もう少し不便でもよかったかな、といまさら思うこともあります。でも、学生には「どうやったら楽にさぼれるか」じゃなくて、「どうやったらちゃんと進められるか」を体験してほしかったんです。学部3年生くらいで、タスクをチケットに切って、ガントチャートができて、「自分はこれだけやった」と実感できる経験を一度はしておかないといけないと思っています。

画像: 学生たちにはソフトウェア開発のプロセスを体感してほしい、と語る水野さん

学生たちにはソフトウェア開発のプロセスを体感してほしい、と語る水野さん

ゲーミフィケーションの世代ギャップ

水野さん:
いまはゲーミフィケーションにも関心があって、ゲームをしながらプログラミングを学べるシステムも作りました。C言語のソースコードを渡すと、それを解析して自動的にダンジョンのマップを生成する、というゲームです。コードの構造や処理の流れが、そのまま通路や分岐になって、ひとつのダンジョンとして可視化されるんです。

画像: 水野さんが開発したプログラミング学習システムの画面

水野さんが開発したプログラミング学習システムの画面

プレイヤーはそのダンジョンの中を歩き回りながらゴールをめざすんですが、実はその一歩一歩が、プログラム1行の実行に対応しています。遊んでいるうちに、自然とプログラムの流れを追うことになるんです。正直、これが実用的にデバッグの役に立つかどうかは、まだ分かりません。でも、とにかく作っていて面白いんです。研究って、やっぱり自分が面白いと思えないと続かないですから。

小川:
これも面白いですね。ソースコードという抽象的なものが、ダンジョンという具体的な形で表現されています。これも手触り感がありますよね。ダンジョンはバーチャルではありますが。

水野さん:
ただ、これを作りながら気づいたんですが、いまの学生はこういうドット絵で2D(平面)で移動するゲームに馴染みがないんですね。少し前に、「ダンジョンは上から下とか下から上みたいな流れがあったほうがいいんじゃないか」とアドバイスしたら、理解してもらうのにかなり時間がかかりました。お互い違う言語を話しているのかなと(笑)。

小川:
いまのゲームは上下左右ぐるぐる回るから方向性はないでよすね。実生活でも昔は地図を見ながら歩いていましたが、スマホナビは自分を中心とした案内に従って歩きますね。世界を俯瞰する感覚自体が世代によって変わってきているのでしょうね。

ここまで、現実の手触り感や、現実のメタファが大切という話をしてきましたが、世代や文化によって伝わるメタファと伝わないメタファがあるという例は、ソフトウェアを作る上で重要な視点だと思います。保存ボタンのフロッピーディスクマークが分からないという話もありますし。

ソフトウェア開発にインセンティブを

小川:
ここ数年、大学院の演習を手伝っていますが、新しい技術を使ってもらう難しさを感じています。機械系の学生さんにソフトウェア開発を体験してもらう演習です。ソフトウェア開発の進捗状況や残タスク把握のために「チケットを管理しよう」「GitHubを使って更新履歴を残そう」などと言っても、なかなかやってくれないんです。コードを書くことは創造的なタスクですが、開発の管理は面倒な作業だと思われがちです。

水野さん:
進捗や履歴の管理って、面倒くささのハードルがすごく高いですよね。覚えないといけないことが沢山ある。「それを使うと何かいいことが起きる」という体験がないと、なかなか使ってもらえないんだと思います。

小川:
その「使うといいこと」が使わないと見えにくいのが、ソフトウェア開発の難しさですよね。GitHubで管理して履歴が分かることの価値は、問題が起こって過去に遡るようなことを実際に経験した人にしか分からないですから。もしそれが無くても、コードを書くこと自体はできてしまうし、それが非効率だとも気づかないのです。

水野さん:
実はそれは自分自身にも言えることで、新しい技術が次々に出て来る中で、たとえばPythonだったらいまはuv※がいいよと言われても、「いや、もとからあるpipenv※でいいじゃん」って思っちゃうんです。どうしても自分が知っていることから踏み出すのは難しい。uvの良さを知っても、その良さが面倒くささを上回らないと「やってみよう」とは思えないんです。

ソフトウェア工学は、ともすれば「これはダメ」「あれはダメ」っていう「べからず集」になりがちです。でも本当は、「こうしたらいいことがある」「こうすると楽になる」って伝えないといけないと思っています。だからこそ、インセンティブをどう設計するかをとても大事だと思うんです。メダルがもらえる仕組みが果たしていいのかは分かりませんが、それでも課題を早く提出する学生は増えました。
※uv、pipenv:Python向けのパッケージ管理ツール。

小川:
ソフトウェア工学は、これまで大学も企業も一緒になって、プログラミング言語など世の中になかったものを一緒に創り出してきました。いま、分野として成熟してきたからこそ、企業での研究も教育でも、楽しいと思えるインセンティブを考えることは重要ですね。

水野さん:
やっぱり楽しくソフトウェア開発ができるということがソフトウェア工学における基本ですね。正直、コストの研究もバグの研究も面白くないことが多いんですけど、ネガティブな話ばかりだけではなく、「こんなことができるよ」「こうするとちょっと幸せになるよ」っていう未来を提示していきたいですね。「べからず集」ではない、楽しいソフトウェア工学の教科書を書きませんか?(笑)

――生成AIのさらなる浸透の先にある未来。人間と生成AIとの関係性において、留意すべきことは何なのでしょうか。次回もさらに語り合います。

画像1: [Vol.2] 生成AIの時代に育むソフトウェア開発の力│AI時代のリアルとバーチャルの境界

水野 修
京都工芸繊維大学教授

大阪大学にて博士号を取得後、大阪大学基礎工学研究科助手、助教を経て2009年より京都工芸繊維大学准教授。2017年1月より同教授、現在に至る。
電子情報通信学会、情報処理学会、IEEE Computer Societyに所属

画像2: [Vol.2] 生成AIの時代に育むソフトウェア開発の力│AI時代のリアルとバーチャルの境界

小川 秀人
日立製作所 研究開発グループ システムイノベーションセンタ 主管研究長

博士(情報科学)。ソフトウェア工学の研究および実務応用に従事。北陸先端科学技術大学院大学 産官学連携客員教授、東京大学非常勤講師などを兼務。AIプロダクト品質保証コンソーシアム運営副委員長、機械学習品質マネジメント検討委員会委員などAIの品質に関する活動にも参画。共著書に「ソフトウェアテストのセオリー」「実践AIエージェントの教科書」「生成AIによるソフトウェア開発」など。

[Vol.1] リアルな世界での「創造」とソフトウェアエンジニアリング
[Vol.2] 生成AIの時代に育むソフトウェア開発の力

This article is a sponsored article by
''.