YAGNIとTDD

プログラム開発に以下の2つの単語があります。

1.YAGNI
「You Ain’t Gonna Need It 」の略で、意味は「機能は実際に必要となるまでは追加するな」ということです。
必要になるまで実装を遅延することで、無駄なリソース(工数・容量・速度など)を消費せずに済みます。

YAGNIは現実的な考えなので、この原則を守るようにしています。

2.TDD
「test-driven development」の略で、コードを実装する前に、ユニットテスト(プログラムをテストするためのプログラム)を作成し、
テストが成功するように実装をおこなうという手法です。

自分はTDDを以前は行っていたが、今はしていません。全てのコードに対して、ユニットテストを作成するコストや、ユニットテストの保守を行うコストが合わないからです。
理想的ではあるが、現実的では無かったです。但し、今でも社内ライブラリの作成時はTDDではないがユニットテストは書いています。

先日、あるかたのWEBサイトで、YAGNIとTDDが矛盾するという内容を見ました。そこには以下の文章が記載されてました。
「ユニットテストというのは変更に対してアジャイルに対応するために用意するものだ。その変更の必要がまだないうちから、すべてのコードに対してテストを用意するのはYAGNIの思想に反するのではないか。そのテストコードこそ You Ain’t Gonna Need It ではないのか。」
なるほど、その通り。

結局、YAGNIを守るとTDDが出来ません。

というか、職業プログラムとして限られた時間の中で成果を出そうとすると、理想主義では駄目で、
現実主義にならないといけないので、YAGNIな考えになり、TDDまで手が回らない。

AutoCAD

AutoCADにはいくつかの隠しコマンドがあります。
メーカーは隠しているつもりはないのでしょうがあまりにも説明がヘタクソなので「隠されていた超便利な機能」となっているようです。
TVチャンピオンで「AutoCAD選手権」なるものをやればそれはもの凄い技の応酬であったでしょう。番組が終わってしまって残念です。

残暑と気候が不安定な時期が続いています。

先週から雷や豪雨が続いています。

中には落雷によって、被害を受ける方もおられました。
豪雨で電車が止まっってしまったや、土砂災害に見舞われたなども聞きます。

暑さも依然厳しいです。

これらは地球の環境破壊にが原因なのでしょうか。

環境のためにまずは、身の回りのできることから始めましょう。

私は、小まめに電気を切るように心掛けています。

毎度の暑さの夏、そして、雷。

今週の月曜日の夜から火曜日にかけて雷がなっていましたね。

PCを使用する仕事なので、雷が恐ろしくもあります。

特に何も対策していない自宅でのPC使用時などは怖いですね。

皆様は雷対策などしていますか?

自分はさすがに怖かったのでコンセントを抜いておきました。

PCが壊れるので出費もそうですが、

一番はデータがなくなる可能性があることが一番怖いですね。

まだまだ京都は暑いですね、どうか熱中症などにお気を付けください。

C#の拡張メソッドがおもしろい。2

中央値(メディアン)を計算する拡張メソッドを作成しました。

public static T Median<T>(this IList<T> items) {
    //要素数チェック
    if (items == null || items.Count <= 0) return default(T);
    //ソート
    List<T> sortedItems = new List<T>(items);
    sortedItems.Sort();
    //奇数、偶数による分岐
    if (sortedItems.Count.IsOdd()) {
        return sortedItems[sortedItems.Count / 2];
    } else {
        decimal item1 = Convert.ToDecimal(sortedItems[sortedItems.Count / 2 - 1]);
        decimal item2 = Convert.ToDecimal(sortedItems[sortedItems.Count / 2]);
        decimal center = (item1 + item2) / 2;
        return (T)Convert.ChangeType(center, typeof(T));
    }
}

要素数が奇数の場合は、そのまま中央値を返すので問題無いが、偶数の場合は、中央値2つの平均値を返したいので、一旦decimal型に変換して平均値を計算しています。

しかしこの実装ではdouble型の大きい値の場合にオーバーフローしたり、NaNに対応出来ません。

.netフレームワークのAverage拡張メソッドはどのような実装になっているのでしょう?
調べてみると、型ごとに拡張メソッドが用意されていました。なるほど。

酷暑

夏生まれの私でも最近の酷暑には閉口しています。
水冷のCPUがあるように水を張ったタライに足を浸けて開発を行うのはいかがでしょうか?
えっ、タライって何?
ドリフターズが頭の上に落とすバケツのお化けみたいなヤツですよ。
あぁ、ドリフターズも知りませんか・・・。

社会人になって初めての夏が来ました。

毎朝出社するとき、高校の横を通るのですが、毎朝校門には先生方が遅刻する生徒を待っておられます。しかし、今日は、その先生方がおられませんでした。

学生は、夏休みなのだそうです。去年まで学生だったので、非常に懐かしいです。
社会人は、お盆休みしかまとまった休みがありません。

ちなみに豪雪地帯の地域は、夏休みは短く冬休みが長いそうです。

暑い日が長く続きますが、熱中症や冷房のかけすぎによる体調不良をおこさないように乗り切りましょう。

「第7回けいはんなビジネスメッセ」に出展します。

皆さんいよいよ夏本番と言う暑さがやってきますね。
今年の夏も猛暑が続くのかな…
身体には気を付けて下さいね。
でも九州の豪雨による被害には、毎日驚いています。
去年は東北地震もあり今年は豪雨で、最近天災続きで心配してます。

さて、2012年07月19日木曜日に、場所けいはんなプラザで「第7回けいはんなビジネスメッセ」
環境・エネルギーに出展します。
前回、中小企業総合展で反響を頂きました、簡易電力計S-WATTⅡ!
関西は電力不足と原発問題を抱えています。
是非とも皆様の節電のお手伝いをさせて頂きたいと思います。
よろしくお願いします。

不具合発生!?

現場で不具合が起きた時の、方法について色々試しましたが、私が一番うまく行く方法として、オセロ手法というのがあります。 
まぁ早い話が黒い不具合原因を切り分けて、シロにしていく方法です。この方法はじつは最初は、少しづつしかシロに変わりませんが、不具合の真相に近づくと一気にに早く片付きます。仙人のように最初から不具合があてられればいいのですが、凡人には一つ一つが重要です。
あと、検証方法や手法を不具合解析時に、変えてしまうとよく振り出しに戻る事がよくありました。 
固い信念と順序は何事に置いても重要だと私は思います。