月別アーカイブ: 2011年4月

メソッドチェーンではテスト項目数は減らない

コードを短くすると単体テストが楽になる、の検証編 | Moonmile Solutions Blog http://www.moonmile.net/blog/archives/2167 の続きで、実は適切なコードの書き方をしないとテスト項目は減りません。 # マーチン・ファウラー氏の言う「流れるようにコーディングをする」ことと # コード自体の品質とは別なのです。 # 当然、コーディングがしやすい、というのも品質を上げる要因のひとつ # であることは変わりありませんが。 これを検証してみます。 まずは、以下の3つのパターンを見てください。 A.通常パターン B.プロパティで設定するパターン C.メソッドチェーンのパターン 非常に極端に書いていますが、典型的なコーディングの3つのパターンです。 A の通常パターンは、コンストラクタでサイズを指定して、その後でメッセージを設定しています。 表 … 続きを読む

カテゴリー: 開発 | コメントする

必ず成功するための100の開発手順(メモ)

新規の開発手順を作成中です。まだ50手順弱なので100手順にしようかなと。

カテゴリー: プロジェクト管理, Plan Language | 5件のコメント

業務コードで使う例外処理のたった1つの方法

いわゆる「○つの方法」という釣りタイトルですが、ワタクシ的には例外処理に関しては一択です。 例外処理については、方法論的にも色々あるのは分かっているのですが、「業務」という範囲で考えると、という選択です。 UIがある場合とない場合で、ちょっとだけ書き方が分かれます。 こんな風に、関数/メソッド内の処理を【全て】try catch で囲ってしまいます。 乱暴ですよね…ですが、この方法って VB3.0 の頃からの鉄板な方法だったりします。 のように、VB の頃(.NETではない)は、ON ERROR GOTO を使っていました。 さて、この頃 C++ はどうだったかというと…実は C++ は余り流行ってはいなくて、いまだ C 言語が主流でした。なので C 言語の場合は、 な風に、戻り値でエラーを判別するしかなかったのです。 この鉄板の例外処理でログイン処理を書いてみると … 続きを読む

カテゴリー: 開発 | 2件のコメント

SQL Server 2000 では文字列を数値に勝手に変換するよ

後で、SQL Server 2008 とかの最新バージョンを調べますが、落とし穴になりかねないのでメモ。 として test1 テーブルを作成しておきます。 ここに次のようなデータを入れます。 このデータを検索します。 この結果は予想通り、1行目が取得できます。 さて、num に文字列の’10’を指定したときはどうなるでしょうか? マッチングしないと思いきや、自動的に文字列型から数値型に変換されて、1行取得されます。 # Oracle の場合は変換エラーになったと思うのだけど、うろ覚えです。 逆に文字列型(varchar)に対して数値で比較してみると、 これはエラーになります。 1行目の name 列の値「masuda」が int 型に変換できないためにエラーになっていますね。 となると、name 列の値が全て数値型になるようにしたら、どうなるのでしょうか? というデ … 続きを読む

カテゴリー: 開発 | 2件のコメント

純粋オブジェクト指向言語を思考実験してみるテスト

関数言語風なところ(LINQ)や、手続き型の関数の羅列を取り除いて、オブジェクト指向オンリーでプログラミングをする言語を妄想(笑)してみます。個人的には、純粋オブジェクト指向言語は Java がそれに近いのですが、もうちょっと何とかするいう形で。 まず、オブジェクト指向言語の重要な要素を挙げると、 1)カプセル化(隠蔽化)できる。 2)ポリフォリズム(多態化)できる。 3)継承関係がある。 なところです。 ここで、焦点を当てるのは「カプセル化」です。 もともと、オブジェクト指向の最初は、オブジェクト同士のやりとは「メッセージ」を使ってやり取りをしています。 のような繋がりになります。このメッセージ(message)は、objectA のメソッドなのか、objectB のメソッド(リスナー?)なのかは、定義されません(とか思っています)。 また、メソッド(関数)の呼び出しは、C言語やC++の … 続きを読む

カテゴリー: 開発 | コメントする

デスマーチを脱するための5つの方法(メモ)

後で、パワーポイントに直しますが、メモ的に。 プロジェクトが「デスマーチ」状態に陥ったときには、どうするのか?という5つの方法です。 # 「5」という数にはさして意味がありませんが、まぁ、ちょっとだけは意味があるかも。 思考の元ネタとしては、制約の理論(TOC)と、自己組織化、逃走論、デマルコ著スラック、ピープルウェアあたりです、 ・トップマネージャを変える。 → トップの思惑だけで動いている場合は、トップを変える。 → あるは、トップの行動/行為がボトルネックになっている。 → トップがマイナス生産するとき。 ・権限を分散する。 → 権限の抱え込みより、ボトルネックになっているとき。 → 実行できる権限を分散することで、ボトルネックにならないようにする。 → 権限を委譲する。 ・外部の実行部隊を利用する。 → ルールそのものがネックになっている場合は、ルールを変える。 → 内部的な要因で … 続きを読む

カテゴリー: プロジェクト管理 | コメントする

サプライチェーンから考えるプロジェクトの工期

制約の理論(TOC)の考えを元に、ソフトウェアのプロジェクトの計画を見直します。 基本的なところはゴールドラット氏の理論と一緒で、ソフトウェア特有の「事情」も組み入れます。 と言いますか、この手の確率の計算をシミュレーション(モンテカルロ法)することも多いのですが、条件を簡単にしてモデル化してやれば、計算が可能です。まぁ、モデルの結果を現実にあわせてパラメータを調節する、というやり方なんですけどね。 ■二項分布を使って解く 二項分布、正規分布を使って読み解きます。本当は、正規分布の分散を使ったほうが正確に表せるのですが、そもそもが工場の生産現場と違って、ソフトウェアは人が作るところが多いので、物理現象としての正規分布に則らないことが多いのです(学生症候群とか)。なので、あまり正確にやっても意味がないので、現象だけを使うために、単純な二項分布を使います。 ■最初の問題 さて、最初の問題は、 … 続きを読む

カテゴリー: 開発, プロジェクト管理 | 2件のコメント

フェイルセーフなコードを書くには?

フェイルセーフというのは、機器故障しても安全なほうに倒れるシステムの組み方で、原発の制御棒(BWRはフェイルセーフに反しているが、PWRはそれが解消されている)が重力で落ちるようになっていたり、原子炉自体が半分以上地下にあったり、冷却水が上から下へ流れるようになっていたり(これもBWRはフェイルセーフに反している)する仕組みです。 フェイルセーフ – Wikipedia http://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A7%E3%82%A4%E3%83%AB%E3%82%BB%E3%83%BC%E3%83%95 ちなみに、フォールレトラントのほうは、故障が起きても処理を継続できる仕組みで、フェイルセーフのように「問題が起きても大丈夫」という点では一緒なのですが、問題発生の後が異なります。 フェイルセーフは、問題発生→安全に機能停止 フォ … 続きを読む

カテゴリー: 開発, 設計, UIDD | 2件のコメント

コードを短くすると単体テストが楽になる、の検証編

さて、リファクリング前とリファクタリング後のソースコードがありますが、これがどの程度「安全」にコーディングができるのかを検証していきます。 検証するためには、何らかの定量的な手法が必要です。 # ちなみに「定性的な手法」は「ああ、コードが短くなったね」という感想が根拠になりますw コードの複雑度を測定するのに、if 文などの制御文や使われている変数の数を勘定する方法がありますが、ここではもうちょっと簡単に、「変更できる箇所」を数え上げていきます。変更できる箇所というのは、コーディング時に間違えやすいところ/間違える可能性があるところで、≒テストが必要なところ、と言えます。 具体的には ・制御文でカウント ・比較文でカウント ・変数の宣言でカウント ・メソッド呼び出しでカウント ・メソッドの変数でカウント のように、ちまちまと数えていきます。 で、数え上げたのがこれ。 ▼リファクタリング前 … 続きを読む

カテゴリー: 開発, 設計 | コメントする

コードを短くすると単体テストが楽になる、の再実装編

前回の記事 コードを短くすると単体テストが楽になる、の実装編 | Moonmile Solutions Blog http://www.moonmile.net/blog/archives/2160 で実装上の間違いが発覚したので、やり直し。 ■根本的に何をやりたいかを考え直す のところで、全ての列をコピーするために dest.Rows.Add( r ) なんてことをしていましたが、この変数 r は既に src のテーブルで使っているので Add できないんですよねぇ…というバグが。 ちょっと、動作確認(というか xUnit)していないのがバレバレです。 そんな訳で、 のコードが冗長なので、 のように「全ての列をコピーしたい」というところから再スタートします。 ■根本的に何をやりたいのかを考える。 さて、 のところは、全ての列の値をコピーしているところなので、かなり冗長です。 … 続きを読む

カテゴリー: 開発, 設計 | コメントする