全3216文字
PR

ファイルの排他制御をかけず

 真っ先に疑われるのはソフトウエアの不具合だ。IPAで資格試験などを担当する川浦立志理事らは、日立と協力し原因究明に乗り出した。

 問題点はすぐに絞り込めた。このWebサイトの主要な機能はJavaで開発している。受験者一覧を出力するプログラムは、アプリケーションサーバー上で「SYSOUT」と名付けた単一ファイルに受験者リストを抽出して書き出す。この際、プログラムはこのファイルに排他制御をかけず、受験者を書き出していた。

 複数ユーザーが同時にこの機能を使うと複数プロセスが単一のSYSOUTファイルを開き、複数社分の受験者リストを同一ファイルに書き出してしまう。この時の書き込みは「挙動が予想できない。複数社のリストが混ざって書き込まれることもあるし、互いにデータが上書きされ一部が欠落するかもしれない」(川浦理事)。

 いずれにせよ正しいリスト出力は期待できず、ファイルに他社の情報が混入してしまう原因になっていた。トラブル発覚のきっかけとなったA社とB社の例では、偶然にも時間差が0.2秒とほぼ同時刻に受験者リストを出力させダウンロードしていた。

 他社のダウンロード操作とタイミングが重なることはそれほど頻繁には発生しない。そのため利用者からの指摘を受けにくく、不具合の発見を遅らせた面がある。不具合があったプログラムは2011年から稼働していたにもかかわらず、これまで問題が発覚しなかった。

 違う言い方をすれば利用者が気付かなかっただけで、過去にも同様の不具合が起こっていた可能性は否定できない。今となっては「その実態は調べようがない」(IPAの情報処理技術者試験センターの山内健司副センター長)。

「オープン系の経験が浅かった」

 開発元の日立はソースコードを修正、3月5日に不具合を解消したという。IPAと日立は背景を含めた原因の解明と再発防止に取り組んでいる。再発防止の観点では「なぜ開発者はSYSOUTと名付けた固定ファイル名を使ったのか」「なぜこの書き込み用ファイルに排他制御をかけなかったのか」が問われる。

 川浦理事は調査中と前置きしながら「プログラムの開発者がメインフレームの経験が深く、今回求められたLinuxなどオープンシステムの経験が浅かった可能性がある」と説明する。

 メインフレーム上のプログラム開発では、処理結果を出力する「SYSOUT」と呼ぶファイル出力の機能をよく使う。ファイルはプロセスごとに自動で独立して作られ、排他制御や名前の重複を気にせずに使えるのが「常識」だという。LinuxやWindowsにも処理結果を出力する機能はあるが動作の仕組みは異なる。メインフレームの常識を持ち込んだ開発が、トラブルの背景にあるようだ。

 開発元の日立はシステム全体のコードレビューを進めているという。他にもメインフレームの常識で開発されたがゆえの不具合が潜む可能性があるからだ。日立は日経コンピュータの取材に「お客様の案件のことはコメントできない」(広報)と話す。レビューは2018年6月までの予定。これが完了してようやくIPAにとっての再発防止策が完結する。