日本のソフトウエア生産性と品質は世界最高水準?

日本のソフトウエア生産性と品質は世界最高水準〜なぜ日本のソフトは国際競争力がないのか。 - 木走日記

「日本人技術者の生産性の高さ、成果物品質の桁違いの高さは、何人ものアメリカの学者の科学的調査で報告されている」というスティーブ氏の指摘ですが、私の知るところでは代表的なのが、マイケル・A. クスマノ教授 MIT(マサチューセッツ工科大学)の調査報告などがあります。

IT技術者へのエールを送っているところに水を差すつもりはないのだが、引用されていた表が気になったので原著論文を読んでみた。

Michael A. Cusumano, Alan MacCormack, Chris F. Kemerer, Bill Crandall: Software Development Worldwide: The State of the Practice. IEEE Software 20(6): 28-34 (2003) (abst, pdf)

論文自体は、各国の生産性や品質の優劣をつけるのが目的ではなく、環境や開発手法の違いなどと関連させて、それぞれの地域の特性を見出そうというものである。

読んでみて思ったこと。

確かに、狭い意味での生産性や品質は高いかもしれないけれど、
逆に「なぜ日本のソフトは国際競争力がないか」という特性が浮き彫りにされている。

見た目の品質の高さは、技術者の優劣ではなく米国と日本で求められるものの違い
(それによる開発手法のちがい)に起因しているようだ。

プロジェクトの性質の違い

まず、収集されたデータはソフトウェア開発会社の2001-2002の間の成果を自己評価してもらったものだ。
それぞれプロジェクトの性質が違うものをまとめているので分散が大きく、統計的に優位な違いを論じられるものではないと論文では指摘している。

論文では、プロジェクトの性質(開発するソフトウェアのタイプ、要求される信頼性、ハードウェアプラットフォーム、顧客のタイプ)がまとめられている。

調査された範囲では、日本、米国ともにプロジェクトのつくるソフトウェアの6割は「Custom or Semicustom」、つまり顧客の要求に応じた受注生産であることに注意したい。

国際競争力が関係するようなパッケージソフトウェアとは状況がだいぶ違うと思う。

プロジェクトで要求される信頼性(reliability)のレベルを高・中・低でランク付け(あくまでも自己申告だが)したばあいに、日本のほうが高信頼性を要求されている。
また、微妙ではあるが、日本は他国よりメインフレームの案件が多かったことなど、各国で求められているプロジェクトの特性がちがっている。

開発手法の違い

また、プロジェクトでどのようなプラクティス(開発手法)が採用されているかもまとめてあって興味深い。

特に、ウォーターフォール型の開発に必要な

  • Architectural specifications (印83.3, 日70.4, 米54.8),
  • Functional Specificaitons (印95.8, 日92.6, 米74.2),
  • Detailed designs(印100,日85.2, 米32.3)

の採用率の違いに論文は注目している。

The major difference was in the US, where specifications were used less often across the board.

米国では詳細設計を行っているのは32.3%しかない。

著者らによれば、この傾向(開発中に変化が必要なところでは詳細設計は時間の無駄なので、機能仕様から直接コーディングに入る)は
(執筆時から)10年前にマイクロソフトの開発に見られた傾向で、これが米国先般に普及していることが示唆される。

また、米国に比べて日本ではsubcycleの採用率が低く、
ウォータフォール型の開発がまだ日本では主流であることを指摘している。

Less than half the Japanese projects used subcycles, indicating that a waterfall process is still a popular choice in this region.

パフォーマンスの違い

さて、問題のパフォーマンスであるが、もとのブログ記事で引用されていた日本語版では
「一人当たりのプログラマーが月当たり記述するコード数」という記述があった。
ここで「コード数」とは No. of new line of code (LOC)、つまり行数のことである。
プログラミング言語やプロジェクトのタイプなどを考慮せずに集計した値である。

これでパフォーマンスの優劣をはかるのには限界があることは論文でも言及されており、
同一組織内でのプロジェクトの比較には使えるけど、組織間では限界があるとしている。

さて、論文によれば、日本と米国を比べた場合のコード生産量の高さと不具合数の低さは
90年代の調査でも確認されたことだそうだ。

日本の(狭い意味での)品質の高さは継続的に確認されて、定評のあるものなのだ。

ただし、これは開発の目的の違いによるものだと論文では指摘している。

US programmers often have different objectives and development styles. They tend to emphasize shorter or more innovative programs and spend more time optimizing code, which ultimately reduces the number of LOC and increases efforts.

つまり、米国では革新的なプログラムをすばやく生産することに重きが置かれている。

論文では、日本と米国とどちらのパフォーマンスが優れているかといった絶対的な評価をするのではなく、
環境や開発手法との兼ね合いを議論している。

具体的には、ウォーターフォール型の開発が実際に不具合の少ないコードを生んでいることを見て取っている。

ただし、論文でも指摘しているとおり、それがビジネス的な成功と必ずしも一致しているわけではない。

Yet, in a business sense, locking a project into a particular design early on might not produce the best product in a changing market.

また、コードの生産性ではビジネス的パフォーマンスを図るのには適さないだろうが、かといって、
経済的パフォーマンス情報(収益とか)を多様な目的のプロジェクトに対して比較調査することは
不可能に近いとも述べている。

日本でイノベーションは求められているのか?

さらに、論文ではこんなことも言われてしまっている(残念ながら事実だが):

It is important to remember as well that no Indian or Japanese company has yet to make any real global mark in widely recognized software innovation, long the province of US and a few European software firms.

日本からは世界に広く認められるようなソフトウェアのイノベーションはまだ見られない。

確かにそのとおりとしかいえない。少なくとも2003年時点では。

でもそれは技術者個人の能力の差ではなく、単に求められていることの違いに過ぎないかもしれない。「下らない日本独自の商習慣」はその象徴的なひとつということであろう。

日本でもイノベーションが求められているところがあれば、日本の技術者にはそれができる、と思う。

それが日本では求められていないのだったら、イノベーションの場を求めて移り住むのというのも手である。ミクロ的には(個人レベルでは)問題は解決されますよ。そんな人がシリコンバレーにどんどん来ればいいと思う。そしてそれが結局は日本の国際競争力の向上につながればいいと思う。