第11回プログラムの品質問題




若松経営情報研究所
中小企業診断士・システムアナリスト
若松敏幸

情報システムの本番稼動
今回のテーマは、「プログラムの品質問題」です。よく売れているパッケージ・ソフト等は、比較的品質は安定しており、大きな問題は発生しにくいものですが、オーダーメイドのシステムの場合は、導入直後から様々なトラブルを引き起こすのが常です。今回はこの問題を取り上げます。次の事例をご覧下さい。

V社が新しい販売管理システムの開発をシステムハウスW社に委託してから、およそ半年が経ちました。

いよいよ今日から、システムの運用が開始されます。本来なら先月にはスタートしている筈でしたが、設計段階での詳細仕様の協議が長引き、全体の日程が後ろにずれ込んでいました。

新システムのハードウェア、ソフトウェアは、先週導入されており、担当者への操作教育も一通り完了しています。操作教育と同時に、システムの機能や、操作面でのチェックなども行いました。操作上、「あれっ?」と思うような場面が2〜3箇所あり、W社のSEに確認すると、「あっ、これはバグです。すぐに直します」との返答でした。そのバグ(プログラムの不具合)修正は、その場で簡単にやってくれましたので、大きな問題にはなりませんでした。

さあ、新システムの稼動開始です。受注伝票の入力から始まり、30分、1時間と経過するうちに、担当の事務員から、「印刷が出来ない」、「画面が凍りついてキーが効かない」「合計金額がおかしい」などのクレームが続出しました。その場を見守っていたW社のSEは、たちまち顔面蒼白の状態で、問題の発生したコンピュータの前で頭をひねっています。V社のシステム管理者は、あちこちで火の手の上がる火事現場を見る思いで、身体が震えるのを抑えることが出来ません。「いったい、どうして? 信頼してW社に任せていたのに・・・」と怒りが込み上がってきます。


システム・トラブルとの闘い

上記のような光景は、程度の差はあれ、多くの企業で見られる出来事です。これから新しい社内システムが始まるという大きく膨らんだ期待も、すっかりしぼんでしまいます。こうしたトラブルが最初の1〜2回程度ならまだしも、ことによっては何ヶ月も頻繁に発生して、システムに対する不信感を招いてしまうことも往々にしてあります。なかには、システム・ベンダーに対する不信感が高じて、損害賠償請求にまで発展するケースもあるほどです。

理想的な姿は、新システムが全く問題なく稼動し、新しい業務形態にスムーズに移行できることですが、残念ながらそういうケースは皆無であるといわざるを得ません。パッケージ・ソフトですら、そうです。

一般的には、新システムのバグが取り除かれ、品質が安定するまで1年はかかると見るのが適当でしょう。なぜなら、多くの適用業務は、日次、月次、四半期、年次というサイクルで管理されており、情報システムのインプット、アウトプットの機能もその周期にあわせて設計されているからです。日々のデータ処理のレベルで見つかるバグもあれば、一年間通して運用してみないと見つからないバグもあるわけです。ですから、システム導入にあたっては、まずは1年間は、このシステムのバグとの格闘であると心得ておくことが必要でしょう。


プログラムの品質問題の原因

プログラムの品質問題の原因は何でしょうか?

理由は、ベンダーのプログラマーの開発能力の問題だけではありません。システム設計の段階で、すでに隠れた欠陥が内在する可能性があります。ユーザーの要求機能に対して、ベンダー側が十分理解していなかったり、業界では「当たり前」の常識になっている業務処理方法について、要求事項として明示されていなかったり、曖昧な表現であったことからくるベンダーの誤解というのも原因として考えられます。プログラムの品質問題は、実はこういうケースでの原因が最も多いのです。

また、システムの開発期間が短く、システムのテストが十分に行われずに納入されてしまうということも大きな原因です。ベンダー側は当初はなるべく余裕のあるスケジュールを組みますが、要件定義や設計段階でユーザーとの協議日数が長引くと、どうしても後半の工程に無理をせざるを得ません。多くのプログラマーを投入してプログラム開発の期間を短縮しようとしますが、えてして最後の工程であるテスト期間も短縮されてしまうケースが多いのです。

それでは、システム導入前に、ベンダー側で十分なテストを行えば問題は解決するかと言えば、必ずしもそうではありません。少しがっかりするか知れませんが、それが今日のシステム開発の現状です。なぜなら、膨大な量のプログラムを全て完璧にテストし、信頼性100%を目指そうとすると、時間的にも、コスト的にも天文学的な量の資源投入が必要になるからです。
  


ソフトウェアの品質とは

ソフトウェアの品質とは、国際標準ISO/IEC9126の定義によると、「(1)機能性、(2)信頼性、(3)使用性、(4)効率性、(5)保守性、(6)移植性」の6つが挙げられています。(図表1参照)

  
表1 図表1 ISO/IEC 9126ソフトウェアの品質特性

品質特性
品質副特性
1.機能性 合目的性、正確性、接続性、標準適合性、セキュリティ
2.信頼性 成熟性、障害許容性、回復性
3.使用性 理解性、習得性、運用性
4.効率性 実行効率性、資源効率性
5.保守性 解析性、変更性、試験性、安定性
6.移植性 環境適応性、移植作業性、規格準拠性、置換性

この6つの特性をすべて満足するシステムを構築するのは、なかなか難しいと言わざるを得ません。現実には、これらの品質要件のうち、どれを優先するのかという考え方を採用することになるでしょう。

次に、プログラムの品質を測定するモノサシとして、「信頼性成長曲線」というグラフを紹介します。(図表2参照)

図表2 信頼性成長曲線
消化テストケース数
100
200
300
400
500
600
新規欠陥数
30
27
15
10
7
3
累積欠陥数
30
57
72
82
89
92
出所:「図解ソフトウェア開発のすべて」

これは、プログラムのテスト段階で、欠陥の発見件数を累積してグラフ化したものです。時間が経つにつれて、累積欠陥数の増加傾向がなだらかになっていく状態を示しています。通常は、この累積曲線が横に寝てきて、欠陥の発見が少なくなったときに、テスト終了となります。

プログラムは目で見て欠陥を検出できるものではありませんので、その品質については、「潜んでいると考えられる欠陥のうち、すでに検出されたものの割合」で間接的に証明するしかありません。それがこの「信頼性成長曲線」です。

システム・トラブルに対する対策

それでは、ユーザーの立場では、どうすればよいでしょうか。プログラムの品質向上策はベンダー側に任せておいてよいのでしょうか。

システムは、ユーザーとベンダーが協力して作り上げるものであるという考え方に立つなら、ユーザー側も次のような対策は採っておきたいものです

(1)ベンダーとの契約に際し、成果物に、「テスト仕様書、テスト結果報告書」を盛り込んでおく。そうすることによって、ベンダーに対してシステムの品質向上の責任を自覚させることになる。
(2)ベンダーとの要件定義、設計の打ち合わせでは、必ず協議事項を文書化し、要件定義書、システム設計書のレビューをしっかりと行う。この作業をしっかりやることが、システムの品質向上に最も有効である。
(3)開発の完了したプログラムを受け入れる際には、念入りに「受け入れテスト」を行う。できれば1週間ぐらいかけて、細部にわたって検収作業を行う。
(4)システムの「本番稼動」の前に、従来の業務処理も継続・併行して新システムを稼動させる「テスト稼動」の時期を、余裕をもってみておく。少なくとも1〜2ヶ月の期間はあるのが望ましい。
(5)システム運用開始後のトラブル発生については、冷静に対処し、トラブルの案件ごとに「症状、原因、対処策、今後の課題」について克明に記録をとっておく。この記録は、プログラムの品質管理を行う上で重要で、解決済みのもの、未解決なものを整理し、応急対策で一時的に問題回避したものは今後どのように根本的な対策をとっていくのかということを考えるのに貴重な資料になります。すべてをベンダー任せにするのではなく、ユーザー自身も積極的に品質管理を行うという姿勢が大事です。

以上のような対策によって、システム・トラブルの発生を抑制し、プログラムの品質向上に繋げることができます。

<参考文献>
■「図解でわかるソフトウェア開発のすべて」Mint(経営情報研究会)著、日本実業出版社
■「え〜、全部テストするんですか! いまさら聞けないソフトウェア・テストのやり方」山村吉信著、三元社