12月9日(木)に開催します、オブジェクト倶楽部クリスマスイベント。たくさんの参加受付、本当にありがとうございます。3日(金)が参加受付締め切りです。プロジェクトの状態と相談して受付を保留していたあなた!いよいよ決断のときです。今回は、テストと進捗管理(その2)である。ソフトウェア開発の「一個流し」(*1)と進捗管理について、おもしろい例を出している。次の問題を考えてみて欲しい。30個の部屋がある豪邸を考える。ル箱に詰めなければならない。うデッドラインを守れるか。■ウォーターフォール的計画:1.最初の1週間で全部屋の掃除を行なう。3.次の1週間で全部屋のダンボール箱詰めを行なう。4.次の1週間で全部屋のチェックを行なう。5.4週間あるので、4週間後には全部屋のチェックまで終わる。め、チェックまで終える。2.30日あるので、30日後には全30部屋の箱詰めが終わる。対策を取りやすいだろうか。ウォーターフォール的計画での見積もりは根拠が難しい。識を活かすことができない。分かったときには時既に遅しだ。これに対して、「一個流し」は進捗をリニアに管理できる。流し戦略をビジュアルにマネジメントするツールが「バーンダウンチャート」だ。30個が一個ずつ減っていく計画をたて、それを日々追っていく。真は、バーンダウンチャートの例。1イテレーションの中で完成させるべきソフトウェアの要求を縦軸にとっている。青が予定線、赤が実績線だ。http://www.ObjectClub.jp/ml-arch/magazine/magazine72/burndown-2-small.JPG前回の繰り返しになるが、「テストで進捗を測る」。テストの終了に到達していないものは「在庫」と考える。在庫状態にある成果物を減らし、バリューストリーム(価値の流れ)の速度を上げるのだ(平鍋)。(*1)「一個流し」は、トヨタ生産方式用語。テストと工程を進めるのではなく、要求を小さな単位で1つずつ、分析からテストまで流すこと。_______________________________________________________________________この記事への評価にご協力をお願いします。URLをクリックして、「ご協力ありがとうございました」のメッセージがご使用のブラウザに表示されれば投票完了です。[最終回]■はじめにこの記事は、初級開発者である私がみなさんと一緒にC#を使ってオブジェクト指向(OO)の基礎を気軽に勉強していこう、という内容です。C#でオブジェクト指向の入門について一通り説明しましたので、今回で最終回にさせて頂きます。今回はCondition属性についての理解を目標に学習していきたいと思います。C#の属性はクラス、フィールド、メソッドに情報を付加し、ドキュメント生成やコンパイルの制御などに使われます。実際にプログラムを書いて確認していきましょう。■内容まずは、コンディション属性がついたメソッドのあるクラスを見てみましょう。ように、Condition属性をメソッドに付加することで条件付きメソッドにすることができます。Condition属性では、パラメーターを1つ指定しますが、ここでは"DEBUG"としています。このパラメーターが、Loggerクラスを利用する側でメソッドを挿入するかどうかを制御する識別するものになります。次に、Loggerクラスを利用する側を見てみましょう。オプションで/define:DEBUGを付けるか否かで、Log.MessageメソッドがHello側で挿入されたり、されなかったりします。Ending---------------------------------------------------------------------のように、Starting、Endingは表示されます。ienaga!!---------------------------------------------------------------------のように、Starting、Endingは表示されません。プログラム内の条件分岐(if)により制御するのではなく、コンパイル時にコンパイラオプション(/define:DEBUG)でによって制御しているのがCondition属性の特徴です。■まとめCondition属性について学習しました。運用時で振る舞いを制御したいなどの際に、それを直接条件分岐で記述すればコードが煩雑になってしまう場合があります。そんな場合、Condition属性を使えばコードをシンプルにすることができます。・外部からDLLをインポートするためのDllImport属性などが用意されています。C#で属性を使う機会と言えば、NUnitの単体テストではないでしょうか。・テストメソッドであることを示すため、メソッドにTest属性がその代表的な属性です。(ちなみにJUnitの場合は、TestCaseを継承したクラスがテストメソッドを含むテストクラス、メソッド名がtest××のものがテストメソッドになるようになっています。)また説明は省かせて頂きましたが、独自に属性を宣言することも可能です。Condition属性のようにコード自身を制御したいと思われたら、一度属性について調べてみてはいかがでしょうか。■終わりに年が明けてからは、言語をC#からRubyにかえ、Rubyの特徴を学習するだけではなく、実際にRubyを使ってTDDやパターンなどについても皆さんと一緒に学習して、更なるパワーアップをしていきたいと思っています。(IENAGA)_______________________________________________________________________この記事への評価にご協力をお願いします。URLをクリックして、「ご協力ありがとうございました」のメッセージがご使用のブラウザに表示されれば投票完了です。ホントのところ今週は「状態遷移図が好き」のホントのところ。方からのリクエストです。ありがとうございます。状態遷移の記述といえば、UMLの『状態遷移図』が有名だと思いますが、『状態遷移表』もまだまだ健在です。状態遷移図のほうが好き。状態遷移表のほうが好き。