リリース判定その他・ソフトの品質はプロダクト品質が大切

2018年5月7日リリース判定

リリース判定ではプロダクト品質がプロセス品質より優先します

ソフトのリリース判定では、プロダクト品質プロセス品質に分けて品質の善し悪しを判定しています。ではリリース判定の時にプロセス品質とプロダクト品質のどちらを優先して見なければいけないかと言うと、当然プロダクト品質です。プロセス品質はソフト開発にとって大切な部分です。プロセス品質を良くする事で、常に良い品質で製品を作ろうという考えが、CMMI や ISO9001 という品質管理の世界で使われている方法です。でも、グータラ親父はリリース判定の時に常にプロダクト品質をより重視していました。

どういう事? と疑問に思われる方も居そうですが、グータラ親父の感覚では、ソフトの品質を決める上での優先度はプロダクトの品質=テストの品質>設計/実装の品質>プロセスの品質です。ソフトの品質が依存する割合がテストや設計/実装の方が高いので、プロセスをあまり重視していないという意味です。 

ハード製品の品質は製造設備に大きく依存する

少し話が逸れますが、良い品質で物を作る事が得意な日本の製造工場では、品質を良くすためにプロセスに重点を置いています。工場でのプロセスとは、製造設備の維持管理であったり人が行う工程の作業手順であったり、いわゆる人手が入る作業の事です。それらを、誰がやっても正しく実施できるように、良い作業手順を作って、その作業手順どおりに間違いなく作業をする事が、品質良く物を作る事になります。

現在の製造工場では人が物を作る事は殆どありません。実際に物を作るのは製造設備と呼ばれる機械です。プラスチックの原料を混ぜたり、成形機で決められた形にしたり、電子基板に部品を半田付けしたり、製造工場では様々な製造設備が製品を作っています。そして人は、これらの製造設備を常に良い状態で稼働するように維持/運用をするのが役目です

この維持/運用で間違いを起こさないようにするために大切な事が作業手順、つまりプロセスです。 定型作業の手順を決めてそれを守る、異常事態が起きた時にも、手順書に従って必要な対応を進める。この様な作業手順=プロセスがちゃんと出来ていて初めて、効率良く製造設備が稼働して品質の良い製品が出来上がります。ですので、製造工場で生産される製品の品質にとってはプロセスの品質はとても大切です。

一方で製造設備で作られる製品の品質は製造設備の能力に大きく左右されます。例えば、金属を切削する製造設備が、誤差 0.1mm で切削する設備と誤差 0.3mm で切削する設備があった場合、誤差 0.1mm で切削する設備のほうが品質よく製品を作れます。ですので、生産工場では、必要とする品質で製品を作る事ができる製造設備を導入します。

言い換えると、製造工場では必要な品質で製品を作る製造設備を買ってきます。そして、良いプロセスを使って人が製造設備の維持/管理をして、常に良い状態で稼働させる事で、常に良い品質で製品を作ります。製品の品質=プロダクト品質を大きく左右する製造設備は買ってきて揃える事ができるのです。

ソフトの製造設備は人

それでは、ソフトの製造設備は何でしょうか? ソフトは企画・仕様決定・設計・製造・テスト その全てが人の思考で実現されます。 人の思考を助けるツールは色々ありますが、現在のところ最終的には全て人の頭の中でソフトが作り出され、最終的にはソースコードとして表現されます。最後の段階で、ソースコードを実行コードに変換するビルドやメイクと呼ばれる部分のみは、コンピュータが自動的に行ってくれますが、それ以外は人が行います。

つまり、ソフトの開発では、工場の生産設備に相当るす部分は開発担当の人という事になります。企画の検討から始まってテストの実施まで、様々なソフトの開発作業を、開発担当の人が頭の中で考えて、それを色々な資料に書き出して他の人と摺合せを行いながら、ソフトの開発が進みます。各々の作業工程は、開発プロセスとして定義されているのですが、そのプロセスに従って実際の作業を行うのは開発担当の人です。 

人の能力は千差万別で変幻自在?

そして、ソフトの開発に関わる開発担当の人、とりわけソフトエンジニアの能力は5倍から15倍程度の個人差があると言われています。 実際にグータラ親父も自社のソフトエンジニアの能力を調べたみた事もありますが、5倍程度の差異はありました。さらに、同じ人であってもその時の体調や精神状態によってソフトの開発能力が大きく変わります。

ソフトの開発は、かなり深いレベルでの思考が必要になるので精神集中が重要です。そして困った事に、人はその時の体調や精神状態で精神集中の度合いが大きく影響されます。そのために、同じ人でもその時の状況によって、ソフトの開発能力が大きく変動します。単純に言うと、頭がボーっとしている時にソフトを作ればバグが一杯のソフトになります。

という事は、ソフトの開発能力については、もともと5倍から15倍の個人差があって、さらに同じ人でも時と場合によって大きく能力が変わるので、、、ソフトの開発能力はとても大きくブレます。そんな開発能力が大きくブレる人が何十人も寄ってたかって1つのソフト開発を進めていくのが、現実のソフト開発プロジェクトです。

工場の生産設備のように、ちぇんと維持/管理して運転していれば、一定の品質で製品を作ってくれるものではなく、良い品質でできるかどうかは神のみぞ知るというのが、ソフト開発の現場の実情です。

まあ、これは極端な言い方すぎますが、少なくとも生産工場のように、安定してソフトが生産される状況には無いというのが、ソフト開発の現場の事実です。

チェックして確認するしか対策が無い

では、どうやって品質の良いソフトを作るれば良いのでしょうか? ソフトを開発する人の開発能力がブレるため、一つ一つの作業で間違いが混入する可能性が高いです。それならば、できるだけ細かくチェックして間違いを見つけて修正するしかありません。

そして、このチェックの具体的な作業がテストとレビューです。出来上がったソースコードに対して、様々な目的・種類のテストを実施してバグを見つける。企画や設計や実装の作業に対しては、設計レビューやコードレビューをして作業の間違いを見つける。見つけたバグやレビューの指摘事項を確実に修正する。このテストとレビューを徹底して行う事が大切になってきます。

結局のところ、ソフトの品質を高めるには、テストでのバグ出しとレビューでの設計・実装の指摘を大量に徹底的に実施する、という事が一番大切だという事になります。そして、このテストやレビューで測れる品質は、ソフトの設計・制作の成果物の品質に相当するので、プロダクト品質なのです。

ソフトウエアの開発は、このような側面もあるので、グータラ親父はプロセス品質よりも、テストやレビューというプロダクト品質を重視して、ソフトウエアのリリース判定をしていました。

リリース判定 の最初に戻る