オープンソースのメーラー「Thunderbird」の開発チームが「バグを減らす開発手法」を解説


メールソフト「Thunderbird」では、ソフトウェアの品質向上のために開発チーム内で日常的に自動テストが実行されています。その理由や手法についてThunderbirdの開発チームが解説しています。
Automated Testing: How We Catch Thunderbird Bugs Before You Do
https://blog.thunderbird.net/2024/04/automated-testing-how-we-catch-thunderbird-bugs-before-you-do/


◆自動テストの目的とメリット
Thunderbird開発プロジェクトではコードの変更によるバグの発生を最小限に抑えるために「自動テスト」が重視されています。開発チームによると、、Thunderbirdのコードや機能に変更が加えられるたびに、Windows、macOS、Linuxのテストマシンを用いて自動テストを実行し、間違いや意図しない結果を検出しているとのこと。また、1つの変更につきテスト時間は60~80時間を要することも語られています。
さらに開発チームは「自動テストを実施することで、毎月のアップデートで更新版のコードがリリースされる前のテストに費やす時間を大幅に短縮できました。この結果、チームにかかる負担やプレッシャーが大きく減少しました」と述べました。


その一方で開発チームは「私たちは、単に気分を良くするためだけに自動テストを実行しているのではありません」と述べ、自動テストを実施する理由について説明しています。
・ミスの防止
あるコードが期待通りに動作するかどうかをテストすることで、ユーザーからのバグ報告を待つことなく、開発チーム内でバグの発見や修正を実施することが可能です。
・Firefox要因のバグの確認
Thunderbirdのコードは大部分をFirefoxのコードを共有しており、Firefoxに変更が加わるとThunderbirdのコードも変化します。自動テストを実行することで、Firefoxのコード由来のバグにいち早く気付くことができます。
・人間のテスターの負担減
自動テストの導入で、退屈な繰り返しやセットアップが難しいタスクから人間を解放することが可能になり、限られた人的資源を適切に扱うことができるようになります。開発チームのジェフ・ランコウ氏は「私は最近、自動テストに対しメールの取得をトリガーする22の方法と、メールの取得が機能しない可能性がある10の状況をチェックするテストを追加しました。人間のテスターがこれら全てをチェックすることは困難ですが、コンピューターにテストを実施させることで、1日に何度もテストすることが可能です」と語っています。


・既存のバグの発見
Thunderbirdのソースコードの一部には非常に古いコードが含まれています。これらをコンピューターがテストすることで、コードを書いた時の間違いや、時間の経過に伴って不具合が生じた場所を特定することができるようになります。また、自動テストを実行することは古いコードの内容理解にも役立つそうです。
加えて開発チームは、バージョン115のリリース以降「暗号化されたチャネルを使用したメールサーバーからの通信」「メールサーバーでの2要素認証」「特定のアドレスを使用して、暗号化されていないチャネルを使用してはいけないウェブサーバーとの通信」などに関する自動テストを実施する方法を見つけ出したと明かしています。これらの方法は、人間のテスターがテストを実施していた当時は不可能とされていました。
◆コードカバレッジの管理
開発チームは、テスト中に実行されたコードの割合を示す「コードカバレッジ」の推移を記録して公開しています。
コードカバレッジの推移を記録したグラフが以下。縦軸がコードカバレッジの値を示し、横軸はコードカバレッジを記録した日付を示しています。グラフを見るとコードカバレッジの値がわずかに減少傾向にあることが分かります。これは「開発チームが関与していないサードパーティー製のコードが増加した」ということを示しているとのこと。


コードカバレッジの記録にはメンテナンスされていないコードを可視化する役割もあります。すでに、開発チームはコードカバレッジの記録から見いだされた未使用のコードを削除しているそうです。
開発チームはコードカバレッジを記録するメリットとして間違ったコードやメモリリークの発見が容易になったことや、使用されなくなったコードの削除を円滑に実行できるようになり、結果としてメンテナンス時間が短縮されたことをあげています。
◆テストスイートの移行
Thunderbirdは、これまで使用していたテストスイートの「Mozmill」を2023年末に廃止し、「Mochitest」と呼ばれる別のテストスイートへの移行を進めていることを明かしています。開発チームは「Mozmillは巧妙ではあるものの奇妙なトリックが用いられていたため、オーソドックスな方法を使えるMochitestに移行した」と述べました。
◆テストコード増加中
Thunderbirdの全コードに対してテストコードが含まれる割合は年々増加傾向にあり、2019年1月時点で約19%だったテストコードは、2024年1月には約27%を占めるようになりました。開発チームは「今後は、コントリビューターの皆さまに、パッチにテストをもっと頻繁に追加していただくようお願いする予定です」と語っています。

ジャンルで探す