ソフトウェア系統学(1)

(生物)系統学では、生物が辿ってきた進化の歴史を復元し、系統樹として表現します。ソフトウェア系統学では、ソフトウェアが辿ってきた進化の歴史を復元します。バージョン管理システムを利用してソフトウェアを開発していれば、開発におけるブランチやマージは記録され、GitHubのようなサービスを利用すれば、派生関係さえも記録されます。しかしながら、バージョン管理システムを使わずに開発された(古い)ソフトウェアやそもそもソースコードが手に入らない場合はそうはいきません。

ソフトウェア考古学

ソフトウェア考古学(software archaeology)という言葉は1990年代から使われているようです。OOPSLA 2001では同名のワークショップが開催され、ICSE2010でも同名のセッションが組まれました。一言で言えば、ソフトウェア考古学では、他人の書いた(レガシー)コードを効率良く理解するため方法について研究します。

マルウェアの系統分類

様々な脅威をもたらすマルウェアの解析、特に振る舞い(behavior)の解析は理論的に自動化が不可能で、多くの労力が必要となります。当然ながらマルウェアもソフトウェアの一種ですが、通常はソースコードを入手することはできません。マルウェアは多くの変種(variants)が作成されますが、それらの系統関係が明らかになれば、解析の効率化が可能となります。

コードホモロジー解析

コードホモロジー解析(code homology analysis)では、ソフトウェアの系統樹に基づき、相同コード(homologue, homologous code)を見つけ出し、追跡します。コードホモロジー解析は、コードの理解を助けたり、エラーを引き起こす可能性のある一貫性の無い変更を、検出・防止するのに役立ちます。

次回以降、具体的にソフトウェアの系統樹を復元する方法について説明します。