南山の先生

学部別インデックス

理工学部・ソフトウェア工学科

名倉 正剛

職名 教授
専攻分野 ソフトウェア工学,特に,保守,運用
主要著書・論文 「Android アプリケーションを対象とした実装漏れメソッドの検出手法」,共著,コンピュータソフトウェア,Vol.38,No.2 ,pp. 71–89,2021/05
「コーディング規約違反メトリクスに基づきソフトウェア変更に対して不具合混入を予測する手法」,共著,情報処理学会論文誌 ,Vol. 61,No. 4 ,pp. 895–907,2020/04
将来的研究分野 ソフトウェア工学,ソフトウェア保守,ソフトウェアシステム運用管理
担当の授業科目 プログラミング基礎,プログラミング応用,ソフトウェア工学応用,ソフトウェア生産管理研究

きれいなソフトウェアは好きですか?

このトピックを書いている他の方も書いているように,現代ではソフトウェアがありとあらゆるところで利用されています.またこれも他の人のトピックにもあると思いますが,(狭義の)ソフトウェアはコンピュータに対する命令を組み合わせたプログラムのことを指します(広義には,それらに付随するいろいろな電子的なドキュメントも含むのですが,話が脱線するのでここでは触れません).

さて,ある日あなたは仕事を任されます.それはいま動いているソフトウェアに,新しい機能を追加することでした.あなたはどうしますか?

① いま動いているソフトウェアのマニュアルを読む
② いま動いているソフトウェアのプログラムを読む
③ 新しく追加する機能についての要求を理解する
④ 新しく追加する機能についてのプログラムを書く
⑤ 難しそうなので詳しそうな仲間にお願いする

場合によっては⑤を選びたいところですが,さすがにそれでは他力本願で仕事になりませんので除外するとして,それ以外の①~④のいずれもこの目的に必要な作業です.①であれば,機能を追加する対象のソフトウェアの概要を知ることになりますし,②であればソフトウェアのどこに機能を追加すればよいか,いまのソフトウェアはどのように動いているか,新しい機能をどのような制約で開発すればよいかを把握することになります.また当然,実際に追加する必要のある機能を実現するには③や④を実施することになります.

最初に「現代ではソフトウェアがありとあらゆるところに利用されています」と書きましたが,それだけ多くのソフトウェアが利用されている状況ですので,新しくゼロからソフトウェアを開発するよりも,今あるソフトウェアを改修したり,新しい機能を追加したりするために開発すること(これを保守と呼びます)のほうが,近年では多くなってきています.そして①や②の作業は,いま動いているソフトウェアに新しい機能を追加するような保守でのみ,特に重要になります.なおこのうち①の対象はプログラム自体ではないので狭義のソフトウェアへの作業には該当しません.

ソフトウェアを保守する際に狭義のソフトウェアに対して実施する②の作業は,いま動いている既存のソフトウェアのプログラムを読んで,その動作を理解し変更すべき箇所を特定する作業です.日常の文章でもそうですが,読みにくく難解な記述が存在することがあります.いま動いているソフトウェアが読みにくく難解なソフトウェアだった場合,この ②の作業に多くの時間が必要になります.仮にもとのプログラムが動いていたとしても,読みにくい場合は,変更に対して間違え(いわゆる「バグ」)を発生させてしまったり,変更のための作業時間が長くなったりということが起こりやすくなります.

しかし,保守の際の開発のために割当てることのできる作業時間や人員は,一般的に新規に開発する場合に比べて少ないといわれています.これが何を意味しているかというと,ソフトウェアはなるべく「きれいに」開発する必要があるということです.そこで私は,どのようなソフトウェアが間違えを引き起こしやすいか,どのようなソフトウェアが「きれいなソフトウェア」として扱われるかを分析し,ソフトウェア開発に対して間違えを引き起こしにくくするためにはどのような支援が必要か,また出来上がったソフトウェアを運用する際に間違えが生じた場合に素早く対応するにはどのような支援が必要か,ということを研究しています.

前にも書いたように,既存のソフトウェアを保守する作業のほうが新規に開発するよりも多くなっているうえに,保守作業に割当てられる作業コストは新規開発よりも少なく,それが一因でソフトウェア産業がきつくて大変な分野のように思われてしまっています.「きれいなソフトウェア」をみんなが作っていけるような社会を創出することで,ソフトウェア産業を楽しく明るい分野にしていけるよう,研究を進めていきたいと考えています.