2年少し前に異動になった部署でなんだか巨大なシステムを開発する仕事を任された。
その中核になるユニットに乗るソフトウェアは前世代が巨大になりすぎたためにバラバラに開発した小さい部品を組み合わせて動かすコンポーネント指向な発想で作りなおされようとしていた。
いちおうざっくりとしたソフトウェアブロックに分割されて設計が進められていた段階での参加だったが、そもそも要件が不明確でありその段階で正しい設計かどうかを判断することは困難だった。自分たちの責任範囲の部分については決めれたとしても、他の開発者たちはより貧弱で何も決めれない状態が続いた。
結果的にまともな設計は不可能と判断してとにかく作ってみる方向で現場としては動いた。
去年の夏頃に、1年以上経ってようやく全貌が見えてきた。致命的な設計ミスもいっぱいあったが、半分以上は僕が参加する以前に顧客含めて合意していた事項だったために、軌道修正に手間暇を要した(このへんはまた気分が向いたら書く)。顧客も一枚岩ではなかったし、こちらもでかい組織なのだが、最終的なシステムをまともにしたいという目的は完全に一致していたのでプロジェクトの規模の割には調整は比較的スムーズに進めることができて、これは素晴らしいところだと思った。小さいプロジェクトしか経験したことがない人からすれば「腐っている」と思われるかもしれないが、この規模のプロジェクトでこのスピード感を継続できる彼らはやっぱり凄いのだ。
最近になってフィールドテストが本格的に実施されるフェーズに入った。フィールドテストでは再現性のないバグが大量に発生しているが、実際に発生してしまったからには原因を究明して修正するにしてもしないにしても何らかの根拠を元に判断を下す必要がある。テスト担当者の指摘はメモ書きのようなものであまり参考にならない。各所に散らばったログや粗い解像度のビデオから不具合動作の痕跡を見つけだして不具合の原因を見つける作業が続いている。
具体的には下記のような指摘である
・使用中にサウンドが一瞬途切れた瞬間があった
・XXの操作中にYYの操作をしたら画面が一瞬乱れた
・繋がった外部機器に対してXXという信号が送られるはずがZZが送られたことがあった
・内蔵しているNANDフラッシュメモリに書き込みエラーが発生するようになった
一瞬途切れたとか乱れたとかそういう現象について該当するログが出ているわけではなく、現象からログ回収までの時間が長かった場合にログが消失していることも多い。
バグ解析とかデバッグとかそういう言葉で語られている状況なんだけど、最近の活動は一般的に想像されるそれらと違ってフォレンジック的な内容が多くなっているような気がする。