はじめに
本稿は、Developers Summit 2021 の以下のセッションで学んだことを書きます。
セッション名:ソフトウェア品質を高める開発者テスト
講演者:高橋 寿一[ロジギアジャパン]
セッション詳細:https://event.shoeisha.jp/devsumi/20210218/session/3019/
学んだこと
上流品質を担保(Shift Left)するためには?というテーマのセッション。
上流テストを十分行った方が、出荷後品質が良いというアンケート結果もある。
デイリーで上流品質を担保するために重要なことは以下。
- 単体テスト
- リファクタリング
- 要求仕様のテストケース展開
Googleの話
- Googleの単体テストの網羅率の中央値は78%で、システムテストはほとんど実施しない。
- Google単体テスト基準として、最初は60%以上としている。
- よく変更されるコードの網羅率を上げる。レガシーコードはある程度、ほおっておいても良いという考え方。
2割の部分に8割以上のバグが潜んでいる。
- よく変更されるファイル
- 長いファイル
- 複雑度が高いファイル
関数単位でなく、ファイル単位で単体テスト計画を立てる必要がある。
既存プロダクトに対しては、上記の2割の部分を抽出して、単体テスト計画を立てるようなコンサルをすることもある。
長いファイル・複雑度が高いファイルは分けるようにリファクタリングする。
大きいクラスを分けるだけで、バグが凄く減る。
要求仕様のテストケース展開
- 要求仕様とテストケースは、関連付けてテストを行うことが必要。
- 要件定義を明確に行った場合と、行わない場合で検出不具数は2.7倍違う。
テストは基本すべて自動化し、すべての自動テストは最低その日に終了する。
その日に品質担保できないものは、出荷後の不具合に繋がりやすい。
自動化健全性チェックリスト
- 網羅率上がっているか
- スピード十分あるか
- 自動化ですべてのバグが見つからないことを認識しているか
セキュリティバグや非機能バグは、自動単体テストでなく、別の方法で実施する。
テストスピードが重要なので、そういう意味では単体テストがお得。
MVC分離でUIテストのテスト時間の最小化する。
事例の紹介
プルリク作成後、2分間でビルドし、3分間で単体テストを実施し、3分間で静的解析し、1時間に1回の頻度で8分間でシステムテストを実行する。
まとめ
出荷前に品質を高めるためのノウハウを学ぶことができました。
ちなみに私は、普段はエンジニアリングマネージャーとして、チームの皆で楽しく開発する施策を色々実施しています。詳しくは以下を参照ください。
1年以上かけて生産性倍増+成長し続けるチームになった施策を全部公開
Twitterでも開発に役立つ情報を発信しています → @kojimadev