ソフトウェア開発の難しさ

情報システム等のソフトウェア開発はプログラムを作製するだけではありません。顧客(人)が求める要求の分析、顧客が求める要求をどのように開発するかの設計工程、設計を基にプログラム、ハードウェアを構築する開発工程、開発した製品をテストするテスト工程、そして製品稼働後のトラブル等に対応する運用工程等、1つの製品を開発するだけでも多くの工程が必要となります。
これらを開発するためには多くの時間、予算といったコストが掛かり、現実的にコストは無限ではありません。そのため、一般的に高品質な製品を開発しようとするとコストが掛かり、またコストを削減すると品質は下がります。また、多大なコストを掛ければ高品質な製品ができるという物でもありません。これらのコストと品質が複雑な関係である要因の1つにもソフトウェア開発が複雑であるためであると言えます。
ソフトウェア開発の効率化

先に述べた通り、コストと品質はトレードオフの関係にあり、また、その関係は単純に比例するものではありません。そのため、ソフトウェアを効率よく開発する事が重要となります。そこで、我々は効率よく開発が進めるためにも、バグや障害を効率よく発見するための研究を行っています。
ログを用いた障害検知の効率化

近年のパッケージソフトウェアやオープンソースソフトウェアの品質は良いです。そのため、新規でそのようなソフトウェアを開発するよりも、既製品を利用した方が品質、コスト的にメリットが多いです。その一方で、これらの既製品を利用しても様々な障害が発生する事も事実です。例えば、製品の相性や仕様を把握しきれないための設定ミス等が挙げられます。このような製品を利用したシステムで障害が発生したとしても、製品の詳細な情報を知らないため具体的な処置を発見することは容易ではありません。そこで我々は製品から出力されるログ、または変数の値等をログに出力させる事で障害を早期に発見できるかの試みを行っています。
1.アプリケーション,ミドルウェア,OS等のシステムログから障害検知
現在のシステムにおいて障害が発生した際にもログは分析されています。ログには動作した内容とその結果等が記録されており、障害発生時にはそれらを人手で分析し、障害原因を調査します。この人手で分析する事には膨大なコストが掛かかります。そのため,我々はこのような障害を自動的に検出し、開発者に通知することで障害発生時の調査コストの削減を目指します。
2.オープンソースを対象とした変数の値からバグ原因の変数を検出
プログラムには必ず変数を利用し、変数を起点にプログラムを構成することでソフトウェアは動作します。もし、プログラム中の変数に予期しない値、または滅多に出現しない値等を保持してしまった場合にはバグが発生しやすくなります。結果、バグが発生することでソフトウェアは停止する、または不安定に動作します。我々はこの予期しない値、滅多に出現しない値を過去の出現する値からバグ原因になる怪しい値であるかを自動的に計算する事で障害を自動的に検知できないかの研究にも取り組んでいます。
ソフトウェア開発の難しさを知るためにはソフトウェアの開発経験が不可欠
ソフトウェア開発の難しさを知るためには実際にソフトウェア開発をする事が必要不可欠です。そのため研究室では何らかのソフトウェアを複数人数で開発しています。開発時にはredmine、git等で工程管理、版管理等を行い、開発終了後にシステムの問題点や課題があるかを分析し、新しい開発手法についての研究を進める予定です。