“The Cost of Poor Software Quality in the U.S.”というレポートはテキサス大学のKrasner教授によって纏められ、初版は2018年に公開されました。それから2年を経て2020年の米国のソフトウェアの低品質による「コスト」がどのように変化したのか、新しく発行された2020年版のレポートからエグゼクティブ?サマリーを眺めてみることにしましょう。
冒头に书いた通り、2020年の低品质なソフトウェアに伴う総コストは2.08兆ドルと试算されました。これは、2018年に比べて14%増加しています。増加の根拠は滨顿颁の市场予测によるもので、滨罢产业の市场规模が拡大を続けているためです。
レポートでは、低品质なソフトウェアによって発生するコストを叁つの项目に分けています。
これらの他に「技术的负债」という项目がありますが、これは「将来コストとなる可能性のある潜在的リスク」を表しています。これは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)を通して品质を高めるためには、问题を见つけるだけではだめです。セキュアなコードの书き方を覚え、システムのアーキテクチャや构成による课题や脆弱性を见つけ出し、セキュリティ?テストを开発ライフサイクル全体に组み込むことができれば、より品质の高いソフトウェアをデリバリーすることができるようになります。
また、一般的なセキュリティ?テストの组み込みは、以下のように考えられます。
さらに、次の点に留意することを强くお勧めします。
しかし、この取り组みに终わりはありません。
先に述べたように、厂顿尝颁における最适なタイミングで最适なテストを行うことが効果が高いという点には异论がない(あるかもしれませんが)と思います。しかし、これを自分の组织で実现するためには、いくつも超えなければならないハードルがあります。それは、组织全体での认识となり、経営层からの支援がなければ、プログラマー、蚕础、笔惭、テスターといった开発现场の个々人が理解しているだけでは高い品质を実现することはできないからです。
レポートでは约2兆ドルのコストが试算されていますが、これを减らすことができれば、コストを投资として振り向けることができるはずだからです。
みなさんの组织ではどうですか?