コードジンのヘッダーが入ります
Parasoft Japan社長の野田勝彦氏はセッションの冒頭で、「開発中におけるバグの発見時期と、要する修正コストの関係は1:10:100」と経験値から導き出された法則を紹介した。バグはコーディング工程で作り込むケースが圧倒的に多い。たとえばコーディングの段階で一つのバグを修正するコストを25ドル=2,500円とすれば、システムテストまで持ち越すと2万5,000円、プロダクションテストの後半では25万円だ。さらに最近では「バグによって発生するビジネス的な損失」はこの法則におさまらないほど巨額になっている。
バグ修正とテストの苦労を減らすためにはやはり、作り込むバグを減らし、早い段階でバグを見つけたい。野田氏はそのために「早期にソフトウェアの品質向上を実現するベストプラクティスについて、先人の教えに学ぶべき」と語り、ポイントを紹介した。
まずコーディング規約を決め、それに従ってプログラミングするのが基本中の基本だ。そして単体テストをきちんと行い、その後のテストに持ち越さない。
そして忘れてはならないのがソースコードレビューだ。まず、コーディング規約にきちんと従っているかどうか、設計書通りに機能が作り込まれているかどうか、第三者が目視確認する。スタイルとしては、集合レビュー、1×1レビューなどがある。XP(エクストリームプログラミング)でいうペアプログラミングもレビューにあたる。
一方、現実の開発プロジェクトでこれらのベストプラクティスが実践できているかというと、うまく実践できていないプロジェクトも少なくないようである。その理由は、受託側の問題として、開発期間の短期化や受託開発の価格競争の激化などと、発注側の問題として、成果物契約において開発プロセスに対して口を出せないというような点が考えられる。しかし、現代のビジネスにおけるソフトウエアのミッションを考えると、バグコストの内訳は、バグの修正作業のコストよりも、バグによるビジネス的な損失のほうが、はるかに大きい。成果物契約においては、バグの修正作業のコストは、受託側の負担となるが、バグによるビジネス的な損失は発注側が負担せざるを得ない。発注側として、ソフトウエアの品質如何で、大きなビジネス的な損失を被る可能性がある以上、発注側は積極的に開発プロセスに関して口を出すべきであり、受託側は人月単価や行数単価で価格競争するのではなくTCOの観点で価格競争すべきであると野田氏は主張する。
とはいえ、ツールでできることはツールにまかせ、ベストプラクティスを可能な限り合理的に実施したい。そのために、Parasoftは様々なツールを提供する。中でもメジャーなのが.TEST、C++test、Jtestだ。それぞれの機能はほぼ同様で、それぞれ使用できる言語とプラットフォームが違う。
まずコーディング規約のチェック機能がある。夜間など空き時間に行ったチェック結果を保存し、結果を数値やグラフで表示する。独自の規約の追加も可能だ。
単体テストの支援機能としては、ワンクリックで自動的にテストプログラムを生成して実行するOut-Of-The-Boxテストに注目したい。自動生成テストの利点は、今まで単体テストを実施してこなかった組織に、リグレッションテストスイートというテスト実行の資産を生成できることにある。ただ、ツールは仕様を理解しているわけでなく、誤ったソースコードであっても自動的に実行テストを生成する。そこで野田氏は自動生成テストを「Poor man's test」と呼び、完全なテストの実行とイコールにはなり得ないと注意を促している。
ただ各ツールには、入力に対して期待される出力が行われているかどうかを照合する機能があり、一定条件内で仕様書に沿ったテストの実施も可能だ。また現在動いているアプリケーションの実行状況をモニターし、そのログとソースコードを付き合わせてテストケースを自動生成する機能もある。野田氏は「既存のアプリケーションのメンテナンス用などに利用を検討して欲しい」と話す。
続いて野田氏は、テストの落とし穴について語った。テストは仕様書や設計書に基づいて行われるため、漏れや矛盾があったり、誤った解釈がなされてしまうと、正しいテストが実施されない。そこでまずメモリリーク、クラッシュなどのメカニカルな問題では、プログラムのフロー解析により問題を検出する「バグ探偵」という機能が役に立つ。一方、仕様上の問題に対して野田氏は「ベストプラクティスにある通り、人によるレビューが唯一の発見手段」と断言する。ツールには「コードレビュー」という、変更されたコードや新たに追加されたコードを特定し、コードを論理ブロックに整理してレビュー担当者に通知してくれるサポート機能がある。元々parasoft社内で使っていいたものが製品化されたものだ。
野田氏は後工程やリリース後にバグ修正のために汗を大量に流すのではなく「バグコストの前払い」をすべきと語る。そのために受託企業はベストプラクティスを実践し「コストを単純に行数、人/月で計算するのではなく、TCOの観点でお客様のコストを削減する、という観点で価格競争をしてほしい」と提唱して、セッションを閉じた。