改め Objective Technician

はぐれ技術者のやりたい放題

バグ×バグ=正常動作

2007-03-03 19:15:54 | プログラミング
バイトの話。


だいぶ前からプロジェクトが進んでいるらしい排ガス浄化装置のシミュレーションを引き継いでいる。


てか、前の担当者どうしたの?


初めは特に説明を受けるわけでもなく、これまでの打ち合わせ資料や企業様の極秘資料を眺めて状況を把握する。

最後まで読み終わって、どうやら今は最終段階でシミュレータを実装する段階にあって、さらにこれまで蓄積してきた考えやプログラムでは実際の系に対応できないと結論付けられていて、


前の担当者の苦労をすべて水に流して

新しい方法でシミュレータを作ることになっているらしいことが分かった。



他人のソースを解読して修正するよりは自分でゼロから組んだほうがはるかに楽なんだけど、一年以上過去の蓄積を全部無視してコーディングすることにどことなく引け目を感じながら実装を進めた。


完成したソフトをSE(に当たる人)に見せると、「じゃぁこれは一段落して、次はグラフィックをどうするか考えよう」みたいな話になり、内心「これでいいのか?」と思いながら報告書をまとめた。


このシミュレーションの目的は、ディーゼルエンジンなどで発生する浮遊粒子状物質(PM)をフィルター(DPF)や触媒で連続再生させることが目的なんだけど、いまのところシミュレータのパラメータに現実的な値を設定してる限り、連続再生どころかすぐに目詰まりを起こす。


最終的に、「いろんなシミュレーションをしたけど、結局連続再生はできませんでした。」って報告するのか?


少なくとも性能評価ぐらいはできるだろうけど。




そんなことよりも最近、C独特の不可解な現象が多発している。


あるところを修正すると、全く関係ないところがうまく動作しなくなったり、


バグを修正すると別のバグが出てきたり、



関係ないところをちょっといじると不具合がなくなったり、




こういうことが起きるということは、たとえ正常に動作しているように見えてもたいていどっかバグっててデンジャラスなソースであるので最終的にはきれいに直さなきゃいけないわけで、がんばってバグを探してたらさらに不可解な現象に遭遇した。



正常に動作してるソースで一つ怪しいコードを見つけて、そこだけ切り出してテストしてみると明らかにバグであった。

それでもどうしてちゃんと動いてるのか不思議に思い、その周辺を眺めていると他にもバグと思われる記述が見つかった。


なんと、複数のバグが重なり合ってなぜか正常な動作になっている



のである。



こんな、奇跡としか言いようがない状況に遭遇したら、感動だけを胸に残して実行環境が変わらないことを願いながら見なかったことにすることが奨励されている。



「動いてるソースにはさわらない」の不文律のもとに。

最新の画像もっと見る

コメントを投稿