« 2008年8月 | トップページ | 2008年10月 »

2008年9月

2008/09/29

アジャイル開発は構成管理ツールが必須条件だ

Trac入門 ――ソフトウェア開発・プロジェクト管理活用ガイド」を何度も読み直している。
下記のBlogも読みながら、ソフトウェア構成管理について考えたことを書く。

【元ネタ】
ケント ベック氏のアジャイル開発における開発支援ツールの役割についてのホワイトペーパー

ソフトウェア構成管理方針の策定(変更管理編)

バージョン管理とソフトウェア構成管理の関係

【1】アジャイル開発は変更管理プロセスに強い

 変更管理プロセスが弱いとトラブルが多いという話を聞いたことがある。

 ITシステムは変更に起因するインシデントによって、必ず変更が起き、それが遠因となってトラブルが起きやすい。
 例えば、OSやソフトのバージョンアップなど。

 つまり、今まで「あるべき姿」で稼動していたのに、ある時点で「おかしくなった現在の姿」へ方向が変わり、時間が経つにつれて、ギャップが生じる。
 このギャップがトラブルだ、と。

 だからと言って、ITシステムの変更を生じるインシデントを全て拒否することはできない。
 むしろ、ITはバージョンアップすることで、使いやすくしていくのが最大の特徴だから。
 そこに矛盾がある、と。

 ここで、XPはイテレーション単位にバージョンアップしていく開発スタイル。
 チケット駆動開発は、チケットをバージョン単位にグループ化して小刻みにリリースする開発スタイル。

 チケット駆動開発もXPもそうだし、アジャイル開発は変更管理プロセスに強いフレームワークなのだ。

 アジャイル開発の利点は、イテレーションのサイズを短くできれば、頻繁な仕様変更に対応できることもあげられる。
 頻繁な仕様変更に耐えうる開発体制があれば、仕様変更を受けることで顧客満足度をUpする戦略も意図的に選択できる。

 ソフトウェア開発は、変更管理プロセスが鍵だと思う。

【2】変更管理プロセスに弱いチームは、ソフトウェア開発力が弱い

 ソフトウェア開発の殆どの作業は変更管理であると言って良い。
 だが、変更管理プロセスは諸刃の剣だ。
 
 Windowsパソコンのように、ソフトウェア環境は、そのハードやOSのVerUPが頻繁にある。
 又、セキュリティパッチなど、むしろバージョンアップしなければいけない状況は多い。
 しかし、VerUpはトラブルの源になりやすい。
 
 ソフトウェア開発では、いわゆる仕様変更や障害対応で変更管理プロセスが必要になる。
 障害対応は、バグが原因だから、ソフト会社に責任がある。
 特に運用保守では、バグ修正にスピード感がないと、顧客の業務システムが止まるだけでなく、社会的責任も発生する。
 
 仕様変更は、変更要求(RFC)を元に設計して、機能を修正したり追加していく。
 そもそも、変更要求(RFC)の発生源は顧客なので、お金を取りやすい状況にある。
 
 しかし、顧客と変更要求をレビューする技術力も時間もないまま、五月雨式に開発して、テスト工程で仕様変更が発生する時が多い。
 そうなると、仕様変更は本来、顧客の要望から発生するのに、ソフト会社の技術力の低さにすりかえられてしまう。
 つまり、変更管理プロセスが弱いSIerは、ソフトウェア開発力が弱いし、ソフトウェア・ビジネスが弱いことになる。

 ここに、変更管理の難しさがあると思う。
 そもそも、要求とは、顧客と開発チームが要件や仕様で合意を得るプロセスも含んでいる。
 つまり、変更管理プロセスが弱いSIerは、ステークホルダー間で合意を得るマネジメント力が弱いのだ。

 変更管理プロセスが強いSIerは、顧客の合意が得られるように、要件を、自分たちが持つ技術力や工数、機能の優先順位の観点から分割したり、代替案を出して、顧客が選択しやすいように誘導する。
 変更管理プロセスはマネジメント要素だけでなく、技術力も必要としている。

【3】アジャイル開発は構成管理を必要とする

 ウォーターフォール型開発よりもアジャイル開発が優れているし、プログラマなら誰でもアジャイル開発したいと思っている。
 でも、実際の現場は、10年前と比べて、技術が変わっただけで、開発プロセスはそんなに変わってない。
 
 僕は、Redmineを運用してみて初めて、XPの計画ゲームはこういう意味だったのか!と気付いた。
 そして、アジャイル開発は決して、小さなウォーターフォール型開発の繰り返しではないことを知った。
 更に、アジャイル開発は広義の意味でのソフトウェア構成管理(SCM)が必須であることを肌で感じた。
 
 「ケント ベック氏のアジャイル開発における開発支援ツールの役割についてのホワイトペーパー 」では、短いサイクルのシステム開発は構成管理ツールを必要としている事実を下記のように記述している。


ツールの優先事項は、特定の作業の効率をサポートすることから、作業間の効率的な切り替えをサポートすることに移行しています。

アジャイル開発はウォーターフォール開発の縮小版ではなく、分析とテスト、設計とテスト、およびコーディングとテストの実行を結び付け、実装中に得た情報に基づいてその後の分析、設計、および実装に関する決定を迅速に下すことができるフィードバック ループを構築します。

(中略)

アジャイル開発を実現するツールの役割は、それだけにとどまりません。 以前、量的な変化が一桁分発生すると、質的な変化が 1 つ発生することを教わりました。そのため、時速 10 km の馬が時速 100 km の車に変わったことは、単に移動速度が向上しただけでなく、(最終的に) 移動に対する人々の考え方を変え、移動性が生活の中で果たす役割を変えました。

1 年に 1 回の展開が 1 か月に 1 回行われるようになり、それが 1 日 1 回になった場合、量的な変化は 100 倍になります。つまり、アジャイル ソフトウェア開発では質的な違いが生じることになります。『テスト駆動開発入門』に私が書いた 1 つの "違い" は、プログラマが自分の作業の質に責任を負う必要があることです。それには、効率良くツールをサポートし、考え方を変える必要があります。開発者が記述したテストによってもたらされる個々の透明性は、チームの透明性を向上させるために不可欠です。
アジャイル ソフトウェア開発では、チームの透明性が最も重要な要素になります。作業計画の細部が毎日変更される場合、どの作業者にも、他の作業者が行っている作業を把握する方法が必要になります。


ウォーターフォール型開発は、最後の1回しかリリースしない。
アジャイル開発は、Scrumなら4週間に1回、FDDなら2週間に1回、ベータ版を作っている最中なら1日~1週間単位で小刻みにリリースしていく。

リリース間隔が短くなるほど、従来の開発スタイルが通用しなくなり、開発プロセスの質が劇的に変わらないと対応できない。


上記では更に、構成管理ツールが、開発メンバー、開発チームの意識を大きく変えることも示唆している。

僕は、チケット駆動開発によって、開発者が積極的に行動し始める事実を知った。
実際、開発者は毎朝、管理者の指示が無くとも、Redmineのロードマップやチケット一覧を見て、自分のチケットを探して作業している。
又、システムにバグを見つけたら、自発的にバグの内容を記述してチケット登録するようになった。

だから、チケット駆動開発とプロジェクト・ファシリテーションには関連があるのではないか、と最近思っている。

「構成管理を導入すると、チーム内のコミュニケーションが活性化する」事例はいくらでも探せるように思う。

しかし、実際の多くの現場では、ソース管理していても、ビルド/リリースのプロセスに問題があって、任意のバージョンのシステムをビルドで再現できなかったりする。

本番リリース後の障害対応の作業履歴をきちんと残していないために、引継ぎ後に火を噴いたり、いつまで経ってもバグ発生が落ち着かず、システムが不安定だったりする。

アジャイル開発を実践するには、ソフトウェア構成管理のインフラが必須条件だ。


| | コメント (0) | トラックバック (0)

2008/09/23

Web2.0時代のプロジェクト管理

Trac入門 ――ソフトウェア開発・プロジェクト管理活用ガイド」を読んでインスピレーションを得たこと、下記のBlogで得たヒントを書く。

【元ネタ】

Trac入門というより、新しい時代のプロジェクト管理入門 Trac入門 ――ソフトウェア開発・プロジェクト管理活用ガイド

Web2.0時代のバグ管理ツールを作る


【1】Excelによるプロジェクト管理は、紙を使った前近代の管理とBTSを使うWeb2.0時代の管理の過渡期の手法

本番リリース後にお客から障害発生が通知されたら、その履歴をきちんと管理するために、バグ管理するだろう。

そういう管理すらないプロジェクトでは、障害の事象や、その修正状況を共有するインフラが無い。
「今問題となっている障害は、障害管理番号XXX番のことですよ!」と一言言えば済むのに、一意に降られた番号が無ければ、最初から逐一説明しないといけない。

つまり、バグ管理IDを一意に採番することで、問題事象をメンバーと共有できる。
バグ管理IDがなければ、哲学の認識論争から始まる。

だから、以前なら、Excelの別シートでバグ管理IDを手動で採番し、決められたフォーマットに書いていた。
今のBTSは、バグ管理IDの採番はチケットを新規に起票する時に自動処理してくれる。


【2】BTSを使う利点の一つは、強力なデータマイニング

BTSがExcelよりも強力なツールとなる利点は、信頼度成長曲線のようなソフトウェアメトリクスを生成できることだ。
プロジェクトリーダーは、これらのソフトウェアメトリクスをビジネスインテリジェンス(BI)、つまり、プロジェクト運営の意思決定の一手段として使いたい。

しかし、実際の運用では、ソフトウェアメトリクスは評判があまりよくない。
よくよく聞いてみると、バッドノウハウがすごく多い。

下記の記事にその理由が書かれている。

Web2.0時代のバグ管理ツールを作る(第3回)
バグ成長曲線をどこまで信じればよいのか

バグ修正の時間が経つにつれて、バグ収束曲線のような右肩下がりに寝るようなグラフに実際はなかなかならない。
突然の仕様変更やトラブル対応に追われたり、進捗が均一でないなどの理由があるだろう。

だから、テスト担当者は、バグ収束曲線の理想形に合わせるようなテストケースを作ったり、テストの順番を考慮に入れたりするらしい。
でも、これらはバッドノウハウに過ぎないと思う。
おそらく使い方が間違っているように思う。

昨今の小売系のシステムでは、データマイニング機能は普通の機能だ。
コンビニのPOS、Amazonの関連商品を表示するレコメンドエンジン、iTunesのお勧め曲の表示などの実例が示すように、データマイニングは販売の強力な機能だ。

そこからヒントは得られないだろうか?


【3】BTSを変更管理、インシデント管理、要件管理にも適用する

BTSは元々、バグ管理、つまりITILで言う問題管理が対象だった。
しかし、最近は課題管理システム(Issue Tracking System)としてBTSを運用する流れが主流になりつつある。
つまり、チケットをバグ管理票だけでなく、ソフトウェア開発の日々のタスクとして管理・運用することだ。
その筆頭がTracであり、Redmine。

最近は特に、問題管理だけでなく、変更管理もBTSで運用することが普通だろう。
変更管理は、RFC(変更要求)が発生して初めて稼動する業務フロー。
つまり、仕様変更や新しい機能の開発だ。
Redmineなら、Patch、Featureというトラッカーに相当するチケットだ。

変更管理の状態遷移図を描いてみると、問題管理のそれと殆ど同じか、全く同じだ。
だから、BTSを拡張するのは簡単。

だが、インシデント管理や要件管理は、問題管理の業務フローにはそのままでは乗せにくい。
だから、BTSを工夫する必要がある。

Redmineならどのように工夫するか?

Redmineには、プロジェクト単位でフォーラムやWikiの機能がある。
だから、顧客からの些細な要望や単純な問合せは、フォーラムでチャットのように受け取り、そこから重大と判断したインシデントはチケットにRFCとして登録するやり方がある。

あるいは、インシデント管理用のトラッカーを作り、新たな業務フローを作る。
Redmineは、ステータス・トラッカー・ロールをいくらでも追加できるので、インシデント管理特有のフローをカスタマイズしてしまえばよいだろう。

要件管理では、チケットの階層化が重要だ。
この話は八朔さんから教わった。
一つの要件管理IDから、複数の仕様に分かれて、そこから更に実装タスクが発生する。
つまりチケットの階層が3層構造になっている。

Redmineでは、チケットのリンク機能が充実している。
「関連する」「重複する」「先行する」「ブロックする」の4種類があるので、使い分ければよいと思う。

【4】難点は、今運用しているプロジェクトの業務フローをBTSへ乗せることができるか?

でも実際のプロジェクトの全ての業務をBTS上に乗せるのは難しいだろうと思う。
問題管理、変更管理は簡単に乗せれるけれど、実際のプロジェクトでは様々な雑用が発生する。
それら雑用はどんなフローで書けるのか?

結局の所、我々SIerに従事する開発者は、ソフトウェア開発の業務フロー分析ができていないだけなのだ。
お客様のビジネスの業務分析はするのに、自分たちの会社、自分たちのプロジェクトの業務フローを明確化していないだけ。

そして、我々SIerでは、同じ会社なのに、プロジェクトごとに業務フローが大きく異なることも多いだろう。
そんなレベルでは、プロジェクト管理という言葉すらも定義できていないだろう。

まずは、自分たちのソフトウェア開発の業務を分析し、フローを洗い出すことが先決なのかもしれない。


| | コメント (0) | トラックバック (0)

2008/09/14

Redmineインストールメモ

Redmineのインストールや設定に関するメモ。

【1】Passengerをインストールすると、RailsをApache単独で稼動できる。

http://redmine.jp/tech_note/apache-passenger/

gem install passenger
passenger-install-apache2-module

後は、httpd.confの設定だけすればいい。

Passengerの利点は、RailsがPerlやPHPと同じ感覚で運用できることだ。
今後のビジネスを考えると、RailsをJRubyで動かすか、Apacheで動かすか、どちらかが重要になるだろう。
要注目の技術だと思う。

【2】Wikiを使うには、下記を実行。

gem install RedCloth

 但し、活動欄に表示されるチケット内容は、Wikiのシンタックスがそのまま表示されてしまう。

【3】日本語文字化け対応

http://chocoapricot.cocolog-nifty.com/blog/2008/06/redmine_445a.html

この対応で、エクスポートしたCSVの文字化けが直った。

【4】マイカレンダーの表示を1週間→2週間に変更するパッチ

http://d.hatena.ne.jp/ywatase/20080506#p1

 ログイン直後の画面のカレンダーが2週間に広がる。

【5】Redmineで統計を表示する

http://chocoapricot.cocolog-nifty.com/blog/2008/06/redmine_75d8.html

(1) SVGを表示させるプラグインを入れる。

(2) SVGの日本語が文字化けしていたら、redmine/lib/SVG/Graph/Graph.rbを下記のように修正する。

・「font-weight: bold;」→「font-weight: normal;」
・「font-family: "Verdana", sans-serif; 」→「font-family: HGGothicM , Verdana, sans-serif; 」

 統計は、月別・開発者別のSVNリビジョン回数、SVNコミットファイル数を出力してくれる。
 statSVNの方がたくさん機能があるが、これだけでも、開発者の負荷が良く分かる。
 能力の高いプログラマは、3ヶ月という長期スパンでは、コミット回数もLOCも一番多くなる。

 開発者によると、個人成績みたいなものなのでプレッシャーがかかるらしいけれど。

【6】RedmineをJRubyで動かす

http://gihyo.jp/dev/serial/01/redmine-use/0007

 ただ今実験中。
 この運用が検証できたら、RailsをJavaで動かすのは問題なくなる。

【7】チケットとSVNコミットを関連付ける方法は2種類ある。

http://www.redmine.org/wiki/1/RedmineSettings

Redmineの設定欄にある「コミットメッセージ内でチケットの参照/修正」で「refs」と「fixes」を使い分けると、SVNコミット時にチケットのステータスと進捗率を自動更新することもできる。

実際の運用は下記になる。

7-1.チケットの仕様を実装中だが、一旦コミットしたい

修正中のステータスなので「refs」を使って
「~の理由でコミット refs 123」
と書く。

SVNリビジョンとチケットにリンクが張られるだけ。
チケットのステータスも進捗率も変わらない。

7-2.チケットの仕様を全て実装完了した

修正完了のステータスなので「fixes」を使って
「~の機能を実装 fixes 123」
と書く

SVNコミット時に、チケットの進捗=100%かつステータス=解決に変更されて紐付けられる

この運用を入れた理由は、開発者がSVNコミット時にチケットのステータスを変更し忘れることがなくなるから。

もう一つの理由は、SVNコミットログに修正ステータスも入れたいから。
そうすれば、リリース後にSVNコミットログを集計した時に、「fixes」「refs」の単語で何かしらのソフトウェアメトリクスを採取できるのではないか、と思うから。

ソフトウェア・リポジトリ・マイニングでは、SVNコミットログの精度が高いほど意味のあるメトリクスを採取できるはず。

【8】RedmineからTestlinkへリンクを張る
 但し、ver 0.7以降に限る。

http://groups.google.com/group/redmine-users-ja/browse_thread/thread/aa2bf808a682756f

この記事によって、RedmineとTestlinkの相互リンクが可能になる。
Redmineでリソース管理、Testlinkでテストケース管理(要件管理)と使い分ければ、下記のように要件からソースコードまで一貫してトレースできる。

要件(Testlink)
←→テストケース(Testlink)
←→チケット(Redmine)
←→SVNリビジョン(Subversion)

 チケットとテストケースのトレーサビリティを提供する重要な機能。

【9】Redmineに機能追加するプラグインがある。
 最も興味を惹くのは、工数表示の拡張プラグインと、継続ビルド環境の実行結果を表示するプラグインだ。

Timesheet

Simple CI

 engineプラグインのインストールに何度も失敗したが原因は、./vendor/railsのバージョンが古いこと。
 一度削除して、Rails2.0.2をインストールすると、engineプラグインが正常動作する。

 Timesheetはあくまでも検索結果の一覧表示だけ。
 欲を言えば、日別・トラッカー別・マイルストーン別に工数をSVGでグラフで表示して欲しい。
 バーンダーンチャートを表示する機能も作れるはず。
 そうすると、プロジェクト内部で発生した工数をリアルタイムに見える化できる。

 SimpleCIは、Feed先のContinuum、CruisoCotrollの実行結果を表示するだけ。
 でも、これによって、テストケースはTestlink、常時統合ビルド環境はSimpleCI、ソース管理はSubversionという風に、Redmineでアジャイル開発のインフラが全てリンクされる。
 今の僕が一番欲しかった機能で、Redmineがプロジェクトの統合管理ツールになるための重要な機能と考える。

【10】メール通知の設定は、config/environment.rb で行う。

http://redmine.jp/faq/general/mail_notification/

この設定によって、チケットのステータスが変更されるイベントで担当者へメールが飛ぶ。
この設定が意味を持つのは、メンバーの人数が多くて担当者が頻繁に変わる作業。

特にバグ修正では、設計者・開発者・テスト担当者・管理者の間で1個のチケットが渡り歩くため、メール駆動でなければ、管理者が逐一指示しなければならない。

開発者が5人以上の場合はメール駆動でなければ、プロジェクトリーダーはメンバーの指示だけで1日の仕事が終わってしまう。

つまり、少人数のチームがメール駆動でBTSを運営すれば、プロジェクトの進捗を管理するだけの管理者は不要になりうる。

【11】信頼度成長曲線を描くプラグインがある。

Redmineのプラグイン (3) ゴンペルたん

turnkのソースで、チケットを登録したり、SVGプラグインを入れたりしたけど、うまく動作しない。。
ソースをいじるしかないかな。。

とはいえ、チケット情報はDBにあるから、Accessでクロス集計すれば信頼度成長曲線は書けるはず。
更には、バーンダウンチャートも同様に作れるはず。

信頼度成長曲線から品質の歩溜りが推測できるし、SRATSに食わせれば、ソフトウェア障害のMTBFまで計算できる。

SRATS

ここでのMTBFは、次のバグが発見されるまでの時間だから、例えば3ヶ月以上になるならば、リリースしても大丈夫だろう、などのような判断ができるはず。

プロジェクトリーダーとしては、信頼度成長曲線は、システムの品質が今どれくらなのか、後どれくらいでリリース可能な品質になるのか、を探るための重要な指針になりうると考える。

【12】プロジェクトメニューにリンクを追加する方法が下記に書かれている。

http://chocoapricot.cocolog-nifty.com/blog/2008/07/redmine_1316.html

http://groups.google.com/group/redmine-users-ja/browse_thread/thread/a7c9a244ede8b1ea

メニューにガントチャートを追加することも可能。
実際の現場では、ロードマップとガントチャートでリアルタイムに進捗確認したいので、ガントチャートもプロジェクトメニューにある方が使いやすい。

【13】「RedMineのチェンジセットの検索機能でユーザIDも検索対象にする」記事が下記にある。

http://d.hatena.ne.jp/snaka72/20080717/1216268311

上記の修正で、SVNの特定ユーザのコミット履歴を見ることもできる。

実は、検索ボックスに「#チケットNo」を入力すると、直接チケットを開くことができる。
非常にうまく作られていると思う。

Redmineの実際のDBをPhpMyAdminで見ると、すごく綺麗なDB設計。
しかも、Ajaxが効果的に使われていて、ユーザビリティも良い。

例えば、マイページがドラッグ&ドロップで簡単にカスタマイズできたり、チケット一覧で右クリックするとコンテキストメニューのようにステータスや担当者などを一括更新できたりする。

実際のリポジトリを見ると活発に更新されているので、次期バージョン0.8も楽しみだ。

| | コメント (0) | トラックバック (0)

2008/09/11

Retrospectivaをインストールしてみる

Ruby on Railsで作られたBTSで最も有名なのは、おそらくRedmine
しかし、他にもRetrospectivaというBTSが存在するらしいのでインストールしてみた。

その時のインストールのログと感想をメモ。

【1】詳細は、QuickInstallを見よ。
環境は、Linux。Windowsでも同様でOK。

http://retrospectiva.googlecode.com/svn/trunk
からSVNエクスポート

database.ymlへ変更
 ここではMySQLを使う。

MySQLでDB作成

drop database retrospectiva;
CREATE DATABASE IF NOT EXISTS retrospectiva;

GRANT ALL PRIVILEGES ON retrospectiva.* TO "retrospectiva"@"localhost" IDENTIFIED BY "retrospectiva";

http://dev.rubyonrails.org/svn/rails/tags/rel_2-0-2
から/vendor/railsへSVNエクスポート

RedCloth3.0.4をインストール

rake RAILS_ENV=production db:retro:load

ruby script/server -e production
で起動する。
http://localhost:3000/
でアクセス

IDとパスワードを聞かれるので admin / passwordを入力。

【2】テーマ変更はこんな感じ。

ruby script/theme list

defaultは、黒と水色。
earth色のjoyを選んだ。
ruby script/theme install joy

【3】extensionもインストールした。

http://retrospectiva.googlecode.com/svn/extensions/1-1/
からSVNエクスポート。
但し、open_auth、http_authは外した。

下記を実行

RAILS_ENV=production ruby script/rxm install auto_locale
RAILS_ENV=production ruby script/rxm install project_drop_down
RAILS_ENV=production ruby script/rxm install remember_me
RAILS_ENV=production ruby script/rxm install scm_ticket_update
RAILS_ENV=production ruby script/rxm install timeline

再起動
ruby script/server -e production

【4】libsvn-ruby のインストール

ここによると、「libsvn-rubyをインストールしないと、Subversionとの連携ができないみたい」らしい。
実際、Retrospectivaの変更履歴タブ、ソースリポジトリタブが表示されない。

普通は、
yum install libsvn-ruby
でOK。

駄目なら、Subversionのソースを取ってきて、aprなどのユーティリティもmakeした後に下記を実行する。
詳細は、ここを参照。

./configure
make
make swig-rb
make check-swig-rb (テストを実行)
make install-swig-rb

その後、svnsync sync でミラーリポジトリを作成して、Retrospectivaの設定画面でリポジトリを指定するとOK。

【5】使った感想は、Redmineと違って、清楚なBTSのイメージ。

実際、Blog、Wiki、チケット管理、ソースリポジトリ、そして検索ぐらいの機能しかない。
Redmineの最大の特徴であるガントチャートやチケットのレポート機能は無い。
だから、Retrospectivaはプロジェクト管理機能は弱い。
ソース管理と連携したバグ管理よりも、お手軽な課題管理として使った方がいいかもしれない。

RetrospectivaはRailsアプリらしく、設定画面で順序をドラッグ&ドロップできたり、正常メッセージが半透明色などのように、ユーザビリティは良い気がする。
何となく可愛い。

Tracは確かに強力なBTSだけれども、RedmineやRetrospectivaのようにAjaxを使ったユーザビリティはイマイチな気がする。

BTSにはデフォルト色がある。
Tracは赤色。
Mantisは紫色。
Redmineは青色。
Retrospectivaは黒色又は茶色。

やっぱり青色好きとしては、Redmineが一番カッコいいBTSかな。


| | コメント (0) | トラックバック (0)

2008/09/10

BTSはソフトウェア開発の必須アイテム

BTSやTracに関する記事が最近出たのでメモ。

Trac Lightningで始めるチケット式開発「電撃」入門

ソフトウェア開発の必須アイテム,BTSを使ってみよう

今時、ソフトウェア開発でCVS/VSS/SVNのようなソース管理ツールを使わないプロジェクトはないだろう。
同様に今後は、BTS無しのソフトウェア開発はありえなくなるだろう。

CI(常時統合)ツールもBTSも、ソース管理ツールと同様にソフトウェア開発で必須アイテムなのだと思う。

| | コメント (0) | トラックバック (0)

2008/09/09

ソフトウェア構成管理に至るまでの道のり

「何故、設計書をバージョン管理するのか?」という疑問から、ソフトウェア構成管理について考え直してみる。
#あくまでもメモ書き。

【元ネタ】
■[development][trac]構成管理ツールをいかにして導入するか

■[システム開発][構成管理]構成管理ツールはどのようなタイミングで導入し、どのように活用すべきなのだろうか?

■[構成管理]Subversion + TortoiseSVN + xdocdiffでドキュメント管理

ソフトウェア構成管理


【1】バージョン管理が無かった頃

今でも多いが、WordやExcelの設計書をバージョン管理していないプロジェクトは多い。

その時の最大の問題点は、■[構成管理]Subversion + TortoiseSVN + xdocdiffでドキュメント管理 にその理由が書かれている。

ほっておくと自然増殖してくるのが、下記のような形式のドキュメント。

**設計書.xls
**設計書20080601.xls
**設計書20080713.xls
**設計書20080828.xls

かなりうっとおしい。
もっと酷いのが、次のようなケース。

**設計書.xls
**設計書(最新).xls
**設計書(最新2).xls

どれを見たらいいんだよ!!

設計書というバイナリファイルをバージョン管理していないと、上記のようにすぐにカオスになる。
今では、TortoiseSVNでExcelもWordも差分表示も可能なのだから、ソースだけでなく設計書もSVNでどんどん管理すべきだ。


【2】バージョン管理しても構成管理が無かった頃

ソースをCVSやVSSでバージョン管理しているが、BTSを使っていないプロジェクトは今も多い。

そんなプロジェクトのソース修正では、あるルールがある。
ソースのヘッダに、修正履歴を書くことだ。
つまり、「2008/5/1 ホゲ会社の何某 バグ修正した」という履歴をソースのヘッダ部に残す。
JavaDocにも、@historyというタグが残っている。

更に、ソース修正にも手順がある。
以前のバージョンのソースのロジックをコメントアウトして、修正日付と修正仕様のコメントを書いてからロジックを実装することだ。

このやり方の問題点は、ソースに修正が入るたびにガラクタのロジックが増えること。
たとえ不要なコメントであろうとも、本番稼働中のソースに、現在の問題のバグ修正に関係ないコメントを削除するのは怖い。

同様に、設計書に更新履歴のシートを作り、履歴を書き残すことは多い。
更に、設計書へ更新前の文章に取消線を入れて、追加した文章を赤字にして変更箇所を強調するやり方も多い。

これらの問題点は、無駄な変更履歴が混じって、本来の仕様が分かりにくくなることだ。

今なら、SVNとRedmineを連携させて、ソースや設計書を修正してSVNコミット時に、コミットログに修正理由とチケットNoを必ず書く。
そうすれば、チケットに変更履歴の詳細、変更理由が残り、設計書やソースに無駄なコメントを書く必要は無い。

RedmineのようなBTSは、チケットだけでなくSVNコミットログの検索も簡単。
更に、Redmineのチケットには、下記の区別があるから、色んな観点で変更履歴を観察することができる。

・問題トラッキング(バグ、機能、サポート)
・時間トラッキング(開発作業、デザイン作業、テスト作業)
・カテゴリ(システムの機能単位)
・期間(開始日、終了日)
・優先度
・予定、実績工数
・作業状態

つまり、チケット集計結果からソフトウェア・リポジトリ・マイニングを使って、チケットの変更内容のある種の傾向を探り出すことができる。
例えば、顧客の要求は、実はこういう系統の内容が多い、などのように。

【3】ソフトウェア構成管理(SCM)とは何なのか?

僕のイメージでは、ソフトウェア構成管理とは、成果物をバージョン管理できて、変更履歴を一貫して追跡できることだ。
これによって、成果物の作業状態を一貫して管理できる。

ソフトウェア構成管理をWikipediaでは下記のように定義している。

ソフトウェア開発プロジェクトをその成果物を通して制御・管理する方法論である。ソースコードや文書などの成果物の変更履歴を管理し、製品のバージョンやリビジョンに個々の成果物のどのバージョンが対応しているかを識別し、任意のバージョンの製品を再現可能とする。
(中略)
一般にソフトウェア構成管理はバージョン管理とは等価ではなく、バージョン管理を制御するマネジメント的要素が含まれる。

つまり、変更管理、リリース管理、プロセス管理、そしてプロセス改善までも管理できる機能まで含んでいる。
そして、ソフトウェア構成管理の利用対象は、開発者だけでなくプロジェクトリーダやマネージャ、リリース担当者、品質管理担当者になる。

分かりやすいイメージは下記にある。

図1 構成・変更管理ツールの仕組み

SCMの一般的な目的はWikipediaで次のように書かれている。

・構成の識別 - 修正を施すべきコードはどれか?
・構成の制御 - 製品のリリースとその修正を制御する
・状態の記録 - コンポーネントの状態を記録し報告する
・レビュー - コンポーネント間の一貫性と完全性を保証する
・ビルド管理 - ビルドのためのプロセスとツールを管理する
・プロセス管理 - 組織としての開発手法を厳守する
・環境管理 - システムの基盤となっているハードウェアおよびソフトウェアを管理する
・チームワーク - 開発に関するチーム内のやりとりを促進する
・バグトラッキング - 全ての障害について対処状況を追跡可能とし、かつコード修正と対応付ける

つまり、SCMは構成アイテム(CI)の管理だけでなく、マネジメント要素も含んでいるのが特徴。
まだ模索中だが、RedmineとSubversionで上記の機能や目的は全て実現できるはずと直感している。

【4】構成アイテム(CI)の対象とは?

構成管理DB(CMDB)に入れる物、つまり構成アイテム(CI)の対象とは一体何だろう?

最初は、バージョン付けする成果物と思っていた。
つまり、Ver1.0とタグ打ちする時、タグをつけるべき対象の成果物一式だ。
ソースコードだけでなく、納品ドキュメントも当然含まれる。

そして、「Ship It! ソフトウェアプロジェクト 成功のための達人式ガイドブック」の本から、ソフトウェア開発に必要な物全てをバージョン管理対象に入ると知った。
つまり、ビルドスクリプト、開発環境、設定ファイルなどだ。

更に、■[システム開発][構成管理]構成管理ツールはどのようなタイミングで導入し、どのように活用すべきなのだろうか? を読むと、テストデータまで含むべきだと主張している。
実際、初期のマスタデータにプログラムやシステムが依存していることはすごく多い。
つまり、ソフトウェア開発に支障があると思われる成果物は全て構成管理の対象に入るのだろう。

但し、このようにどんどん構成管理の対象を増やすと、不要になったゴミデータが増えないだろうか?という疑問はある。
おそらくその場合は、ライフサイクルの単位で管理するのだろうと思う。

【5】BTS(バグ追跡システム)+SCM(バージョン管理)の導入は構成管理の基盤を与える

以上を考えると、BTS+SCMの導入は構成管理の基盤を与えるのだと思う。

つまり、チケットはRFC(変更要求)を含む。
そのチケットに要件管理ID(変更要求)がアサインされているはず。
これによって、チケットが構成アイテムの変更のトレーサビリティ(一貫性)を保持する。

そして、それらのチケットをグループ化したものがバージョン。
バージョンとは、リリース時点の成果物のスナップショットと言える。

従って、導かれる究極のルールは「チケット無しでは構成アイテム(CI)の変更は不可」。
構成管理に置かれた成果物を変更する場合、必ずチケットに起票して、変更理由と変更履歴を必ず残す。
これによって、変更された成果物の作業の状態を一貫して追跡できる。

このおかげで、たくさんのフォルダに散在したExcelの仕様書を探す必要は無くなる。
構成管理DB(CMDB)から、要件管理IDや変更理由などから検索すればいい。

RedmineとSubversionによるチケット駆動開発をきちんと論理的に構成できれば、チケット駆動開発は構成管理の基盤を与えてくれるはずだ。


| | コメント (0) | トラックバック (0)

2008/09/02

TortoiseSVNからBTSと連携する

TortoiseSVNからコミット時、BTSのチケット番号を設定できるのを初めて知った。
すばらしい!

【元ネタ】
TortoiseSVN・プロジェクト設定

TortoiseSVN・バグ追跡システム / 課題追跡システムとの統合

TortoiseSVNとITS・BTSの連携

やり方は、TortoiseSVNからファイルの属性欄を開き、
 bugtraq:url~bugtraq:number
にBTS情報を設定する。
すると、SubversionへCI時に、チケット番号を入れるテキストボックスが現れる。
チケットNOを入力してCI後、設定したBTSへpre-commit-hookされる。


TortoiseSVNのドキュメントには、こんな文章が書かれている。

この課題追跡システムとの統合は、TortoiseSVN に限定されていません。
ですから、いずれの Subversion クライアントでも使用できます。

つまり、Eclipseでも同様の設定があるらしい。
SubversionクライアントはBTSと連携する機能が既に埋め込まれている。

SCM(ソフトウェア構成管理)とBTS(バグ追跡システム)は両方とも、プロジェクト管理のIT化に必須のツール。
SCMとBTSが結びついて初めて、システムの構成アイテム(CI)は変更理由も含めて追跡可能になり、SCMで管理されることによって構成管理システムの管理下に置ける。

BTSと自然に連携できるTortoiseSVNなどのようなSubversionクライアントは研究する価値がある。

| | コメント (0) | トラックバック (0)

2008/09/01

TortoiseSVNの差分機能は素晴らしい

TortoiseSVNの差分機能は、テキストだけでなく、WordやExcelも可能だと知って激しく感動した。
実際、WordやExcelの変更履歴機能が働いて、文字列で差分が発生した箇所は吹き出し又は赤色塗りされるようだ。
すばらしい!

更に、下記ツールを使うと、PowerPointやpdfの差分も見れるようだ。

xdocdiff

おかげで、SubversionでWordやExcelをバージョン管理することも苦痛にならなくなった。
むしろ、ソースと同様に仕様書も、積極的にバージョン管理できる。
しかも、RedmineやTracなどのBTSと連携すれば、SVNリビジョンとチケットを紐づけできるから、ソース修正と同じ方法で、仕様書そのものも修正理由を追跡できる。

ソースだけでなく、仕様書も、ビルドスクリプトも、ライブラリも、開発環境も全て、Subversionに入れてバージョン管理すれば、BTSと組み合わせて構成管理の環境が整う。
つまり、システム開発で必要な構成アイテム(CI)は全て追跡可能になる。

それらをバージョン管理しているSubversionは、ITILで言う構成管理DB(CMDB)そのものだ。

| | コメント (0) | トラックバック (0)

« 2008年8月 | トップページ | 2008年10月 »