“The Cost of Poor Software Quality in the U.S.”というレポートはテキサス大学のKrasner教授によって纏められ、初版は2018年に公開されました。それから2年を経て2020年の米国のソフトウェアの低品質による「コスト」がどのように変化したのか、新しく発行された2020年版のレポートからエグゼクティブ・サマリーを眺めてみることにしましょう。
冒頭に書いた通り、2020年の低品質なソフトウェアに伴う総コストは2.08兆ドルと試算されました。これは、2018年に比べて14%増加しています。増加の根拠はIDCの市場予測によるもので、IT産業の市場規模が拡大を続けているためです。
レポートでは、低品質なソフトウェアによって発生するコストを三つの項目に分けています。
これらの他に「技術的負債」という項目がありますが、これは「将来コストとなる可能性のある潜在的リスク」を表しています。これは1.31兆ドルで、2018年から14%増加しています。
まず最初に、Internet of Things (IoT) (あるいは Internet of Everything (IoE))と呼ばれる複雑なシステムが急速に増加していることが原因として挙げられるでしょう。クラウド、組み込み機器、モバイル端末、PCやセンサーネットワークなどが組み合わせられた現代のシステムは、柔軟に異なるコンポーネントやサブシステムをつなぎ合わせることで必要なサービスやアプリケーションを実現することが可能ですが、一方で、個々のサブシステムやコンポーネントで、統一されたセキュリティレベルを実現することが困難であることによりアタックサーフェスが増えるからです。
2番目に、低品質なソフトウェアを改修するためのコストだけでは済まないからです。ソフトウェアに内在する「脆弱性」により、サイバー攻撃を受ける事案が急速に増加しています。また、レポートにも書いてありますが、表面化していない、統計に現れないコストがあると想定されます。
NIST(National Institute of Standards and Technology/アメリカ国立標準技術研究所)によれば、一般的なソフトウェアには1000行当たり、平均で25個のエラーがあるとしています。つまり、「稼働するシステム」の劇的な増加により問題が悪化し続けているのです。
アタックサーフェスの増加は他にも原因があるでしょう。たとえば、次のようなものです:
脆弱性を悪用するサイバー犯罪やサイバー攻撃は増加の一途を辿っています。アクセンチュアのレポートによると、サイバー犯罪によるコストは2018年には平均で年間260万ドルとのこと。また、別のレポートでは、ランサムウェアによるコストは、2021年には6兆ドルと試算されています。
レポートで指摘しているまでもなく、ソフトウェア品質を向上させるためのセオリーとして、上流で品質を作り込むという考え方があります。これは現在では「シフト・レフト」あるいは「シフト・エブリウェア」という言葉に置き換えられて語り継がれていますが、瑕疵、バグ、脆弱性などが生まれた(埋め込まれた)場所に最も近い場所でそれらの問題を見つけて直していくことを指しています。システムの運用の手順に問題ががあれば、運用手順を定義する段階で詳細な検証を行うことで定義段階で修正できるかもしれません、ソフトウェア要件を定義する段階で問題がわかれば、後工程でコードやシステムのテストや手戻りにかかる工数をかけずに済むのは自明です。
このように、コードになる前の段階で問題を発見するには「レビュー」によって典型的な誤りや齟齬などを特定することが必要です。また、経験豊富な専門家による支援があれば、より多くの問題の種が芽吹く前に見つけることができるはずです。さらにコードに不要な脆弱性を埋め込むことを防ぐにはコードを書いた後、プログラマー自身が静的解析(SAST)ツールを使うのが効果的です。これは、単体テストをプログラマー自身が書くのが効果的なのと同じ理由です。
ソフトウェア開発ライフサイクル(SDLC)を通して品質を高めるためには、問題を見つけるだけではだめです。セキュアなコードの書き方を覚え、システムのアーキテクチャや構成による課題や脆弱性を見つけ出し、セキュリティ・テストを開発ライフサイクル全体に組み込むことができれば、より品質の高いソフトウェアをデリバリーすることができるようになります。
また、一般的なセキュリティ・テストの組み込みは、以下のように考えられます。
さらに、次の点に留意することを強くお勧めします。
しかし、この取り組みに終わりはありません。
先に述べたように、SDLCにおける最適なタイミングで最適なテストを行うことが効果が高いという点には異論がない(あるかもしれませんが)と思います。しかし、これを自分の組織で実現するためには、いくつも超えなければならないハードルがあります。それは、組織全体での認識となり、経営層からの支援がなければ、プログラマー、QA、PM、テスターといった開発現場の個々人が理解しているだけでは高い品質を実現することはできないからです。
レポートでは約2兆ドルのコストが試算されていますが、これを減らすことができれば、コストを投資として振り向けることができるはずだからです。
みなさんの組織ではどうですか?