勤労統計問題は「COBOLプログラムのバグ」か?
池田信夫さんが『勤労統計問題の原因は「COBOLプログラムのバグ」』(http://agora-web.jp/archives/2036852.html)を書きました。
勤労統計問題とは全数検査を抽出検査に切り替えるとき生じたミスです。
上記文中で池田さんはミスの原因は
・担当者が忘れた(*1)
からとしています。
そのミスが修正されなかったのは
・昔のコンピュータ言語COBOLで書かれていたので、読めるのは高齢者だけで、ミスを見逃した
からだと結論づけています。
ブロガーの藤原かずえさんもCOBOLで書かれたプログラムは
「冗長で読むのが疲れます。英文字が多すぎて本質を視覚的に把握しにくく、これをチェックするのは罰ゲームの感覚ですね(笑)」(https://twitter.com/kazue_fgeewara)
と書いておられます。
for(i=0,j=0;i<10;i++)
{j = j +i}
と書くところを
MOVE 0 to J
PERFORM VARYING I FROM 0 BY 1 UNTIL I > 9
ADD I TO J
END-PERFORM
となります。COBOLより古い言語FOTRANより抽象度が低い言語がCBOLなのです。
けれど、C言語なりコンピュータ言語を知って理解している人なら読めます。
実際に手を動かしてプログラムを保守していたのは誰なのでしょう?
(当時は)労働省の職員?、それとも、下請けのNTTデータあたりの孫請け?
池田さんの記事によると労働省の職員のようです(*3)。労働省の職員だとするとその人は専門職なのか、ローテーションで移動していく人なのかが気になります。
この件について高橋洋一さんは統計的素養が無い人が担当していからだろうと述べています。
私も高橋さんに賛成です。
統計の一部を全数検査から1/3抽出に切り替えたのだから、3倍しなければなりません。このことに担当者は思いが至らなかった疑いが強くあります。担当者に統計の素養どころか、平均の意味すら分かっていなかったのでは?
(勿論、作業している間に邪魔が入り、修正が漏れてしまった可能性はあります。
指示が不適切だった可能性もあります。ですが、一般的には、想定されるこの規模のプログラムでは複数の人が改造に関わら無いはずです。)
池田さんの記事では担当者がCOBOLを読める人が少なく、クロスチェックができなかった(*3)とありますが、これは一般論へ逃げることで、所管を庇っているのだろうと推察しています。彼らの教養不足を隠した言い訳でしょう。なぜなら、不正は2004年から行われてます。現在、「COBOL を扱える者は1人又は2人に過ぎなかった」(*3)としても、2004年当時はどうだったのでしょう。2000年問題もありましたのでもっと多かったはずです。
プログラムを改修したら、テストをします。それらしい、ほぼ同じ値が出たのでOKとしてしまったのでしょう。
そもそも適切な統計についての知識があれば全数調査の必要はありません。適切な知識が無いため官僚と議員は過剰な全数調査をする制度を作ってしまいました。そのため、現場の調査員には過重な労働を強いることとなりました。(定年後の職員を嘱託の調査員にすることで退職公務員の福利厚生策となっていたのかも知れません。)
この制度は経費が嵩みます。ハイエナ大蔵省/財務省の経費節減のターゲットになってしまいました。
(*1)「例外処理なので統計の処理プログラムを修正しなければならないが、それを行ったという証言がないので、単に担当者が忘れたのだろう。」
(*2)「COBOLで書かれた特殊なプログラムなので高齢者しか読めず、そのミスがチェックできないので、去年まで誰もが「逆数をかけているもの」と考えて処理していた。」
(*3)「システム改修を行った担当係によると「外部業者等に委託することなく自前でシステム改修を行うが、毎月勤労統計調査に係るシステムのプログラム言語はCOBOLであり、一般的にシステム担当係で COBOL を扱える者は1人又は2人に過ぎなかった」。このため、ダブルチェックができなかった。」