品質改善担当者と考える高品質なソフトウェア開発とは?

  • 2021年6月21日

こんにちは。

セカンドセレクションのYoshidaです。

私は、これまで半導体のテスト設計を自動化するソフトウェアの開発に携わってきました。その経験を活かして現在はセカンドセレクションのソフトウェアの品質改善を担当しております。

今回はセカンドセレクションが取り組んでいるソフトウェア品質への取り組みをまとめました。

品質の重要性

一般的に「QCD」は業務のマネジメントや生産性の管理に活用される指標でQCDのそれぞれの文字が「Q: Quality(品質)」「C: Cost(コスト)」「D: Delivery(納期)」の頭文字となっております。

これらの3要素はトレードオフ(一つの要素を改善するために別の要素を犠牲にしなければならない)関係にあります。品質を良くすればコストがかかり納期も遅れ、コストを改善すれば品質や納期が損なわれやすいため、ソフトウェアの開発においては、QCD(品質とコスト、納期)においてどのようなバランスをとるかが重要と考えます。

ところが、品質をおろそかにすると不具合を出したりして、結局、お客様にご迷惑をおかけすることになります。どれだけ商品が安くても、納品が早くても、お客様が望んでいる品質を満たさなければ、お客様が満足することはないでしょう。私はソフトウェア開発における QCD 改善の要は「品質」だと考えます。ソフトウェアの価値は「品質」から始まると考えております。

品質の高いソフトウェアとは

高品質なソフトウェアとは一体何なのでしょうか?
私は、お客様が本当に欲しいものをタイムリーに不具合無く、使いやすくお届けすることだと考えております。つまり、以下のポイントを押さえたソフトウェアです。

◆お困りごと
まず、お困りごとの本質を捉えた、お客様に喜んでいただける問題解決であることが重要です。
◆タイムリー(時宜を得る)
ソフトウェアには最適なお届け時期があると考えております。早すぎては理解して頂けません。また、遅すぎても見向きもされません。必要なものを必要な時にお届けすることが重要と考えます。
◆不具合無し
ソフトウェアの品質としてまず思いつくのはバグ(不具合)ですが、お客様のところで顕在化する不具合を如何に減らし無くしていくかが重要です。
◆使い易い
ソフトウェア(ツール)は使われてなんぼの世界です。お客様が使いやすいものでなければ意味がありません。

ソフトウェア品質を評価するための取り組み

そもそも「ソフトウェアの品質」とは何なのでしょうか?
ここで改めて整理したいと考えます。ソフトウェアの品質を構成する要素を品質特性といい、品質の評価をどのように行うかを以下に記載致します。

ソフトウェア品質特性には一般的に以下の6項目があります。

・機能性(Functionality):要求された機能をそなえているか
・信頼性(Reliability):特定条件下においてどのくらい信頼できるか
・使用性(Usability):どのくらい使いやすくできているか
・効率性(Efficiency):どのくらい限られたリソースを効率よく使えているか
・保守性(Maintainability):どのくらいメンテナンスしやすいか
・移植性(Portability):どのくらい他環境に順応しやすいか

ソフトウェアの品質の評価

ソフトウェアの品質の評価として、我々はソフトウェアメトリクスを抽出し、活用します。

ソフトウェアメトリクスとは、ソースコードの規模,複雑さ,保守性など、特定の側面を定量的に示す指標となります。例えば、複雑さであればプログラムのソースコードから、線形的に独立した経路の数を直接かぞえる循環的複雑度(プログラムの制御フローグラフ内の閉じたループの個数に、最終ノードから開始ノードへとエッジを追加することで得られる仮想的なループを加えた値である)があります。

ソースコードの開発履歴やコードクローン情報から得られたメトリクス値を使って、開発者が行った作業内容の分析や、ソフトウェア部品に欠陥が存在する可能性の調査を行ったりします。

現状の開発におけるソフトウェアメトリクスを抽出することで、標準的な値を算出します。データを定期的に取り、分析を行うことで、小さな変化を捉えることができます。このソフトウェアメトリクスの変化に基づき、課題が見えてくると新たな仕組みを導入することでお客様での不具合を未然に防止していきたいと考えております。

どうすれば高品質のソフトウェアをお客様にお届けできるのか?

品質を高めるために、何か特効薬はあるのでしょうか?
私は、地道な活動こそ重要ではないか、「品質は一日にしてならず」と考えております。
意外と当たり前の事を、当たり前に愚直に取り組むことが重要ではないでしょうか?
その上で以下のポイントを日々当たり前にこなしていきたいと考えます。

◆再発防止
一度の失敗は誰だってあります。でも同じ失敗を二度繰り返すのはよくありません。不具合を起こしたら、なぜそれが起きたのか(根本原因を掴む)、どうすれば再発を防げるかを仕組みに落とし込み、二度と同じ不具合を起こさないことが必要です。
◆レビュー
一人の人間ではどうしても偏りが生じ、見方に抜けが生じます。抜け漏れを防ぐためには、第三者にチェックしてもらい、新たな視点から見直すことが不可欠です。
◆振り返り
開発を行った後は、振り返りを欠かすことはできません。よかった点はノウハウとして残して活用し、よくなかった点は反省として改善に取り組み、次の成長につなげます。
◆ヒューマンスキル
ソフトウェアは人間が開発致します。つまり品質の高いソフトウェアの開発を行うには、重要なのはソフトウェアを開発する人間のヒューマンスキルを上げることではないでしょうか?上記当たり前のことである再発防止、レビュー、振り返りを一人一人が愚直に取り組むことでレベルアップが図れます。

また、それぞれの取り組みをチームにおける開発のプロセスとして標準化することで、誰でも同じ品質の開発ができ、チーム全体の品質が上がり、お客様にご満足頂ける高品質なソフトウェアをご届けすることが可能になると考えます。

品質マネジメントがなぜ必要なのか

では、いつも同じことを同じように取り組めば常に高品質は望めるのでしょうか?
世の中は非常に早く変化しております。
たとえば、新人が入ってきたりして社内メンバーも入れ替わります。開発する環境(開発に使うツール等)も変化します。そもそもお客様の欲しいもの(仕様)がなかなか決まらず、ニーズがどんどん変化します。

こうした変化によって、今までと同じように開発していても不具合となることがあり、悪くすればお客様のところで不具合が発生し、課題が顕在化することになります。それを食い止めるためには、さまざまな変化に合わせて、我々の開発も変化し進化していく必要があります。つまり、我々自身が変化しながら品質をマネジメントしていく必要があるのです。

一般的に変化をすると、関係する範囲に変化の影響が広がります。すべての変化に迅速に対応しないと、その影響が広範囲に広がってしまい、コントロールすることが難しくなります。結果的に抜けを招き、不安定の要因となりやすいため品質を落とすことになります。後述しますが、変化の早い昨今において如何に短い期間で品質を落とさず、向上させるかの工夫も必要となり、我々の今後の取り組み課題でもあります。

SSが品質を高めるための取り組み3選

ここからはセカンドセレクションが品質を高めるために行っている取り組みを3つ挙げます。

上流工程の設計を重視

不具合を予防する
ソフトウェアの開発は以下の流れになります。
見積り⇒要件定義⇒設計⇒製造⇒テスト⇒リリース⇒運用・保守
これまでは下流工程のテストをしっかりやって品質を確保していました。しかし、一般的には不具合による手戻りコストを考えた場合、下流工程のテストは上流工程の設計に比べて数十倍のコストがかかると言われています。そこで、今後我々は上流工程の設計の段階で品質を作り込むことでコストを抑えたいと考えています。特に上流工程において変化に強い設計を行うことで不具合を予防するということにもなります。

共創

お客様との協働による新たな価値創造(品質の作り込み)
前述のように「品質が高い」とは、お客様が本当に求めているものを提供することです。
お客様と密接に連携し、ソフトウェア開発を行い、お客様にフィードバックをもらいます。
短い期間でこうした開発を繰り返すことで、お客様が本当に欲しいものを作り上げる新しい開発手法の必要性を感じております。
このような開発スタイルを当社では「共創」と表現し、今後取り組んでいきたいと考えております。

品質の見える化

過去のソフトウェアメトリクスから当社の標準的な数値を算出する
ソフトウェアメトリクスとは、ソースコードの規模,複雑さ,保守性など、特定の側面を定量的に示す指標。データを定期的に取り、分析を行うことで、小さな変化を捉えることができます。つまりメトリクスの数値変化で課題が表面化するということです。このソフトウェアメトリクスの変化によって課題を発見し、新たな仕組みを導入することでお客様での不具合を未然に防止していきたいと考えています。

 

長文を読んでいただきありがとうございました。これからも我々は品質マネジメントを重視したソフトウェア開発へ向けて、当たり前のことを当たり前に、愚直に励んでいきます。

もしよろしければ他のSSコラムもご覧ください。

弊社の取引実績はこちら

https://www.secondselection.com/work/

最新情報をチェックしよう!