継続的統合を成功させるための6ステップ
ソフトウェア開発の初期コストと保守コストのグラフの良い記事があったのでメモ。
Miros?aw Jedynak - professional .NET blog: 6 steps to successful Continuous Integration
(引用)それぞれの方法について,初期コストと維持コストの対比が提示されているところが印象的。感覚的だけど,このグラフは同意できる。
6つの観点の比較だが、経験的に非常に共感する。
この記事の主張は、「統合ビルドは重要!」の一言。
1. Use source code repository
(引用)「SCM使えって当たり前だろ」と思いつつも,未だにOSのファイル共有だけってのもあるからなぁ。現実は小説より奇なりダ。
これは鉄板。SCM使う発想がない時点で,そのプロジェクトは終わってる。
非常に同感。
開発の現場は、教科書よりも奇なり。
SCMを嫌がる現場は、バイナリファイルをいじっている所が多い。
Excelで仕様書を書いているとか、PhotoshopやIllustratorでお絵描きしているとか。
結局、テキストで管理できないと、SCMの意味がない。
2. Introduce check-in policy
Redmineを使うようになって、コミットログにチケットNOを付ける運用ルールにしている。
これができないと、RedmineとSubversionを連携する意味がない。
駄目なプロジェクトは、SCMに関する作業品質が雑なこと。
単なるプログラミングだけでなく、コミットログも重要なのだ。
3. Automate build
自動ビルドできない開発では、サーバー上でビルドするのではなく、ローカルマシン上でビルドする時が多い。
だから、他の人がビルドできない。
結局、結合テスト以降のバグ修正をテスト環境へ反映して検証するのに非常に時間がかかる。
4. Create auto-deployable test environment
Mavenのような高機能なビルドツールを使っているかどうかだと思う。
Mavenでは、一度ビルドしたjarライブラリは、ビルドサーバーに保存してくれる。
単にビルドすればよいだけではなく、テスト環境ごとにライブラリが違う場合や、複数の依存ライブラリのバージョン管理する場合、に必要になる。
大規模プロジェクトやパッケージ製品開発では、必須だろう。
5. Use code quality analysis
(引用)品質検査ねぇ。いやいやツールそのものを批判する気はないが,運用がまずくてうまく回ってないケースをよく見るんで,あまり乗り気じゃない。
正直,FindBugsやCheckStyleなどのインスペクションはプログラマ個々人がたしなみとしてやるべきだと思ってる。なんでプロジェクト全体のサマリ出しても自分がやるって意識が薄くなるんじゃないかなぁって。
これも非常に同感。
品質検査が単なる手続きになってしまい、品質Upにつながらないプロジェクトが非常に多い。
本当は、ソフトウェアメトリックスを採取して、2次開発以降の継続的な開発でソフトウェア工学の知識を使えるようにすることがしたい。
6. Use unit test
(引用)うまく行ったときは効果絶大なんだけど,度重なる仕様変更などでテスト資産が不良債権化しないように維持するのが大変なので,バランス取りがとっても難しい。
これもまた,ある程度のマメさがないと良いテストコードを組んでもらえない。
これも非常に同感。
UnitTestが重要な認識は、プロジェクトリーダーだけでなくプログラマも共有している。
しかし、2次開発以降の継続的開発が進むと、テスト資産そのものもプログラムだから2倍以上のコストがかかるように感じる。
UnitTestの威力を運用保守で感じる時は、2つある。
一つは、ソースのマージ作業。
もう一つは、サーバーやDBなどの環境周りがバージョンUpした時。
前者は、作業ブランチからTrunkへマージした時、UnitTestで問題なければ、最低限の品質と検証は立証されたことになる。
但し、UnitTestのプログラムのマージ作業もあるので、作業量も2倍に増える感覚だが。
後者は、Oracleに不具合があったのでVerUpしたとか、Tomcatの性能が遅いのでVerUpしたとか、JDKそのものをVerUPした場合。
例えば、Oracleでは、10g以前の古いバージョンでは、256日以上稼動したままだとハングアップするというバグがあったらしい。
サーバー環境やDB環境を変更することは殆どないが、2次開発以降の継続開発では、環境周りをVerUPする時もある。
この時に、UnitTestで問題なければ、少なくとも本番稼動できるお墨付きの一つになる。
果たして、あなたのプロジェクトは、6ステップのうちどれだけ実践しているだろうか?
| 固定リンク
「プロジェクトマネジメント」カテゴリの記事
- 「スクラムの拡張による組織づくり」のScrum@Scaleの感想(2024.03.31)
- ストラテジストとプロジェクトマネージャの役割の違いは何なのかpart2~プロセスのレイヤと達成目標のレイヤが異なる(2023.02.18)
- ストラテジストとプロジェクトマネージャの役割の違いは何なのかpart1~CSFはWBSみたいなものと捉える(2023.02.14)
- PM理論では課業志向の方が関係志向よりも生産性が高いことを主張しているのではないか(2023.01.22)
- 現代日本人の弱点はリーダーシップ不足と生産性が著しく低いこと、そしてリスク許容度が著しく低いことだ(2022.12.23)
「Redmine」カテゴリの記事
- 「RedmineのUbuntu+Docker構築への移行」の感想 #redmineT(2024.11.24)
- 第27回redmine.tokyo勉強会の感想 #redmineT(2024.11.10)
- Redmineのバージョン設定でプロジェクトの設定方法が違う(2024.06.23)
- ウクライナのRedmine開発者が作ったRedmineテーマやプラグイン(2024.06.18)
- 第26回redmine.tokyo勉強会の感想~多様性はコミュニティが成功する重要な要因の一つ #redmineT(2024.06.15)
「構成管理・Git」カテゴリの記事
- 「GitLabに学ぶ 世界最先端のリモート組織のつくりかた」の感想(2023.12.10)
- パッケージ設計の原則の意義は変化しているのか(2023.09.30)
- 小説活動にプルリクエスト駆動が必要になってきた(2022.05.08)
- 【資料公開】チケット駆動開発の解説~タスク管理からプロセス改善へ #redmine(2022.01.14)
- プログラミングしてる時はでっかいピタゴラ装置を作ってるみたいな感じ(2022.01.09)
コメント