セキュリティ

センター長 園田道夫のセキュリティコラム

第14回 犯罪捜査技術を活用したソフトウェア開発手法

夏の盛りもこれから、という時期に突然監訳の仕事が舞いこんで来ました。何でも犯罪捜査技術を使って開発中のコード群のボトルネックや炎上ポイントを特定したりするらしい。 異質な領域の組み合わせが突飛でおもしろそうだったので、二つ返事で引き受けました。
やってみたらまぁおもしろい。 実際の犯罪捜査でも使われる手法であるプロファイリングと呼ばれる技術・考えるアプローチの一つに地理的プロファイリング、というものがあります。 連続的な犯罪者は住処から適度な距離離れた場所で犯罪を犯し、次の犯行では第1の現場から離れた場所を選ぶ傾向があります。
往々にしてその離れた場所は住処を中心として反対側になりますが、そのような行動を繰り返すことで、犯行現場はドーナツ状の配置になってきて、ドーナツの中心、 空白地帯の中心にある住処が存在する可能性が高い地域が浮かび上がってきます。このような手法のことを地理的プロファイリング、と言います。
この考え方を援用して、例えばモジュール単位の変更頻度を可視化してみると、バグを多産していそうな「場所」を可視化し、深掘りして分析調査すべき場所を絞り込むことができます。
そのようにして絞りこんだ場所=コードに対し、その複雑さ度合いを重ね合わせることで、バグや脆弱性を生み出しやすい場所として特定することができます。
複雑さとはループの多さ、ネストの深さなどで表され、古くから使われている指標も存在しますが、それ単独ではうまく説明しきれていなかったところに、 変更頻度を重ね合わせて「おおなるほど、やはりここがバギーなのか」という実感とマッチさせていき、さらには優先的に改善する場所を特定しやすくする、というのが本書のアプローチの代表例であり、 犯罪捜査テクニックを援用する利点であるわけです。そのような分析をサポートするツールも揃っており、著者によるワークショップも開催されていたりします。
有る程度の規模以上の開発に関わっている方々には、ぜひ一度お試しいただきたい。そのくらいお勧めですね。
世の中からバグや脆弱性をできるだけ減らしていけるように。

ステマですらない大宣伝になっていますが(笑)、本書はそのくらいオススメですので、見かけたら手に取ってパラパラ見てみてください。
犯罪捜査技術を活用したソフトウェア開発手法