« 2010年7月 | トップページ | 2010年9月 »

2010年8月

2010/08/29

BABOKはアジャイル開発に使えるか

BABOKとアジャイル開発に関する記事があったのでメモ。

【元ネタ】
BABOKはアジャイル開発に使えるか - 記者の眼:ITpro

Agile BABOK Extensionというドキュメントが届いた - たこはちの「へのかっぱ」日記

BABOKは、要件定義以前のシステム化計画で使う知識体系と認識している。
だから、要件定義やビジネス分析もBOABOKでは一つの知識エリアに過ぎない。

PMBOKがプロジェクトマネジメントの知識体系として優れているように、BOBOKも業務分析、システム化立案の知識体系として今後普及する可能性はある。
ERP導入によるBPR、SCMの改善、CRMの運用などでBABOKを使えるだろうと思う。
丁度、萩本さんが提唱されている要求開発も、BOBOKが目指す所と同じように見える。

僕も実際の開発で、システム化立案や要件定義では、アジャイル開発がうまく使えない経験をしていて、色々試行錯誤している。
BABOKのような発想もいるのかもしれない。

アジャイル開発と要件管理: プログラマの思索

課題管理のチケット駆動開発: プログラマの思索

上記の記事で面白いと思ったのは、BOBOKの課題として「基本的な考え方がウォーターフォール型になっていること」と識者が認識していること。
つまり、RUPが反復型開発でアーキテクチャで作り込むように、BABOKもシステム化立案や業務分析を反復型で分析したいのだろう。
その時の問題は、イテレーションで反復している間、スコープをどのように決めて、誰がどんな役割でアウトプットを出していくのか、をはっきりさせることにあるだろう。
単なる反復では、手戻りが多すぎて、成果物の品質が悪くなることは初期のAgile開発の頃から言われていた指摘だからだ。

アジャイラーとアーキテクトの緊張関係: プログラマの思索

アジャイル開発とソフトウェアアーキテクチャの緊張関係: プログラマの思索

現代のAgile開発が抱える課題: プログラマの思索

多分、「アジャイル開発の本質とスケールアップ 変化に強い大規模開発を成功させる14のベストプラクティス (IT Architects’ Archive)」にあるアーキテクチャ助走路という概念が、反復に対するひとつの示唆を与えているだろうと直感している。

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

2010/08/28

Moodle日本語版をWindowsで動作するにはfs_moodle

白井達也さんからMoodle日本語版をWindowsで動作するにはfs_moodleが良い、というコメントをもらったので、リンクしておく。
Windows上では、素のMoodleでは、カレンダーだけでなく添付ファイル名やフォルダ名も文字化けしてしまうらしい。

【元ネタ】
Moodleインストールメモ: プログラマの思索

オープンソースのeラーニングシステム fs_moodleの詳細情報 : Vector ソフトを探す!

OpenAiMech: fs_moodleトップ

OpenAiMech: fs_moodleで何ができるようになるのか

Moodleをfs化することで以下の機能が実装されます.
1.UTF-8に対応していないファイルシステム(例:日本語Windows)でもフォルダ名/ファイル名に日本語が使える.
2.強制的にS-JISでzip書庫を作成することができる(LinuxやMaxOSでもfs_moodle化するメリット)
3.旧→新ファイルシステム文字コードへの移行支援

個人的には、日本の教育システムは世界の動向に大きく遅れているような気がしている。
IT化がうまく現場とマッチしていない気がする。

IT化は単にシステム化すればいいわけではない。
手作業の業務をシステム化する場合もあれば、逆に手作業でフォローした方がいい業務もある。
実際のシステム導入では、システム化の範囲を決めることが重要。

Moodleの利点は、Moodleが教育現場の情報を一括管理してくれることにあると思う。
授業の告知、テストの採点、復習のための情報のリンク、生徒のためのの掲示板など、授業に関する各種の情報の中継基地になる。
つまり、Redmineがソフトウェア開発の情報基地となるように、Moodleも教育現場の情報が見える化されるだけでなく、集まった情報を分析することによって、教育プロセスを改善できるはず。

Moodleについては今後もトレースしていきたい。

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

RUPから見たアジャイル開発のアーキテクチャ助走路

実践UML」などオブジェクト志向分析に関して優れた本を書かれている依田さんが、アーキテクチャ助走路に関する記事を書いていたのでメモ。

【元ネタ】
変貌するアジャイル開発: 「アジャイル開発の本質とスケールアップ」が届いた

※注意:現在は上記リンクはエラーになる。Googleキャッシュでは読める。

(前略)
 アジャイル開発と言えばその主要な特徴として、反復型・進化型の開発スタイルがある。一定の時間間隔に区切って、その中で、少しずつ機能を拡大・強化していくという考え方だ。
 玉川さんのお話が、私にとって納得のいく話だった理由として、私自身が、この10年間、システム開発を支援する仕事ではほとんど常に、この反復型で進化型の開発手法を取り入れてきたということがある。それらのシステムはすべて中規模以上のものであったし、また、システムのオーナーである私のクライアントは、その恩恵にあずかることができた。そのため、アジャイル開発を大型のシステム開発に適用するという考え方は私にとって全く違和感がない。
 10年も前からそんなことができたのには、一つラッキーな理由がある。それは、私が、1998年にApplying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative Development (邦題:実践UML 第3版 オブジェクト指向分析設計と反復型開発入門)第1版の翻訳に関わることができたからだ。
 この本には、オブジェクト指向分析設計のことだけではなく、 UP(Unified Process:統一プロセス)をベースとする反復型、進化型の進め方がサンプルプロジェクトとともに懇切丁寧に説明されている。そのため、翻訳者の一人として、熟読せざるを得なかった私には、しっかりと反復型・進化型の進め方がインプットされた。
 では、10年間、私は自分がアジャイル開発をやっているという自覚があったかというと、そんなことはなかった。
なぜなら、アジャイル開発の何たるかを調べれば、ほとんど必ず、XPやスクラムなど、具体的なプロセスにおける開発現場のプラクティスが説明されている。しかし、私の関わったプロジェクトにおいて私はほとんど必ず発注者側・ユーザー側の立場にいたため、現場でTDD(テスト駆動開発)やペアプログラミングが行われたかどうか、私は知らないのだ。もちろん、私のクライアントであったユーザー企業も、開発を委託した企業の中で何が行われていたか詳細には知らなかっただろう。しかし、私は、クライアントに対し、反復型・進化型の進め方を推奨し、すでに述べたようにクライアントは、確実に、その恩恵にあずかることができたのだ。この恩恵の部分に関しては、また別のブログに書いてみたい。
 そんなわけで私は、反復型・進化型の有効性に対して確たる自信を持ちながら、それをアジャイル開発として説明してはこなかった。自分の経験について「アジャイル」という言葉を使って良いのか、自信がなかったのだ。
そんな中でイベントに参加したのだが、今回は講演の他にも、スクラムのワークショップを経験することができた。アジャイルの一番アジャイルらしい部分に参加することもできて、私にとってかなりお得であった。
 結局、私は、「必ずしもアジャイルらしいプラクティスを含まない、反復型・進化型を主要な特性とするプロジェクトの進め方、そして、アジャイルらしい現場のプラクティス、また、これらがブレンドされたアプローチ、すべてアジャイルと言って良い」という合意があることを理解することができた。スケールアップの話から、ワークショップまで、一つのイベントに包含されていたから、この理解を得ることができた。もし、これらを別々の機会に聞き、また経験していたら、私は以前として自分の経験をアジャイル開発として語ることにためらいを感じていたと思う。マイクロソフトさんと関係者の皆さんに感謝である。
(後略)

アジャイル開発ではアーキテクチャの作り込みに弱点があるという指摘は従来から言われ続けてきた。
ある程度までシステムを作った後に、アーキテクチャそのものを大きく変えたり、後戻りするのは大変というリスクがあるからだ。
特に大規模開発になるほど、後工程でのアーキテクチャの変更は、プロジェクトの命運を文字通り傾けてしまう。

しかし、実際の開発ではアーキテクチャも成長していく。
最初から正しい設計ができるわけではなく、試行錯誤しながらアーキテクチャも変わっていく。
反復型開発という発想で、アーキテクチャの作り込みとその修正をアジャイル開発の中に入れ込むことができる。

余談だが、依田さんが翻訳された「実践UML」は、数々のOOAの著書の中でも一級品に当たると思う。
僕は2002年頃、第1版を無性に読みまくっていたが、2010年現在でも第3版まで販売され続けている。
実践UML」は700頁まで膨れ上がった分厚い本になってしまったが、OOAをマスターしたい人はまず読んでみたらいいと思う。

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

2010/08/27

データモデルパターンのリンク

DOAに関する記事をリンクしておく。

【記事一覧】
日揮情報ソフトウェア>岩田研究所>データモデルパターン

データモデルパターン - Xupper技術サポート部のページ

技術トピックス| 開発現場ですぐに通用する“今どきの”モデリングテクニック(3/5) | ウルシステムズ株式会社 | UL Systems, Inc.

技術トピックス| 開発現場ですぐに通用する“今どきの”モデリングテクニック(4/5) | ウルシステムズ株式会社 | UL Systems, Inc.

関連クラスの展開 - 俎上の鯉

日揮情報ソフトウェア>岩田研究所>データモデルパターンには、「Data Model Patterns: Conventions of Thought」に書かれたデータモデルパターンを解説してくれているのでありがたい。
データモデルパターンはDOAのパターン集であり、OOAの言うドメイン分析・ドメインモデルに相当する。
業務SEがデータモデルパターンを身に付けておけば、実際の設計で役立つだろう。

2005年に上記の記事を見つけた時(データモデルパターン: プログラマの思索)、その奥深さが分かっていなかった。
今頃になってようやく、その奥深さや重要性が分かるようになってきた。

個人的には、Data Model Resource bookの3冊は読破したい。

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

実践ソフトウェアアーキテクチャの解説記事

古いけど「実践ソフトウェアアーキテクチャ」の解説記事があったのでメモ。

【記事一覧】
ソフトウェアアーキテクチャを決定するのは品質特性 [memo]

ソフトウェアアーキテクチャ その1 - ソフトウェアの現状 [arch]

Peace Pipe: ソフトウェアアーキテクチャ その2 - 「ソフトウェアアーキテクチャ」とは [arch]

ソフトウェアアーキテクチャ その3 - 表現方法のコンセプト [arch]

ソフトウェアアーキテクチャ 番外編 - 本質的な検討を行う為に [arch]

ソフトウェアアーキテクチャ その4 - アーキテクチャ決定要因と品質特性 [arch]

ソフトウェアアーキテクチャ その5 - 品質特性の実現手法 [arch]

ソフトウェアアーキテクチャ その6 - パターンとその解釈方法 [arch]

Peace Pipe: ソフトウェアアーキテクチャ その7 - パターンの実際 [arch]

ソフトウェアアーキテクチャ その8 - フライトシミュレーションケーススタディ [arch]

Peace Pipe: ソフトウェアアーキテクチャ その9 - アーキテクチャ設計の実際 [arch]

Peace Pipe: ソフトウェアアーキテクチャ その10 - プロダクトラインでのパターン選択ケースタディ [arch]

Peace Pipe: ソフトウェアアーキテクチャ その11 - 健全なドキュメントを書く7つのルール [arch]

Peace Pipe: ソフトウェアアーキテクチャ その12 - ドキュメントを書く上での6つのテクニック [arch]

実践ソフトウェアアーキテクチャ」は「アーキテクトのバイブルとされる本.SWEBOK (Software Engineering Body of Knowledge) でも推奨書籍とされている.」と書かれているだけあって、過去に何度も読んで、Blogにも感想を書いた。

ソフトウェアプロダクトラインが組込み企業の技術力を左右する: プログラマの思索

そのボタンを押したら何が起きるのですか?~アーキテクチャは利害関係者のコミュニケーション手段: プログラマの思索

しかし、「実践ソフトウェアアーキテクチャ」は確かに良い本だが、この本を読んだからと言って、すぐに設計力が上がるわけではないので注意。

但し、「実践ソフトウェアアーキテクチャ」には、良いアーキテクチャがソフトウェア開発に何をもたらすのか、ヒントは書かれている。
最終的には、ソフトウェアプロダクトラインにつながる。


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

2010/08/26

グーグルが構築した大規模システムの現実、そしてデザインパターン

Googleによる大規模Webシステムのスケールアップの技術に関する記事があったのでメモ。

【元ネタ】
グーグルが構築した大規模システムの現実、そしてデザインパターン(1)~MapReduce編 - Publickey

グーグルが構築した大規模システムの現実、そしてデザインパターン(2)~BigTable編 - Publickey

グーグルが構築した大規模システムの現実、そしてデザインパターン(3)~教訓編 - Publickey

グーグルが構築した大規模システムの現実、そしてデザインパターン(4)~デザインパターン編 - Publickey

SaaSを実現する場合、ハードウェア(特にサーバー)のスケールアップ技術は必須。
多分そこには、たくさんのノウハウが必要。

アムダールの法則」にあるように、CPUをたくさんつなげたとしても、性能は向上しない。
マルチコアCPUが今流行しているが、理論上は制約がある。

Googleの技術で特徴的なことは、「信頼性はソフトウェアによって実現される」こと。
MapReduce、BigTableなどのように、並列処理に向くソフトウェアを大規模システムで使うこと。
そうすれば、ハードウェアの性能をフルに使える。

Erlangや関数型言語が静かに流行しているのも、並列処理に強い特徴があるからだろう。

日本でも、はてなやMixiでも大規模Webシステム構築のノウハウがあるはず。
色々調べてみたい。

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

2010/08/25

マイクロソフトのAgileの事例

マイクロソフトのAgileの事例の記事を見つけたのでメモ。

【元ネタ】
マイクロソフトにおけるアジャイル開発はこんな風に進められている - Publickey

Visual Studio 2005では当初の予定24ヶ月を大きくオーバーして39ヶ月もかかったらしい。
そこで、Visual Studio 2008の開発プロセスを根本的に変えたとのこと。

Redmineによるチケット駆動開発の経験から類推すると、下記のように置き換えられると思う。

フィーチャー単位の開発は、ユーザストーリー単位の開発と同じ。
進捗はタスクの達成率ではなく達成したユーザーストーリーの規模で測定するのは、ストーリーポイントと似ている。

「「クオリティゲート」を通過したもの以外、アクティブなブランチに統合してはならない」とは、メインラインモデルによる構成管理。
Yellow/Red Gameは、チケットの取捨選択。
進捗のためのチェックポイントはマイルストーンでもあり、リリース判定の場でもある。

面白いと思ったのは、一つは、組織がマトリックスモデルであること。
フィーチャーとロールによるマトリクス型組織。
多分、プロジェクトマネージャーの方がラインマネージャーよりも強いだろうから、プロジェクトを運営しやすく、柔軟に人員を配置しやすく、変化に強いはず。
普通の会社では、マトリクス型組織と言っても、事業部の権限が強く、プロジェクトマネージャーは与えられた範囲内でやり繰りするしかない。

もう一つは、柔軟なビュー。
これは、チケット集計機能を意味する。
バグダッシュボードは、日別のバグ発生数のグラフのようだ。
これを見れば、システムの品質が良いか誰でも分かる。

IBMやMSの商用のプロジェクト管理ツールは、集計や分析の機能が強いので、色んな観点でプロジェクトの現状を追跡できるのが強み。
できれば、Redmineもプラグインでチケット集計機能を強化して欲しい。
そうすれば、プロジェクトが自然に見える化するし、現場リーダーの意思決定が楽になる。

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

2010/08/23

Redmineのワークフローを視覚化

Redmineのワークフローを視覚化するプラグインが公開されていたのでメモ。

【元ネタ】
[Redmine] ワークフローの視覚化: ソフトウェアさかば

GoogleChart の GraphViz Charts で Redmine のワークフローを視覚化してみた - すえひろがりっっっっ!

Redmine のワークフロー視覚化をプラグイン化してみた。 - すえひろがりっっっっ!

ワークフローを視覚化する意味は、システム開発の業務フローを状態遷移図で表現することと同値。
状態遷移図を一目見てすぐに分かるレベルならば、実際の開発もスムーズだろう。
逆にたくさんステータスがあると、実際の開発はとても複雑で、おそらく現場と乖離している。

夢想するのは、各チームのワークフローを集めてみたい。
ワークフローにソフトウェア開発の作業の流れが凝縮されているから。

| | コメント (0)

2010/08/22

アーキテクチャ助走路

アジャイル開発の本質とスケールアップ」で「アーキテクチャ助走路」というプラクティスがあったので考えたことをメモ。
#ラフなメモ書き。

【1】「システムアーキテクチャ構築の原理 ITアーキテクトが持つべき3つの思考 (IT Architects’Archive ソフトウェア開発の実践)」にもあるように、アジャイラーとアーキテクトの間には緊張関係がある。
小規模リリースとアーキテクチャの作り込みは、多分組み合わせが良くない。

アジャイラーとアーキテクトの緊張関係: プログラマの思索

アジャイル開発とソフトウェアアーキテクチャの緊張関係: プログラマの思索

WF、XP、RUPではアーキテクチャの考え方が違う。
WFでは、アーキテクチャは計画される。
XPでは、アーキテクチャは出現する。
RUPでは、アーキテクチャは成長する。

XPでは、「アジャイル開発の本質とスケールアップ」によると、最初のイテレーションでアーキテクチャスパイクという特別なイテレーションを導入する。
最初のイテレーションで、ベースとなるアーキテクチャを用意して、次イテレーションから少しずつ機能追加しながら、システムを拡張していく戦略をとる。
元々、XPは小規模なソフトウェア開発を対象にしていたので、このやり方でもうまくいったのだと思う。

又、最近は、RailsやSeasarのように優れたフレームワークがあるので、最初からアーキテクチャをスクラッチ開発する必要がない現状も味方していたのだろう。

しかし、大規模プロジェクトになると、たとえOSSのフレームワークがあったとしても、全てのサブシステムを考慮してあらかじめ設計しておく必要がある。
そうしなければ、不安定な基盤の上に家を建てるようなもので、リファクタリングばかりしても、品質もどんどん劣化していくだろう。

RUPはアーキテクチャ重視と名乗るだけあって、反復的にアーキテクチャを作り込むプロセスがある。
特に推敲フェーズでは、アーキテクチャの作り込みがやりやすいように思う。

RedmineやTestLinkなどでチケット駆動開発を実践して経験したことは、アーキテクチャや品質の作り込みを行うイテレーションを別途設けた方がいい、と気づいたことだ。
実際、小規模リリースだけでシステムを実現できるわけではない。
やはり、機能拡張せずに、特定の目的だけのために、イテレーションを使う時もある。
特に、結合テスト、システムテスト、負荷テストなど各種の観点でテストして、システムの品質を向上させていく時はそうだ。

漸進型開発と反復型開発を意図的に切り替える戦略がアジャイル開発にも必要。
その戦略を「アーキテクチャ助走路」という概念が含んでいると思う。

【2】「アジャイル開発の本質とスケールアップ」では、アーキテクチャ助走路とは、最初から数回のイテレーションをアーキテクチャの作り込みに使うこと。
例えば、最初の3回ぐらいまではアーキテクチャチームとプロトタイピングチームが連携して、システムの基板となるアーキテクチャを作りテストする。
そして、4回目以降は、各コンポーネントチームがサブシステムを並行して開発していく。

アーキテクチャ助走路の利点は、大規模システムのアーキテクチャを作るイテレーションを別途設けていること。
この方法によって、後のイテレーションで各コンポーネントチームは小規模リリースに専念できる。
アーキテクチャが後で大きく変化することがないように、あらかじめ準備しておくからだ。
つまり、アーキテクチャ助走路によって、大規模なリファクタリングなしに、後から機能を追加できるインフラを用意しておくのだ。

アジャイル開発の本質とスケールアップ」では、アーキテクチャ助走路によって「意図的にアーキテクチャを作り出す」と言っている。
つまり、XPのような初期のアジャイル開発で課題となっていた「アーキテクチャを重視してない」件は、少なくともクリアされているように見える。

しかし、実際の開発では、後になってアーキテクチャを大きくリファクタリングせざるを得ない場合もある。
アジャイル開発の本質とスケールアップ」では、アーキテクチャ助走路の延長と呼んで、3つの方法が書かれている。

一つ目は、プロダクトバックログにアーキテクチャのリファクタリング作業を入れること。
つまり、アーキテクチャの変更作業も、1個のタスクに落としこむことを意味している。
実際、ちょっとしたAPIの変更で解決できるレベルならば、他のユーザストーリーと並べて、バックログの観点から優先順位をつければいい。
普通はリファクタリング作業は開発速度(Velocity)を落とすから、ユーザストーリーの実現に必要な場合に一緒に作業する時が多いだろう。

二つ目は、一つのチームが1イテレーションでデザインスパイクを担当すること。
アジャイル開発の本質とスケールアップ」によると、デザインスパイクとは、設計に関する問題、アーキテクチャの拡張、新技術のインパクトを解決する、あるいは、現在のアーキテクチャが持つ重大な問題を調査するための活動を意味している。
つまり、デザインスパイクとは、アーキテクチャの改善や拡張のための1イテレーションの作業を意味している。

実際の大規模開発では、アプリ共通チームやインフラチームのように、全開発チームのインフラを保守するチームが、定期的にデザインスパイクを実施する時が多いだろう。
そうでなければ、開発チームは自らアーキテクチャをいじって、更に自分たちのユーザストーリーを開発していかなくてはいけないので、アーキテクチャが劣化するリスクがあるし、開発チームの負荷も高くなるからだ。

三つ目は、全てのチームが1イテレーションでデザイン反復に従事すること。
つまり、全ての開発チームが新規開発を中断して、アーキテクチャの拡張とその影響範囲の修正に従事すること。

実際の大規模開発では、アーキテクチャの修正が全チームに大きく影響を与える場合もある。
そんな時に、アーキテクチャチームだけでなく、全チームがアーキテクチャの修正の影響を考慮して、修正に従事するイテレーションを別途設ける。
デザイン反復の利点は、全てのチームがアーキテクチャに目を向けるため、技術的決断をチーム自身が行うというアジャイル精神に合致すること。
逆に欠点は、デザイン反復は顧客価値をほとんど提供しないので、全体の開発速度が停滞してしまうことだ。何故なら、リファクタリング作業やアーキテクチャの作り込みのため、ユーザストーリーの実現を一つも行わないからだ。

上記3点の解決方法を考慮すれば、アーキテクチャ助走路を有効活用できるだろう。

アジャイル開発の本質とスケールアップ」を読み込んでいくと、大規模アジャイル開発に必要なプラクティスがよく練られているなあ、という感想を持っている。
初期のアジャイル開発でよく言われた課題を解決するプラクティスをうまくまとめてくれている。

そして、「アジャイル開発の本質とスケールアップ」が上手だと思う点は、プラクティスのネーミングが上手なこと。
アジャイルリリーストレイン、スクラムオブスクラム、アーキテクチャ助走路などのように、プラクティスの名前を連呼するだけで、背景にある解決方法や問題意識も共有できる。

Agile2.0や大規模アジャイル開発を実践するうえで、「アジャイル開発の本質とスケールアップ」はもっと読まれていいと思う。

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

2010/08/21

WindowsのキラーアプリExcel

チケット駆動開発におけるExcelの役割についてメモ。
#あくまでもメモ書き。

受託開発では顧客の業務のうちExcelで手運用している業務をIT化、Web化することで狙い撃ちにしているのに、自分たちのSW開発ではExcelが幅を利かせている。
つまり、SW開発の業務そのもののIT化は遅れているのが現状だろう。

なぜ、Excelによるプロジェクト管理は良くないのか?
その理由は下記で書いた。

Excelのプロジェクト管理は何故良くないのか: プログラマの思索

一言で言えば、ExcelのドキュメントはSVN・Mercurialなどでバージョン管理すべきか、RedmineのチケットやTestLinkのテストケースなどで代用できるか、使い分けることが肝心。

では、チケット駆動開発は何をもたらしているのか?
その理由は下記で書いた。

Excelのプロジェクト管理から脱却せよ~SW構成管理を見直そう: プログラマの思索

つまり、頻繁にリリースできる開発インフラを開発者へ提供することによって、無駄な管理工数を極限まで削減して、本来のソフトウェア開発プロセスそのものの品質を高めることだ。
頻繁にリリースできるインフラがなければ、アジャイル開発は絵に描いたもちに過ぎない。

では、Excelの本来の役割は何か?
Excelはエンドユーザコンピューティング(End User Computing)のためのWindowsクライアントとして使うべき。
つまり、プロジェクトマネージャや顧客が自分のPCで、自分が欲しいと思う情報へ自分で加工すること。
その元ネタをITシステムが提供すべきであり、全ての顧客の要求をITシステムが実現する必要はないこと。

エンドユーザコンピューティングとは【EUC】 - 意味/解説/説明/定義 : IT用語辞典

例えば、Redmineのチケット管理で進捗管理をしていたら、毎晩、今日のチケットの進捗をCSV出力して、Excelマクロで加工して、上司に進捗報告書を送る。
CSV出力してMS Projectへインポートして、PMBOKのEVMでコストを計算してもいい。
又は、MS Projectでガントチャートを書き直してもいい。

あるいは、結合テストのバグ管理をRedmineで行っていたら、毎晩、今日のバグのチケットをCSV出力して、バグ累積数やバグ消化数をカウントして、信頼度成長曲線(バグ収束曲線)をExcelマクロで生成する。
SRATSというExcelマクロを使えば、ソフトウェアのMTBFも計算可能だ。

SRATSの使い方: プログラマの思索

あるいは、TestLinkでテスト実績を管理していたら、毎晩、今日のテスト実績をCSV出力して、TestLinkCnvMacroでテストの予定と実績の進捗報告を作ったり、曜日別・時間帯別・テスト実行日別のテストケース消化数をグラフで出力すればいい。

Redmineで進捗報告を作ったり、TestLinkでテスト仕様書を作ったりするのは、会社のフォーマットに合致していなかったりする。
だから、元ネタとなるCSVやXMLを出力しておいて、マネージャや顧客がExcelに取り込んで自分たちの好きなように整形した方がいい。

個人的に欲しいExcelマクロは下記の通り。
誰か作ってくれないだろうか?

【Redmine】
1・Excelで作ったWBSをRedmineのチケットへ新規インポート
 →Redmine CSV Import Pluginで一応、対応可能。
 
Redmine CSV Import Pluginの使い方: プログラマの思索

2・RedmineのチケットをExcelで出力して、Excel上で修正して、チケットに上書きインポート
 →Redmine CSV Import Pluginで一応、対応可能。

3・Redmineのバージョン単位にチケットの予定と実績を比較した進捗報告書をExcelで生成
 →実現されていない。

【TestLink】
4・Excelのテスト仕様書で作ったテストケースをTestLinkへ一括インポート
 →TestLinkCnvMacroでは、Ver1.7.xもVer1.8.xも可能。

TestLinkのテストケースを一括変換するマクロ: プログラマの思索

5・TestLinkのテストケースを出力して、Excel上で一括修正して、TestLinkのテストケースを上書きインポート
 →TestLinkCnvMacroでは、Ver1.7.xはOKだが、Ver1.8.xはNG。

6・TestLinkのテスト実績を出力して、Excelへコンバート
 →TestLinkCnvMacroでは、Ver1.7.xはOKだが、Ver1.8.xはNG。

7・Excelのテスト仕様書と要件定義書とそれらの紐付けを作り、TestLinkの要件として一括インポート
 →TestLinkCnvMacroでは、Ver1.7.xはOKだが、Ver1.8.xはNG。

8・TestLinkのテスト実績の管理から、要件カバレッジをExcelでグラフ出力する
 →TestLinkCnvMacroでは、Ver1.7.xはOKだが、Ver1.8.xはNG。

9・TestLinkの要件で仕様変更が発生したとき、要件の影響箇所をリンクで一覧表示する(サスペンドリンク)
 →実現されていない。

10・TestLinkからテスト消化曲線、Redmineからバグ収束曲線の元ネタとなるCSVを出力して、Excelでテスト消化曲線とバグ収束曲線をグラフ化する
 →実現されていない。イメージは下記の記事。

テスト消化曲線とバグ発生曲線のパターン診断: プログラマの思索

RedmineとTestLinkという優れたプロジェクト・テスト管理ツールに予定と実績データは一括管理されているので、直接SQLを実行してもいいし、CSV出力してもいい。
そして、その元ネタとなるCSVから、Excelで色んな観点でプロジェクトの進捗や品質を考察してみたいのだ。

| | コメント (0)

Blogを電子書籍化して公開する方法

ココログはMovableTypeなので、MovableType出力テキストから電子書籍(epub)へ変換するRubyスクリプトを自作してみた。
MT形式からePubファイルを作ってみた:少しでもパラノイアになってみる:ITmedia オルタナティブ・ブログにあるPythonスクリプトを見ながら、Rubyスクリプトで作ったが、結構手間がかかった。

【元ネタ】
日本語Epubブックサンプル - 横浜工文社

電子書籍 ePub電子書籍の作り方2 シンプル ePUB フォーマット ガイド :How to create an ePub ebook? Simple ePUB Format Guide

OPF 2.0 v1.0 日本語訳 [Open Packaging Format (OPF) 2.0 v1.0]

Epub Format Construction Guide - HXA7241 - 2007

.epub eBooks Tutorial

calibre - Download calibre

Stanza: a Revolution in Reading | Lexcycle

Stanzaへの本の同期 Slash×Slash

Blog→電子書籍への変換イメージはこんな感じ。

MovableTypeのテキストを用意する

記事の単位にパースして、XHTML化する(自動生成)

設定ファイルや目次ファイルも自動生成する

epubへ圧縮(自動生成)

電子書籍リーダーCalibreでepubを追加して、ビューで確認

CalibreでローカルPCのHTTPサーバーを起動して、iPod touchのStanzaにコピー

iPod touchのStanzaで読む

Stanzaは横文字しかなく、画像表示もイマイチ。
でも、暇な時に自分のBlogを読み返すことができるのは嬉しい。

作ったepubが本来の形式に合致しているか、チェックするツールEpubCheckもある。

「Calibre」で生成したEPUBを「Adobe Digital Editions」でチェックする - builder by ZDNet Japan

「EpubCheck 1.0.5」 EPUBファイルが規格に準拠しているか検証するユーティリティ - builder by ZDNet Japan

MOONGIFT : ePubファイルの内容を解析「EpubCheck」 オープンソース・ソフトウェア/フリーウェアを毎日紹介

作ったepubをチェックしてみたら、たくさんのerrorやwarningが出てきた。
このツールを使って、自作したepubを公開してよいかどうかのチェックに使ってもいいだろう。

あと、面白いと思ったのは、作ったepubをWebで公開できるWebツールBookworm。
オライリーがフリーで公開しているらしい。

MOONGIFT : Web上でePubファイルを閲覧する「Bookworm」 オープンソース・ソフトウェア/フリーウェアを毎日紹介

自作したepubをWebで公開できるようにすれば、iPhone/iPad/Kindleを持っている人ならいつでも書籍をダウンロードして読書できる。

オライリーは電子書籍を結構頑張っているみたい。
iPhoneならオライリー本の電子書籍を600円で買えるので、iPadへ変換するツールを使えば、重たくてかさばる本をiPadやノートPCで読むことができる。

オライリー本をiPad(ePub形式)で読む:少しでもパラノイアになってみる:ITmedia オルタナティブ・ブログ

404 Blog Not Found:perl - O'ReillyのiPhoneアプリ本からepubをぶっこぬく

たった600円でオライリー本をiPadやKindleで読む。すてき。 - このブログは証明できない。

電子書籍は、テキストやWebコンテンツがあれば、誰でも簡単に作ることは可能。
書籍はWeb以上にコンテンツの質が高いので、書籍をたくさんの人に読んでもらえれば、たくさんの人達に自分の思想や考えを伝えることができる。

電子書籍はWeb以上に大きな威力を持っていると思う。

【追記】
自作スクリプトでBlogの記事「RedMineでチケット駆動開発!: プログラマの思索」を電子書籍にしてみた。
下記からダウンロード可能。
#著作権は特に記載していませんが、Creative Commons Atributionライセンスとします。

ダウンロード redmine.epub (4.6K)

僕が作った電子書籍はテキストだけで、CSSも画像もリンクもないけれど、ソファに横たわって、iPhoneやiPod touchでBlogの記事を読み返せるのは楽だ。
しかも、目次もついていてリンクできるので、日記を読む感覚で読み直せる。

但し、上述のepubcheckでチェックすると、下記の警告メッセージが出る。
StanzaやCalibreで読むのには問題ない。

>epubcheck-1.0.5.jar redmine.epub
Epubcheck Version 1.0.5

ERROR: redmine.epub: extra field length for first filename must be 0, but was 15
0
ERROR: redmine.epub/OEBPS/2008-04-16-0032.xhtml(4): attribute "lang" not allowed
at this point; ignored

Check finished with warnings or errors!

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

2010/08/19

なぜロードマップが重要なのか

Redmineで一番重要な機能はロードマップ。
ロードマップや変更履歴を上手に運用するのが大事。

このチケットはいつリリースするの?
リリース計画はどうなっているの?
イテレーションの進捗はどうなっている?

ロードマップを見れば一目で分かる。

ロードマップを見ながら、次のリリースまでに工数が足りるか、リリース漏れのチケットはないか、次の次のバージョンは何をリリースするのか、のチェックに使える。

ソフトウェア開発では「いつリリースするのか?」が一番大事。
納期によって、開発規模も開発工数も品質も大きく変わる。

今の時代、納期・コスト・スコープの三角形の中で納期の比重が高まっている。
だからこそ、Agile開発のように頻繁にリリースできる開発プロセスが注目されるのだ。

ウォーターフォール型開発のように、長期間開発して一発ドカーンとリリースすると必ず失敗する。
頻繁にリリースして、品質も使い勝手も洗練させていくのがソフトウェア開発の王道。

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

2010/08/17

Blogを電子書籍作成プラットフォームにする

WordPressのepub出力プラグインがあるとの記事を見つけたのでメモ。
epub出力プラグインがあれば、Blogを電子書籍作成プラットフォームにできる可能性がある。

【元ネタ】
Wordpress -- Download ePub プラグイン | Karak

WordPress 3.0でePub等を出力する「Anthologize」 - The blog of H.Fujimoto

WordPressを電子書籍に変換するプラグイン「Anthologize」 | Web活メモ帳

Anthologize - Word Pressを書籍作成プラットフォームにする - 取引費用ゼロの歴史 ~ アーカイヴズと歴史研究のトリセツ

WordPressは、MovableTypeだから、ココログ以外にも、たいていのBlogのフォーマットに対応している。
普通のBlogをWordPressへインポートすればすぐに公開可能。
下記インストーラーを使えば、Windows/Linux上でワンクリックでWordPressをインストールできる。

BitNami :: WordPress

上記のプラグインが意味しているのは、Blogというコンテンツがあれば、それはいつでも電子書籍作成サーバーになる可能性があることだ。
BlogをWebで見るだけでなく、電子書籍(epub)としてダウンロードできるリンクがあれば、BlogをiPadやiPhoneなどの電子書籍リーダーで本のように読むことができる。

電子書籍がビジネスに与える影響はとても大きいと思っている。
その理由は、コンテンツを作成する能力さえあれば、誰でも簡単に販売できるインフラがあるので、簡単に収益を上げることができるからだ。

個人が印税35%の電子書籍を出版できる時代 - Amazon Kindleの衝撃:in the looop:ITmedia オルタナティブ・ブログ

電子書籍リーダが変える産業構造。消える産業、産まれる産業:ASSIOMA:ITmedia オルタナティブ・ブログ

だが、電子書籍の収益はさほど大きくないだろう。
むしろ、電子書籍がその値段よりも価値があるのは、著者の思想や生き様が書籍に濃縮されているからだ。

コンサルタントという職種の人達が本をよく書くのは、自分が書いた本を広めることで自分のビジネスをやりやすくしているから。
例えば、電子書籍が名刺代わりになる可能性がある。

ビジネスパーソンの出版戦略:大木豊成さんインタビュー(その2)「実名ブログを書くと、出版する力がつけられる」:永井孝尚のMM21:ITmedia オルタナティブ・ブログ

書籍が人に与える影響が大きいのは、書籍に著者の思想の質の高さが反映されているから。
歴史を辿ってみれば、過去の人物の凄さは残された書籍でしか知りうることはできない。
書籍とWebでは、その中に含まれている知識の質は歴然とした差がある。

電子書籍の本質とそのビジネスモデルについては今後もトレースしてみたい。

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

2010/08/15

実践的データモデリング入門の感想

DOAの体系的方法を知るために「実践的データモデリング入門 (DB magazine selection)」を読んでいる。
IDEF1の説明から、ビジネスロジックからER図への落し込み、データモデルパターン、データモデルの物理的配置の方法まで、全ての情報を網羅しているので読みやすい。
実践的データモデリング入門 (DB magazine selection)」を解説しているHPがあったのでメモ。

以下は、「実践的データモデリング入門」から僕が理解できた内容を抜き出している。
詳細は「実践的データモデリング入門」を参照してください。

【元ネタ】
履歴モデル

サブタイプ構造の明確化

サブタイプ分割されたエンティティから関連付けるエンティティ

取引モデル

関連が隠蔽されているモデル

同一主キーでの別エンティティ化の基準

代理キーによる複合キーの抑制

【1】「実践的データモデリング入門 (DB magazine selection)」で興味を惹いたのは、データモデルパターンで説明されている履歴パターン。
よくある問題は、注文履歴に残った商品マスタの情報が変わった時、注文履歴にある商品の情報をどのように管理すべきか、という問題。
例えば、販売期間を過ぎても売れないので、商品の価格を下げた場合、商品マスタの価格と注文履歴に残った価格に不一致が起きる。
あるいは、売り切れて今後販売しない商品をマスタから削除する場合、注文履歴の商品情報が取得できなくなる症状も同じ。

解決方法としては、2種類ある。
一つは、トランザクション(イベント)のテーブルにマスタ(エンティティ)の情報を転記して、履歴に残す方法。
他方は、マスタ(エンティティ)自身に適用年月日などを追加して履歴を管理する方法。

前者は、注文明細データを生成するときに商品マスタの情報を挿入する方法を取る。
いわゆる転写、複写に相当する。
この方法の長所は、注文明細の検索では、注文明細テーブル一つで良いこと。
テーブルに画面の検索条件に対応するカラムへインデックスを貼れば、スケーラビリティを確保しやすい。

逆に弱点は、注文明細テーブルの正規化が崩れること。
商品マスタの情報と整合性が取れなくなるので、注文明細にある商品情報にもっと他の業務要件がある場合は、注意しないくてはいけない。

後者は、商品マスタに適用開始・終了年月日を主キーに持たせて、商品マスタ自身で履歴を管理する方法。
この方法の長所は、複雑な業務ロジックが絡んでいたり、仕様変更が多いエンティティで柔軟な修正が可能なこと。
つまり、この方法は、エンティティに履歴を意味する日付を追加するので、エンティティからイベントへ変わることを意味する。
だから、普通は、商品基本属性テーブルと商品履歴テーブルのように、更に商品固有のエンティティと履歴に関するイベントのテーブルへ分割する場合が多いだろう。

逆に弱点は、エンティティが複合主キーになるし、テーブルも複雑になるので、SQLやアプリケーションロジックが複雑になりやすいこと。
商品の価格が販売期間で頻繁に変わったり、商品の基本情報が頻繁に変わりやすい場合に応用する場合が多いだろう。

普通は、注文明細を後で利用する業務がないならば、前者の方法で十分だろうと思う。

【2】他によくある問題は、テーブルに区分・フラグ・ステータスなどのカラムがたくさんあるテーブルをどのようにモデリングすべきか、という問題。
区分というカラムが存在すれば、アプリケーションでは必ず分岐が発生して、そこが仕様漏れやバグの温床になる。
駄目なモデラーほど、一つのエンティティで全ての業務ロジックを表現しようとして、区分というカラムがどんどん増える時が多い。

例えば、注文内容というテーブルがあった場合、実際の業務では、請求も絡んだり、出荷や売上計上も絡んだりしたとする。
その場合、注文内容テーブル一つで表現しようとすると、一つのデータがどの業務に対応するかという区分を持たせることになる。
しかし、業務が変われば区分を頻繁に更新する必要があるから、排他制御やデッドロックなども考慮しなくてはいけない。
つまり、無駄なアーキテクチャを考慮する必要も出てくる。

だから、業務が発生するタイミングや場所の観点で、別エンティティとして作った方がいい。
データモデルでは、動的な状態の表現が難しいからだ。

この問題のように、トランザクション系テーブルは、業務単位に別エンティティにした方がいい場合が多い。

【3】複合キーがどんどん肥大化する問題もある。
実際のデータモデリングでは、ユニークなコードに、適用年月日や区分を主キーとして追加する場合が多い。
すると、複合キーが4個、5個と増える時が多くなり、データモデルを読み解くのが難しくなる。
また、そのまま実装すると、インデックスのサイズが増える弱点もある。

そんな場合は、代理キー(サロゲートキー)を使うとよい。
つまり、複合キーは全て外部キーとして、ユニークなシーケンスを主キーにして集約しまえばいい。
この方法は、Railsが得意とするやり方で、最近のWebシステム開発では主流のデータモデリングの手法になったと言えるだろう。

代理キーの長所は、RESTと相性がよいことだ。
複合キーの場合、一つのデータにアクセスする場合、リクエストへ送るパラメータを追加することになり、URLが長く醜くなる。
しかし、代理キーならば、1個のパラメータでアクセスできるから、URLをRESTで分かりやすく表現できる。

Railsのように、複合主キーを廃止して、アプリケーションで複合主キーのロジックを実装するやり方の方が最近のWebシステム開発の主流だろうと思う。

【4】関連が明示されていないけれど、実際の業務用件を聞くと、データモデルに関連が必要であるという問題もある。
これは、エンティティ間の関連に外部キーが明示されていないという問題になる。

駄目なモデラーは、テーブルの親子関係ばかり作って、外部キーを上手に使っていない場合が多い。
外部キーはビジネスロジックと直結しているので、明示しておかないとデータを辿れない。

この問題に関係する概念として、渡辺幸三さんの本「業務別データベース設計のためのデータモデリング入門」が説明している「継承属性」がある。
継承属性とは、多重度1の関連エンティティの属性項目を表す。

例えば、注文ヘッダにある得意先コードは、注文明細にも引き継がれるということ。
実際には、注文明細には得意先コードのカラムは存在しないけれど、親テーブルの注文ヘッダから得意先コードを引き継ぐので、一つの注文データとして見れば、得意先コードが外部キーとして存在することになる。

実際のデータモデリングでは、外部キーが継承属性になっているケースが多いので、継承属性に気をつけないと、一つのデータから業務ロジックを辿る場合に見落としてしまう時があるので注意。

【5】仕様変更によってエンティティの種類を増やしたい場合、どのようにデータモデルを作ればよいか、という問題もある。
例えば、書店の業務に商品エンティティは元々、書籍しかなかったけれど、DVDやゲームソフトを販売する業務が増えた場合が相当する。

この問題に対してはオブジェクト指向のポリモルフィズムのように、テーブルの継承を使うとよいだろう。
つまり、商品基本属性という親テーブルに、書籍、DVD、ゲームソフトという子テーブルが継承関係にあるデータモデルを作ればいい。
データモデルの継承関係の実装は、子テーブルに商品コードを外部キーとして持たせて、親子関係を1対0 or 1の関係に持たせればいい。

ポリモルフィズムの最大の利点は、サブエンティティの追加の影響が少なくなることにある。
データモデルでもオブジェクト指向と同様の発想でモデリングすればいい。

【6】エンティティの役割が大きく変わる問題もある。
例えば、書店は取次店(卸問屋)を経由して書籍を仕入れていたが、出版社から直接仕入れる業務が追加されることになったとする。
すると、書店と取次店、出版社の間の関係が大きく変わり、実際は取次店がなくなるというデータモデルになる。
既に従来のモデルで動いているのに、エンティティの役割が変わってしまう場合は、既存のデータモデルでは実現しにくい。

実践的データモデリング入門 (DB magazine selection)」では、この問題に対してロールエンティティを使うことを勧めている。
つまり、出版社が取次店の役割も担うと考えて、「出版・取次ロール」という別テーブルを作って、既存のデータモデルへの影響を少なくさせる方法。

この方法は、アナリシスパターンにおける知識・操作レベルという手法に似ている。
つまり、知識レベルという一つ上のメタレベルで、エンティティのビジネスロジックを表現しようとするやり方。
ここでは、ロールエンティティが知識レベルに相当する。

ロールモデルという考え方は、データモデリングだけでなく、OOAの概念モデリングでもよく出てくる。
ロールモデルという考え方は、最終的には「型(Type)」という概念へ辿りつくと思う。

実践的データモデリング入門 (DB magazine selection)」には他にも色んなパターンが具体的に説明されているので分かりやすい。
最近のWebシステム開発はRailsやSeasarのように、DOAでER図がしっかり設計されていれば、ビジネスロジックの実装は以前よりも楽に開発可能になっている。
RailsやSeasarを仕事にしている人は、DOAを見直してもいいのではないかと思う。

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

2010/08/14

電子書籍の作り方part4

電子書籍を作る方法が他にもあったのでメモ。

【元ネタ】
ePub電子書籍形式(ePubフォーマット)への変換出力/PC上での電子ブックリーダー ...... - AdhocBlog

「EPUBReader 1.2.6.1」 EPUB電子書籍を閲覧できるFirefoxアドオン - builder by ZDNet Japan

電子書籍の衝撃の感想:少しでもパラノイアになってみる:ITmedia オルタナティブ・ブログ

オライリー本をiPad(ePub形式)で読む:少しでもパラノイアになってみる:ITmedia オルタナティブ・ブログ

iPadレビュー~もう少し軽ければな~:少しでもパラノイアになってみる:ITmedia オルタナティブ・ブログ

OpenOfficeのWriter文書をEPUB文書へ変換する拡張機能「writer2epub」

EPUBで遊ぶ! ? Blog Archive ? Calibreを使って文書をEPUBにしてみる

同人誌をePub化する作業メモ(メタデータ編)

ePub版「戦略プロフェッショナルの心得」を自作してみたよ!:平凡でもフルーツでもなく、、、:ITmedia オルタナティブ・ブログ

MT形式からePubファイルを作ってみた:少しでもパラノイアになってみる:ITmedia オルタナティブ・ブログ

MovableTypeからEPUBとKindle向け電子書籍を書き出す方法まもなく発表 - EPUB FUTURE .COM

WordPress 3.0でePub等を出力する「Anthologize」 - The blog of H.Fujimoto

ブログを電子書籍形式(ePub)変換できるプラグイン | Branberyheag Lab

FireFoxアドオンのEPUBReaderは、epub形式を参照するだけだが、ブラウザさえあればPCで読めるのは素敵。

電子書籍を作る専用アプリとして、StanzaやSigliを使ってみたけれど、Calibreが一番UIが使い易い。
しかも、RSSフィードからepubへ落とす機能もあるから、その気になれば、毎晩寝る前にiPad/iPhoneへepubを同期をとれば、通勤電車などで閲覧できる。

他にも、Blog(Movable type)をepubへ変換するWordPressのプラグインもあるみたい。

後、興味を惹いたのは、RubyのGemにgepubというEPUB生成のライブラリがあること。
epubは所詮、XHTMLとCSSをzip化しただけだから、Rubyのような軽量言語でサクサク書いて、元ネタをepubへ変換するソースを書いた方が早い。
Twitterの場合、APIが公開されているので、自分のつぶやきを取得して電子書籍化するプログラムを書いてしまえばいい。

TwitterのFavoriteをEPUBにする - yoshi's blog

買い物ログ別館: gepub アーカイブ

テキストや画像という元ネタがあれば、電子書籍を簡単に作ることができる。
電子書籍の可能性には今後もトレースしてみる。

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

2010/08/13

Mantisの使い方

RedmineやTracよりもおそらくBTSで最も使われていると思われるMantisについて、ロードマップの設定方法がようやく分かったのでメモ。

【元ネタ】
バグ管理システム「Mantis」 - SourceForge.JP Magazine : オープンソースの話題満載

Roadmap [MantisBT]

ロードマップの使い方 - こげつきません

akky’s log ? Blog Archive ? mantisのroadmapを試してみたよ

Mantisでロードマップを使うには、下記の設定を行う。

1・プロジェクト設定画面のバージョンの編集で「リリース」のチェックを外す
 →チェックを付けると、そのバージョンはリリースされたので、ロードマップに表示されなくなる。

2・チケット(詳細)の登録画面で「修正予定バージョン」にバージョンを設定する。
 →リリース予定のバージョン(Target version)になる。

上記の設定によって、チケットがバージョン単位にグループ化できるので、Mantisを使って小規模リリースを運用しやすくなり、アジャイル開発を実践できる。

更に、Mantisの変更履歴を使うには、下記の設定を行う。

3・ロードマップ設定後、プロジェクト設定画面のバージョンの編集で、リリースのチェックを付ける。
 →チェックを付けると、そのバージョンはリリースされたので、変更履歴に移る。

4・チケット(詳細)の登録画面で「修正済みバージョン」にバージョンを設定する。
 →リリース済みのバージョン(Target version)になる。

5・完了チケットの「解決状況」が「実装済」のみ、変更履歴に掲載される。
 完了チケットでも解決状況が「修正不要」ならば、変更履歴に掲載されない。

Mantisは、RedmineやTracよりもはるかに障害管理ツールの色彩が強い。
MantisのチケットはExcelの障害報告票をそのままWeb化したようなフォーマットだし、そのワークフローも障害管理のワークフローそのものになっている。
Mantisの一番の特徴は、チケットの検索結果一覧で、ステータスごとに色分けしてくれるので、一目でチケットの作業状態が分かること。

又、MantisはPHP+MySQLで動くので、インストールも簡単。
ソフトウェア開発のBTSを選ぶ時、RedmineやTracの運用が難しければ、Mantisから入った方が楽ではなかろうか?

そして、Mantisのチケットを単なる障害管理だけでなく、課題管理や要望の管理まで拡張すれば、BTSだけでなく、ITSとしても運用できる。
つまり、Issue TrackingとしてもMantisは使える。

MantisはRedmineやTracと比較して、Wikiが無かったり、SVNなどのSCMとチケットを連携する機能がデフォルトでなかったりするが、チケット管理そのものの機能は同等だ。
Redmineを使ってみて、ロードマップ機能の重要性が十分に分かったので、Mantisでも同様に使えると、威力を発揮するはず。

RedmineやTracでなくとも、Mantisでもチケット駆動開発は運用可能だし、アジャイル開発の運用も楽になるはずだ。

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

2010/08/12

Redmineと連携するテスト管理ツールのリンク

Redmine本家のWikiに、Redmineと連携するテスト管理ツールのリンクがあったのでメモ。

【元ネタ】
Redmine - ThirdPartyTools - Test Case Management

Open Source Test Management Software - The definitive guide

Requirements Driven Test Management | Articles

いずれのテスト管理ツールも商用ツールらしい。
テストケースに失敗した時にBTSとしてRedmineとリンクする機能があるみたい。
TestLinkのリンクが無いのが残念だけど。

商用のテスト管理ツールは、要件管理も機能として含んでいる場合が多い。
テストの元ネタが要件だからだ。
テストケースと要件を紐づけることによって、要求のトレーサビリティを実現できるし、その品質も上がる。

日本の品質管理技術は確かに優れているかもしれないけれど、ソフトウェア開発の作業をソフトウェアでサポートする、あるいは、自動化するという発想がないのだろうか?
結局、日本のIT現場では、Excelのガントチャートや要件一覧表、課題一覧表、テスト仕様書などが幅を効かせて、いつもデスマーチに陥らせている。

機能仕様書は、Excelで作ったとしても構成管理の配下に置けばいい。
しかし、構成管理で履歴を取る必要がないガントチャートや要件一覧表、課題一覧表、テスト仕様書は全て、それらを支援するツール上で実現すべきだと思う。
それら全ては、予定と実績の比較、要件からテストケースまでの依存関係などの機能が必須だから、Excelだけで実現しようとすると、Excelで一つのシステムを作ろうとしているようなものだ。

要求管理やテスト管理は、高尚な理論だけでなく、現場に根付かせる何らかの手法がそろそろ必要なように思う。

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

ソフトウェア開発をサポートするツールの重要性

JaSST2010東京(ソフトウェアテストシンポジウム)で、「実践アジャイルテスト」を書かれたIBMの人が講演した資料が公開されていたのでメモ。

【元ネタ】
JaSSTソフトウェアテストシンポジウム-JaSST'10 Tokyo

要求管理から改修・テストまで、アプリケーションライフサイクルから考える. プロジェクトのあり方(PDF)

上記の講演資料では、ソフトウェア開発における三つの課題をあげて、その解決方法について論じている。
その課題とは、トレーサビリティの確保、テストの自動化、開発作業の効率化だ。

トレーサビリティの確保は要求管理、テストの自動化は品質管理、開発作業の効率化は構成管理や変更管理の強化につながる。
OSSツールは特に要求管理のツールが無いので、厳しい。
テストの自動化や構成管理、変更管理は、HudsonやGit/Mercurial、Trac/Redmineなどでカバーできると思う。

IBMが販売するツールをメインにしているので、ちょっと鵜呑みにできないけれど、興味を惹いたのは、プロジェクトが大規模化、分散化するほど、ツールの重要性が高まるという指摘。

小規模なチームの場合、一つの部屋に全員が集まって対面を意識して開発すればいい。
しかし、10人以上のチームになると、2個以上のサブチームに分かれるため、サブチームの情報を収集して集計する管理工数が別途必要になる。
50人以上のチームになれば、管理工数だけでなく、サブチームからあげられた進捗などの情報を元に、整合性をとりながら集計していかなければならない。
大規模なチームほど、管理工数やその他の作業工数の比率が高まり、現場からトップまでの報告の時間が長くなり、その分、決断も遅れる。

上記の資料では、大規模チームでは、管理作業やその他の作業に全体の10~20%の工数がとられると言う。
つまり、本来の開発作業と無関係の工数の比率が高まり、その分、コストも増えるだけでなく、プロジェクト内部の無駄なコミュニケーションロスが増える。

ツールが必要なのは、開発能力を高めて本来の開発作業の生産性を上げるだけでなく、管理工数やその他の作業を減らすことにある。
言われてみれば当たり前なのだが、大規模プロジェクトほど身動きが難しい。
その理由の一つは、ツールが高価で複雑であること、そして、ツールにメンバーが慣れるコストがかかることだろう。
だが、OSSのプロジェクト管理支援ツールを駆使すれば、それらの問題は解決できると思っている。

そのツールの中でも、一番欲しいのは要求管理のツール。
テスト管理はTestLink、進捗管理はRedmine、ビルド管理やリリース管理はHudson、構成管理はGitやMercurialなどを使ってみて、それらのツールの特徴や有用性はだいたい経験できた。
しかし、要求管理については、まだ未知の分野。
上記の資料にあるように、要件や仕様のトレーサビリティをツールでサポートしたら、どれだけ有用なのか、実験してみたいのだ。

IBMの要求管理ツールで面白い機能は、トレーサビリティで関係付けられた要求に変更が入った場合、追跡可能性を示すサスペンドリンクが表示されて、影響を受ける他の要求の一覧が表示されること。
つまり、要求の依存関係をトレースできることを意味している。

これができれば、仕様変更や機能追加が突然発生しても、上流工程で設計漏れを防ぐことができるし、精度の高い工数見積もりが可能になる。

ソフトウェア開発の作業を支援するツールそのものの開発は、まだ発展途上。
まだまだ実験して研究する余地が沢山ある。

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

2010/08/11

データパターンの組み合わせからテストケースを自動生成するツール

データパターンの組み合わせからテストケースを自動生成するツールAssistAllpairが使い易かったのでメモ。
ラフなメモ書き。

【元ネタ】
デシジョン・テーブルを活用する

AssistAllpairの詳細情報 : Vector ソフトを探す!

つれづれなる技術屋日記: 「AssistAllpair」がPICT生成も対応

組み合わせテストをオールペア法でスピーディに!:第2回 PICTの基本的な使い方|gihyo.jp … 技術評論社

テストケースの作り方: プログラマの思索

PICTで出力したテストケースをTestLinkへ取り込む: プログラマの思索

テストケースを作る場合、システムの状態遷移を元にテストケースを作る時が多い。
モデルを書けば、大抵、システムの状態遷移図も書いている。
状態遷移図は状態遷移表と同値だから、デシジョンテーブルへ落とし込める。

又、データパターンに基づいてランダムにテストしたい時もある。
データパターンが多いほど、テストケースは指数関数的に増えていく。
表形式でパターンが羅列している場合、テストケースを自動生成できれば、テスト設計に専念できる。

更に、システムテスト(又は総合テスト)では、下記のように、業務日付の単位でデータを投入&更新しながら、長期間実施して、本番運用に近い業務でテストすること。

投信振替システム 接続・総合テスト概要

■総合テスト

金融システムのシステムテストでは、本番運用に近いデータを長期間かけて作り込むので、それらのデータをモルモットデータと読んでいた。
実際、テストデータを本番運用に近い業務で育てていく感覚。

その時にやりたいのは、システムテスト(又は総合テスト)と呼ばれるテスト工程で、テストケース作成のコストを下げたい。
そしてそのテストケースをTestLinkにインポートして、テスト管理できるようにしたい。
PICTで出力したテストケースをTestLinkへ取り込む: プログラマの思索で、デシジョンテーブルさえできればTestLinkCnvMacroで簡単にTestLinkへ取り込めると分かっているから、テストケースをできるだけ自動生成したいのだ。

MSがフリーで公開してる組み合わせテスト自動生成ツールPICTをベースに、ExcelをWindowsクライアントAssistAllpairがある。
AssistAllpairはExcelマクロで公開されていて、右クリックで生成できてとても便利。
因子水準をGUIで取得できるみたいで、機能も色々あるみたい。

AssistAllpair+PICTで色々試してみたい。

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

2010/08/08

IPAが公開した形式手法の調査報告書

IPAが形式手法の調査報告書を公開していたのでメモ。

【元ネタ】
「形式手法適用調査」報告書~情報処理推進機構:ソフトウェアエンジニアリング

形式手法は理論としては古いけれども、実際の開発でどこまで使えるのか、正直分からない。
でも、日本ではFelicaの開発で成功した事例がある。
海外では、フランスの地下鉄や、航空宇宙、軍需産業、医療機器などで事例があるらしい。

形式手法が密かなブームになっている理由は、高信頼性を要求される組込ソフトウェアの開発で形式手法を使って、設計の早い段階で品質を担保したいからだろう。
並列性、排他制御、フェールセーフなどの非機能要件を設計段階で、抽象的な仕様でシミュレーションしてバグ出ししたいのだろう。

つまり、日本のIT業界を主導するIPAとしては、製造業を補完する組込ソフトウェア開発の生産性Upや信頼性Upに形式手法を取り入れたいのだろうと思う。

IPAが公開する調査報告書は、詳細に書かれていて、最近のIT技術の動向を知る上で非常に参考になる。
ウォッチしていると良いかもしれない。

Rails検証報告書: プログラマの思索

IPAが書いたアジャイル開発の研究会報告書: プログラマの思索

IPAが公開したRubyやRails教育プログラム: プログラマの思索

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

アジャイラーとアーキテクトの緊張関係

アジャイラーとアーキテクトの緊張関係を示唆する記事をリンクしておく。

【元ネタ】
@IT:ITアーキテクト宣言!

OOエンジニアの輪! ~ 第 27 回 榊原 彰さんの巻 ~

職業としてのソフトウェアアーキテクト (Software Architecture Series)」という本では、建築学をヒントにアーキテクトについて書いているらしい。
但し、絶版なので手に入れて読めないので、ネット上で調べてみた。
下記のBlogに、痛烈な批判が書かれている。

アーキテクトはユーザとエンジニアの間にいる -- INOCCU
※注意:ずっと保守モードで読めない。Googleのキャッシュで読むことは可能。

(前略)
世の中でアーキテクトという仕事について様々な説明が為されているが、2006年当時に感じた違和感と同じものを、また感じている。
その違和感というのは、アーキテクトが技術の親分であるというようなことであったり、フレームワーク(ここでは、非機能要件や共通仕様をまとめたモジュール群という意味で。)を作るのが仕事というような理解のされ方だ。
私の考えるアーキテクトは、ユーザと技術の間に立つ人である。だから、技術の親分などではない。ずっと技術の仕事をしていたいから、アーキテクトになるというのは違うと思う。そういう人は、ITスペシャリストの道があるではないか、と。
一方で、フレームワークを作るのは、私もアーキテクトの仕事のひとつだと思う。ただ、それがすべてではないし、フレームワークを作る人がイコール・アーキテクトになるかというと、それもまた違うのではないか。
職業としてのソフトウェアアーキテクト (Software Architecture Series)」では、建築とのアナロジーを用いて、ローマ時代の建築家であるウィトルウィウスの論を引いている。
* ユーティリタス(ニーズ)
* ベヌスタス(デザイン)
* ファーミタス(構造)
ウィトルウィウスは、建築をこの3つの要素からなる正三角形として捉えている。そして、同書ではユーティリタスをクライアントやコンサルタントが、ベヌスタスをアーキテクトが、ファーミタスをエンジニアが担当すると説明している。つまり、アーキテクトは、クライアントが持つニーズを理解し、システムの全体性をデザインすることに責任を持つとしている。そして、具体的な構造はエンジニアが担当するのである。
これを言葉のとおりに受け取れば、アーキテクトはエンジニアではないということになる。このことを理解するには、特にアーキテクトは技術の親分だと思っている人には、大いなるパラダイムシフトが必要になるのではないだろうか。
とはいえ、私は技術の重要性を軽んじるつもりは毛頭ない。ただ、アーキテクトに関する一部の論評が、あまりに技術に傾倒しすぎ、ユーザとの間にいる立場であることを無視しているのではないかと思うのだ。
(後略)

アーキテクトという役割は一体何なのか?
僕個人の経験では、アーキテクトと一体化しているコンサルやプロマネは、ユーザと開発者の橋渡しを期待されている。
しかし、「職業としてのソフトウェアアーキテクト (Software Architecture Series)」という本によれば、アーキテクトは設計だけを担当していて、ユーザとやり取りして要求を仕様へ落とし込む作業は担当していないし、ましてや実装も担当していない。
正直、アーキテクトの役割は抽象的すぎると思う。

ソフトウェアプロダクトラインの講演を聞いた時、衝撃を受けたのは、アーキテクトはユーザや開発者、管理者の間で調整する役割を担う人なのだ、という話。
僕もその話の方がはるかに実感できる。
本来の要望は何なのか、要望からどのように設計するか、開発者とどうやって技術で実現するか、要望と工数のバランスからどうやって折り合いをつけるか、などを考えるのがアーキテクトの役割だと思う。

そして、「システムアーキテクチャ構築の原理 ITアーキテクトが持つべき3つの思考 (IT Architects’Archive ソフトウェア開発の実践)」によれば、アジャイラーとアーキテクトの間には緊張関係がある。
カウボーイのようなアジャイラーと、管理者志向のアーキテクトは元々、水と油。
本来、役割を二つに分けるのがおかしいのかもしれない。


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

2010/08/07

入門Redmine 第2版

入門Redmine 第2版―Linux/Windows対応が来週に出版されるらしい。

目次を見ると、Redmineの機能を知りたかったら、この本一冊で十分かも。
Redmine1.0の機能も掲載されているのかな?

入門Redmine 第2版 Linux/Windows対応|書籍情報|秀和システム

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

現代のAgile開発が抱える課題

チケット駆動開発でAgile開発を初めて実践できて、Agile開発の長所や短所が色々分かってきた気がする。
今の時代にAgile開発はとても優れていると思っているが、乗り越えるべき課題はまだまだある。
その課題も、時代の変化によって、より難しいレベルまで要求されているように思う。

2000年代に現れたXPを代表とするAgile開発は、その利点は広く知られてきたが、適用の限界や短所について従来から指摘され続けてきている。
その課題についてまとめてみる。
#考えたことをラフなメモ書き。書きかけもある。

【1】Agile開発はプロジェクト管理が弱い

アジャイル開発でプロジェクト管理、そしてプロセスを管理する部分が弱いという指摘は従来から言われていた。
確かに、PMBOK、CMMIなどの観点から見れば、Agile開発はプログラミング重視で全体的なプロセス設計がなされていないように思える。

だが、Scrumがプロジェクト管理の部分を補強してくれている。
Scrumは一言で言えば、XPの計画ゲームを実現したプロセスフレームワークだ。
基本は、1ヶ月という固定の期間(スプリント)中は要件を固定して、インクリメンタルに開発する。

Scrumで重要な概念は、プロダクトバックログとスプリントバックログだ。
プロダクトバックログは要件の貯蔵庫、スプリントバックログは直近のリリース予定のタスクの貯蔵庫。

顧客からの要望、バグ修正、リファクタリングなどは一度プロダクトバックログに貯められて、どのスプリントで実現するか、長期的に判断して、スプリントにアサインされた時に、スプリントバックログに入れられる。
そして、スプリント中は、スプリントバックログにあるタスクを一つずつ解決していく。
当然、タスクの作業順序は状況によって日々変わるから、デイリースクラムという名の朝会で状況を確認し、各担当者に作業をアサインしていく。
スプリント中の進捗管理は、バーンダウンチャート、かんばん、など各種のプラクティスで補完できる。

プロダクトバックログという概念は、TestLinkのテスト仕様、GTDによるタスク管理にも同様の発想が見受けられる。
又、「決断をできるだけ遅らせる」というリーンソフトウェア開発のプラクティスに似ている。
まずは要望やタスク、テストケースは一旦貯めて、その後に状況に応じて優先順位付けすればいい。
現場リーダーは優先順位付けマシンなのだ。

アジャイルな見積りと計画づくり ~価値あるソフトウェアを育てる概念と技法~」では、アジャイル開発におけるリリース計画の作り方でヒントになることが沢山書かれている。

ScrumがAgile開発へ補強した概念は、リリース計画だと思う。
長期的なリリース計画と短期的なイテレーション(スプリント)計画の2つの戦略によって、小規模リリースを無理なく実現できるようにしている。

当然、チケット駆動開発もAgile開発のプロジェクト管理を補強してくれる。
チケットをXPのタスクカードのように扱えば、ロードマップが自然にリリース計画となり、日々の進捗は、チケットの自動集計と言う機能に置き換えられる。
Redmineを実際に運用してみれば、Agile開発というプロセスの本質が見えてくると思う。

【2】Agile開発はスケールアップが難しい

XPはその発端からして、小規模なチームで小規模なプロジェクトで実験された経緯がある。
だから、Agile開発は大規模チームや大規模プロジェクトでは運用しにくい、という指摘は従来から言われ続けてきた。

「アジャイル開発のスケールアップ」はソフトウェア工学的にも重要な問題だと思う。
小規模なシステムでは見えないものが、大規模なシステムでは問題として出てくる。
テスト駆動開発で単体テスト済みのモジュールであっても、たくさんのモジュールを結合して非機能要件と言う問題が出てくるように、大規模システムになって初めて出てくる問題もあるのだ。

だが、Scrumは大規模チームや大規模プロジェクトに応用出来る仕掛けがある。
大規模チームへScrumを適用した成功例は「塹壕より Scrum と XP」が初めてではなかろうか?

昨今は「アジャイル開発の本質とスケールアップ 変化に強い大規模開発を成功させる14のベストプラクティス (IT Architects’ Archive)」のように、アジャイル開発をスケールアップするためのヒントが公開されている。
アジャイル開発の本質とスケールアップ 変化に強い大規模開発を成功させる14のベストプラクティス (IT Architects’ Archive)」で最も重要なプラクティスは、アジャイルリリーストレインとスクラムオブスクラムだと思う。

複数のチームが定期的にリリースしていく場合、電車の発着を時刻表に従うように、複数のチームもイテレーションも同期させることがアジャイルリリーストレインだ。
つまり、全チームのイテレーションは必ず同期させる。
このプラクティスがなければ、一番遅れた開発チームに他の開発チームも影響されてしまい、全体の開発速度も下がる。

アジャイルリリーストレインの変形としては、イテレーションの階層化と言う手法もある。
例えば、組込システム開発で、ハードウェアチームの1イテレーションに対し、ソフトウェア開発チームは3つのイテレーションで小刻みに内部リリースしていくという戦略。
つまり、ソフトウェア開発チームは早めに小さなモジュールをリリースして、ハードウェアチームにそのモジュールを渡して試験してもらい、そのフィードバックを受けながら、次イテレーションで改善していく。
この方法を使えば、ハードウェアとソフトウェアの結合テストを事前に少しずつ実施することで、リスクを減らせる。

次に、各チームリーダー(スクラムマスター)が定期的に集まって、プロジェクト全体の進捗や課題、方針を棚卸して決定する場がスクラムオブスクラム。
スクラムオブスクラムがなければ、複数のチームにまたがる課題や依頼事項をプロジェクト全体の視点で制御できなくなる。
このプラクティスは、PMBOKのCCB(変更管理委員会)、ITILのCAB(変更諮問委員会)に相当するだろう。

この2つのプラクティスが最重要と思うのは、複数の開発チームのインターフェイスに関わるプラクティスだからだ。
この2個のプラクティスが、開発チームがお互いに調整する場、お互いに作ったモジュールを渡したり受領して移植する場、そしてリリースを調整する場を提供してくれるからだ。

更に、Redmineによるチケット駆動開発では、アジャイル開発のスケールアップを補強してくれる機能がある。
RedmineのVer1.0の機能にある3つの機能、つまり、プロジェクトの無制限の階層構造、バージョンの継承、チケットの親子関係(サブタスキング)が重要だろうと思う。

プロジェクトの無制限の階層構造を使えば、サブチームのタスク管理を大規模プロジェクトのタスク管理の一部として位置づけることができる。
例えば、第1階層のプロジェクトは、大規模プロジェクト全体のタスク管理として、第2階層以下はサブチームのタスク管理にすればいいだろう。

バージョンの継承機能を使えば、親プロジェクトのバージョンを子プロジェクトのバージョンへ継承できる。
これによって、全体スケジュールのイテレーションに各チームのイテレーションを同期させることができる。
つまり、アジャイルリリーストレインを実現できる重要な機能なのだ。
実際は、例えば、親プロジェクトのイテレーション(バージョン)1個に対し、サブチームのイテレーション(バージョン)を複数個へ階層化する手法を取れば、より柔軟にリリース管理できるだろう。

そして、チケットの親子関係を使って、親チケットをストーリーカード、子チケットをタスクカードに階層化すれば、要件からタスク、ソースまで一貫して追跡できる基盤が整う。
Redmineのサブタスキング機能には、親チケットへ子チケットの情報(開始日・終了日・進捗率)をロールアップしてくるので、とても使い易くなった。

アジャイル開発の本質とスケールアップ 変化に強い大規模開発を成功させる14のベストプラクティス (IT Architects’ Archive)」にあるプラクティスをRedmineで実現すれば面白いと思う。

【3】Agile開発はアーキテクチャや品質の作り込みの観点が弱い

RUPなどに比べると、Agile開発はアーキテクチャや品質の作り込みの観点が弱いという指摘も従来から言われ続けてきた。
ケントベックやファウラーは優れたモデラーでもあったから、アジャイル開発で成功できたが、モデリング無しで開発するのは、大規模プロジェクトになるほど難しい。

昨今のモデリング技法はUMLが席巻しているが、UMLは詳細設計とコーディングをシームレスにつなげてくれるが、要件定義やシステム提案の段階から落とし込むのには適していない。
ユースケース記述について、「ユースケース実践ガイド―効果的なユースケースの書き方 (OOP Foundations)」などの本を読んで確かにが参考になったが、顧客と話しながら要件を落としこんでいく時には役立たない。
むしろ、DFDやIDEF0のようなプロセス図の方が顧客にも分かりやすい。

アーキテクチャの設計、要件定義におけるモデリング、品質を考慮したテスト計画は全てトップダウンから計画を作るのが正攻法。
トップダウンで仮説検証。
全体構想を描くために計画が一番重要。
後でアーキテクチャを変えるのは難しい。

アーキテクチャをプロトタイプのように作っては壊して、アイデアを試す方法もある。
だが、プロトタイプを再利用可能な部品やフレームワークまで、設計や品質を高めるのは難しい。
むしろ、RUPの推敲プロセスのように、アーキテクチャを少しずつ反復しながら、機能拡張して品質を高める方が現実的。

モデリング手法にアジャイル開発の影響を受けたものとして、アジャイルモデリングがある。
つまり、アジャイルモデリングは軽量のモデリングスタイル。
アジャイルモデリング―XPと統一プロセスを補完するプラクティス (OOP Foundationsシリーズ)」が代表作。
でも、何も新しい事は言っていない。
モデリングに対して新しい視点を何ももたらしていない。

システムアーキテクチャ構築の原理 ITアーキテクトが持つべき3つの思考 (IT Architects’Archive ソフトウェア開発の実践)」の言う通り、アジャイラーとアーキテクトは対立しているのが現状。
アジャイル開発をシステム提案や要件定義に持って行っても、うまくいかない。
アーキテクトがアジャイラーになるしか、アジャイル開発を実践できていないのが現状。

【4】Agile開発は分散開発まで考慮されていない

大規模プロジェクトになるほど、開発チームもメンバーも分散する。
分散の規模も、一つの部屋では無理で、一つのビルで部屋をまたがるだけでも、心理的な距離は長くなる。
オフショア開発になれば尚更だろう。
チームビルディングにフォーカスを当てたプロジェクトファシリテーションは優れたツールだと思うが、分散開発に関してそのノウハウがないのが残念。
その問題意識については、プロジェクトファシリテーションに足りないもの: プログラマの思索に書いた。

Agile開発にはたくさんの希望やアイデアがある。
上記にあげた課題も必ず解決できると確信している。

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

いつテストを終わらせるか?

信頼度成長曲線の使い方について、フジハラさんのBlogによいリンクがあったのでメモ。

【元ネタ】
Redmine プラグイン開発 - テストレポートプラグイン開発中 - フジハラボ -- 目指せ!スーパーエンジニア

どこでテストをやめるのか? 日本電気株式会社 川村真弥さん

オープンソースソフトウェアにおけるコードの 安定性予測に向けたゴンペルツ曲線の適用

成長曲線(ゴンペルツ曲線とロジスティック曲線)

つれづれなる技術屋日記: バグカーブ 対数曲線や二次曲線での近似のお勧め

テスト消化曲線とバグ発生曲線の7パターン診断 - @IT MONOist

プログラムバグの成長曲線とプログラム品質の判定

テスト消化曲線とバグ発生曲線のパターン診断: プログラマの思索

信頼度成長曲線の使い道は、テストでソフトウェアの品質が歩溜りに達したかどうかを判定するのに使う。
つまり、テストの止め時は、信頼度成長曲線が収束した時なのだ。

すなわち、信頼度成長曲線はリリース判定の基準の一部になるので、とても重要な指標になる。
逆に、システムをリリース判定するのに、単純にテストが終わったから、納期が迫ったからという理由でリリースすれば、納品後に契約違反という名のクレームが顧客から届くことになる。

日本では製造業の品質管理の手法を用いて、ソフトウェアに対しても信頼度成長曲線を応用する手法が多いと思う。
しかし、ソフトウェアの場合、ハードウェアと違って、実際は綺麗な信頼度成長曲線にならない場合が多い。
例えば、いくらテストしても、バグがどんどん出てきて、直せば直すほど品質が不安定になっているプロジェクトも多いだろう。
あるいは、せっかくテストでバグを潰しきっても、次から次へと仕様変更や仕様の追加が届いて、それに対応する度にバグが出ては直す作業の繰り返しばかりで、いつまで経っても品質が安定しないプロジェクトも多いだろう。

だから、信頼度成長曲線はソフトウェアでは使えない、あるいは、ソフトウェアの信頼度成長曲線はバッドノウハウが多い、という話はよく聞く時が多い。

上記の資料を読んで思ったことは、信頼度成長曲線を使いこなすには、いくつかのノウハウが必要だということ。

一つは、時系列にバグ累積数を並べるとき、横軸を時系列ではなくテストケース数やテスト工数を並べた方が良いというアドバイス。
理由は、時系列に並べた場合、テスト終盤ではテストしない日も多いので、当然バグ数は一定になるが、実際にその状況は品質が安定したことを意味していないから。
つまり、テスト工程の品質が担保されている場合、テスト工数やテストケース数を横軸に時系列にバグ累積数を並べれば、叩いた分だけソフトウェアが安定しているかどうか、少なくとも分かる。

もう一つは、スコープを固定すること。
理由は、テスト工程なのに、次から次へとやってくる顧客の要望を受け入れてシステムに機能追加すれば、障害修正と機能追加が混じってしまって、品質はなかなか安定しないから。
デグレも多発するだろう。

アジャイル開発の利点の一つは、イテレーションという期間では、要望やスコープを固定させるため、その期間中はよほどのことがない限り、機能追加しないこと。
スコープの固定によって、テストでバグ出しして障害修正するほど、品質は少なくとも安定してくるはず。

駄目な開発チームは、テスト工程になっても、設計漏れという理由でスコープを固定できないため、いつまで経っても開発し続ける羽目になり、デスマーチに陥る。

いつテストを終わらせるか?という判断はとても難しい。
テストには、単にJUnitのような単体テスト、Seleniumによる結合テストだけでなく、ユーザの観点の受入テストや負荷テスト、セキュリティのテストなどもある。
実際のプロジェクトでは、テストすればするほど、バグが出るのが普通だろう。
テストを終わらせる判定基準に信頼度成長曲線を使う場合、運用ノウハウが必要だ。

だが、そのノウハウはどの企業もなかなか公表しない。
そのノウハウは比較優位の源泉だからだ。
だからいつまで経っても同じような失敗を続けてきて、日本のIT企業のレベルは上がっていないように思う。

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

2010/08/01

ロジカルシンキングは省エネシンキング

ロジカルシンキングは省エネシンキングだと喝破した記事があったのでメモ。

18.ロジカル・シンキング決別宣言(最終回)

MECEとロジックツリーの手法は確かに分析しやすい。
だが論理的というよりも、90%の確かさを元に、漏れが無いか早く何度も確認して、アイデアの質を上げる手法と言える。
つまり、一つのフレームワーク。
フレームワークに則って、最短のコストでアイデアを論理的に補強するためにある。

従って、フレームワークを覚えたと言っても、何か創造的になるわけではない。
問題解決のための一つの手法と思って使いこなした方がいい。

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

« 2010年7月 | トップページ | 2010年9月 »