CNDT 2022、Jenkinsのクリエイターが語るテスト自動化の未来
川口耕介氏といえばJenkinsの産みの親として日本だけではなくシリコンバレーにおいてもアントレプレナーとして著名なエンジニアだ。CNDT 2022において川口氏が行った「Future of CI/CD: testing.next」という20分の短いセッションを紹介する。
●動画:Future of CI/CD: testing.next
川口氏は現在CloudBeesのアドバイザーとなっており、新たに創業したLaunchableの共同CEOというのが現在の肩書きである。川口氏は、ソフトウェア開発が進む中で機能の追加などのコードの変更とそのテストにかかる工数が増大していることを指摘し、機能が増えれば増えるほどビルドからテストにかかる時間が掛け算的に増えてしまうことがインテグレーションのプロセスに大きな負担となっていることを指摘した。
その上で、デベロッパーにとってはCIの中身がブラックボックス化しており、コストと時間がかかる必要悪とでも言える存在になってしまっていることから、ビルド~テストに至るプロセスに新しいイノベーションが起こっていることを紹介した。
特にテストしたい部分とテストが可能な部分のズレ、最初に組織内でテストの自動化を行う場合のハードルなどがテスト自動化を実現できない原因であることを解説。ここでも必要だとはわかってはいても始められないというジレンマに触れて、テスト自動化が難しい一面を説明している。
またビルドからテストのコストが高いという点については複数の変更がマージされ、それをすべて順列にテストを行おうとするとビルドからテストにかけて大きな計算のためのコストが発生することも指摘。時間の短縮のためには並列化や分散が必要となるが、その場合でもメモリーやCPUなどのコストは下がらないことを説明した。
そして順列にコード変更のリクエストを処理するCIではコストが高くなってしまうためにリクエストをキューとして処理し、より失敗しそうなリクエストを先に実行して処理時間を短縮する手法や、新機能とプラットフォームのマトリクスをすべてテストするのではなく効率的な組み合わせを編み出して、無駄なテストを減らす方法などについても解説を行った。
より効果的なテスト方法の例として、Googleがオープンソースで公開したBazelが採用するインクリメンタルなビルドとテストについても解説し、コードの依存関係を理解した上で不要なビルドとテストを行わない方法などを解説した。これはソースコードの依存関係を詳しく分析して変更があったコードに依存する部分だけをテストし、依存しない部分のコードは過去のテストの結果(イメージ)をキャッシュから持ってきて使うというものだ。
これによって変更部分に関連するコードだけをテストすることで処理負荷が減るが、これでは全体の結合テストのコストは変わらない。それを解決する方法としてPredictive Test Selectionという技術を解説した。これは変更されたコードの依存関係を調べて、どのテストが一番失敗しそうかを判定してからそのテストを実行するというやり方だ。これだと失敗を高い確率で当てられるので他の成功するテストを実行するコストをなくすことができる。
また失敗する確率が高いテストを優先的に実施することで、テストの結果を最も素早く出せる並べ替えにも言及している。
この方法は川口氏のLaunchableのWebサイトでも解説されている方法論であり、SaaSとして提供されるLaunchableのソリューションでも提供されている機能となる。
他にもフレーキーテスト(コードは変更されていないのに成功と失敗がランダムに起こるテスト)についても解説。ここではテスト自体を回避しつつも傾向を分析する必要性などにも触れ、テストに関する最新の状況について説明を行った。
約20分という短い時間の中でテストの最新情報を提供するというスタイルのセッションとなったが、これらの問題を機械学習で解決すると謳っているLaunchableのソリューションについても、より踏み込んだ説明が聴きたくなる内容となった。
このセッションで川口氏は最新のテストにまつわる動向だけを紹介しているが、氏が創業したLaunchableはテストを機械学習によって進化させるソリューションを提供しており、Jenkinsを始めGitHub Actions、Travis CIなどのCIツールの外部ソリューションとして連携することが可能になっている。
●参考:Launch fearlessly for engineering teams
川口氏としては最新のテストツールの動向を解説しながら、自身が創業した新しいテストソリューションに誘導したかったのだろうが、そこはエンジニアらしく抑制を効かせたといったところだろう。
開発組織におけるテストの必要性についての考察は以下のプレゼンテーションが参考になるだろう。
●参考(PDF):組織にテストを書く文化を根付かせる戦略と戦術
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- CNDT 2022、ArgoCDとGitHub Actionsの導入でリリース時間を1/4に削減した事例を紹介
- CNDT 2022、ChatworkのSREがコンテナセキュリティのための新しいツールを紹介
- CNDT 2022、サイボウズのストレージアーキテクトが企業からOSSへの貢献を継続する仕組みを解説
- CNDT 2022、NTTコムのエンジニアがマニフェストレスを実現したIaCのためのSaaSを解説
- CNDT 2022、DMMのアーキテクトが解説するSREと開発の責任境界とリソース管理の実際
- CNDT 2022、楽天のエンジニアが解説するKubernetesのマルチリージョン化
- CNDT 2022、IsovalentのアドボケイトがeBPFを解説
- CNDT 2020開幕、キーノートではサイボウス、プレイドなどのエンドユーザーがスケールするシステムの開発事例を語る
- OCIが指し示すクラウドネイティブへの道筋
- CNDT2021、NTTデータのエンジニアがコンテナの乗っ取り方とその防ぎ方を解説