継続的インテグレーション
文責: 田村敬也
“継続的インテグレーション”はなぜ重要か?
継続的インテグレーション(CI)とは、自動で定期的に実施される結合テスト環境のことです。
この環境が簡単でかつ信頼できるほど、開発者は誰かの手作業によるテストを待つ必要がなくなり、自分の手元でソースコードの改善を繰り返しやすくなります。これは生産性と品質向上に寄与します。
継続的インテグレーションは、「CI/CD」と、CDと合わせて語られることが多いです。CDは継続的デリバリーもしくは継続的デプロイメントの意味です。CI/CDは領域が関連しており、合わせて継続的に価値提供をするために、昨今のソフトウェア開発に必要不可欠な仕組みとなっています。
ソフトウェア開発では、市場からフィードバックを得て、ソフトウェアに素早く反映することが競争力となります。ソフトウェアの開発プロセスでは、開発したものを統合し、デリバリーすることが必要です。そのサイクルを素早く行える仕組みがあると、市場からのフィードバックをより早くソフトウェアに反映することが可能になります。
継続的インテグレーションの環境整備
継続的インテグレーションを効果的なものにするためには、ルールや環境の整備が必要です。
ユニットテストの存在
継続的インテグレーションにおいては、ユニットテストが重要な役割を担います。ユニットテストは、個々の機能やメソッドが正しく動作するかどうかを確認するためのものであり、品質保証に欠かせないものです。プロダクトの半分以上のモジュール/クラスファイルに対して、ユニットテストが存在することが望ましいです。
テスト用データやスタブ/モックなどの整備
テスト用データやスタブ/モックなどを整備することが望ましいです。テスト用データは、テストの実行時に利用するデータを指します。スタブ/モックは、テストの実行時に、テスト対象のコードが依存するコンポーネントを模擬するために利用されます。これらを整備することにより、テストを書きやすくし、品質保証の効率を高めることができます。
継続的インテグレーションはどのようにして測定するか
CIでは、ビルドとテストが自動的に実行されるため、ビルドの頻度と成功率を監視することができます。頻繁にビルドが成功し、問題が早期に発見される場合、CIの効果が高いことを示します。30分以内にテストが完了することが理想です。
継続的インテグレーションで陥りがちなアンチパターンとはどういう状況か
テストは、開発者全員が共有する義務であるべきです。特定の開発者にテストを任せることは、その開発者に負担をかけるだけでなく、チームの品質を損なう可能性があります。開発者全員がテストを書くことを奨励することで、コード品質を向上させることができます。
テストは、定期的にレビューおよびメンテナンスされるべきです。テストコードが複雑で、メンテナンスされていない場合、テスト自体が信頼できなくなる可能性があります。テストを単純化し、整理することで、テストの信頼性を高め、品質を向上させることができます。
自動テストが失敗したままのコードを本番環境にデプロイすることは避けるべきです。テストの失敗は、問題があることを示すサインであり、問題を修正する必要があります。失敗したテストが放置されると、品質が低下し、問題を発見するのに時間がかかる可能性があります。テストが失敗した場合は、問題を修正するか、テストを修正する必要があります。
これらのアンチパターンを回避するためには、チーム全員がテストを書き、単純かつ整理されたテストをメンテナンスし、失敗したテストを修正することが必要です。また、品質を向上させるために、コードレビューやペアプログラミングなどのプラクティスも採用することが重要です。