作成者:mer 作成日:月, 2010-05-10 01:43
最近は自分が三年前に書いたプログラムの改造を行っているのですが、単体テストはかなり役に立ちます。このころは単体テストコードを書き始めて間もないころで、あまりよいテストコードとは言えないのですけど、ね。
とりあえずテストコードを書いて、それがグリーンになるまで改造を繰り返す。ここはまあいいんですけどね。
グリーンになった後に、単体テストコードをすべて実行します。そうすると別のテストがレッドになりました。
単純に、もとからデータが見つからない場合は null を返すようになっていまして、改造部分でいわゆる "ぬるぽ" が発生するようになったわけです。これを「データが見つからなかった場合の単体テスト」がレッドとして検出してくれたわけです。
データが見つからないということは、ユーザーの操作上あまりあることではありません。このため、UI からテストを行ったらこのバグは見つからなかった恐れがあります。
今回の場合は、あまりクリティカルな問題ではないのですが、それでも過去に決めた仕様に反するコードを書いたのをあっさり検出して、「だったよ!」とか思い出せたのは単体テストのおかげです。
作成者:mer 作成日:木, 2010-04-22 22:05
作成者:mer 作成日:水, 2010-04-21 20:57
Visual Studio 2010 日本語版がようやくリリースされました。
当初の予定では昨日だったのですが、今日に延期されたらしいです。それを全然知らなくて、まだか! まだか! とかやってたわけなんですが。
このブログへのリファラを見てみると「Visual Studio 2010 まだ?」みたいなので検索する人もちらほら見られ、私だけじゃないんだなあと一安心。
んで、さっそく入手したので使ってみます。
んーーーー。
すっかり ReSharper がないと生きていけない体になりましたとさ。(笑)
とりあえずもうちょっと使ってみます。
そうそう、ヘルプが完全に HTML 形式のヘルプなんですよねぇ。ちょっと不便じゃないかと思う。
作成者:mer 作成日:土, 2010-04-17 17:43
本日の Effective C# は「項目33 型の可視性を制限すること」です。
要するに、
公開する必要があるものだけを公開すべきです。
につきます。
可視性をどうやって制限するかは、アクセス修飾子 (C# プログラミング ガイド) を使います。
基本的に、public は公開されているので、どこから使用されているかわかりません。よって、挙動を変えるわけにはいかないことになります。(protected は制限があるように見えますが、public と同列に扱ってください)
これに対し、internal や private は使われる範囲が制限されていて、かつ、使用されている部分を変更可能な場合が多いため、挙動を変更ができる場合が多いです。
というわけで、なんでもかんでも public とすると、変更に対して非常に弱くなります。可視性を制限せよということになるわけです。
作成者:mer 作成日:木, 2010-04-15 21:57
DTI がサービス提供している、ServersMan@VPS を申し込んでみました。初期費用もないし、三か月無料だし。というか、Entry プランなら 490 円/月だから、そのまま使い続けてもあまり痛くないし。
ただ、Entry プランは 256MB しかメモリがありません。おかげで、yum update が失敗します。
yum-fastestmirror を使わなければいいらしいので、/etc/yum/pluginconf.d/fastestmirror.conf ファイルの、enabled を 0 にします。
これで、yum update が使えるようになります。
余談ですが、ソフトウェアアップデートは誰がやるのかと DTI に聞いてみたところ、ご自身で行ってくださいとお返事をいただきました。そのあたり注意してくれと。
いや、そういうの契約前に言わないと。(笑)
ついでなので、rpmforge リポジトリも追加。これでいろいろできます。
そういや、CentOS 5 なんですけど、やっぱ収録パッケージが古いですよね。しゃあないですけど。
作成者:mer 作成日:木, 2010-04-15 20:52
本日の Effective C# は「項目32 より小さく凝集したアセンブリを作成すること」です。
本当にタイトルのまんまなんですが、アセンブリの作成の単位で悩んでいただけに、こういった答えが得られるのはうれしいものです。
アセンブリは単一の機能を提供する小さいものがよいようです。ですので、大きいものもあれば小さいものもあるが、基本的にできるだけ小さく作れ、らしいです。
基準としては、私の場合は分割して使いたいかどうかを考え、そう思うなら分割するって感じです。
余談ですが .NET Framework はこれがうまくいっておらず、GUI 部分を切り離せないため、Windows Server 2008 の Server Core では PowerShell が使えないといったことがありました。(2008 R2 では .NET Framework のサブセットがインストールされている)
アセンブリに引き算は難しいので、こういったことがないよう、足し算で組めるようにすることが大事だと思います。
作成者:mer 作成日:水, 2010-04-14 01:13
ReSharper 5.0 がリリースされました。なんと、Visual Studio 2010 と同時リリースです!
Visual Studio 2008 のときは待たされた気がするのですが。Visual Studio なんて、ReSharper なしでは役に立たないので、同時リリースはうれしいですね。
というか、Visual Studio には大枚はたいているんだから、ReSharper 程度の機能は欲しいところ。
今回の目玉は、ASP.NET/ASP.NET MVC の対応の強化もあると思うんですが、Structural Search and Replace も強力だと思います。うまく使いこなすかどうかが難しそうなんですが…。
作成者:mer 作成日:火, 2010-04-13 21:43
待ちに待った Visual Studio 2010 がリリースされました!
わーい! と思って喜んでたら、日本語版は 20 日からの提供、だそうです。MSDN Subscription を契約済みなので、20 日には入手できます。祝杯でもあげようかな?
しばらくは英語版で遊びますか。
今回の目玉は、参照設定がキャンセルできるようになったこと! ではなくて…。(いや、それも目玉なんですが)
目玉はたぶん DLR とか ASP.NET4 とか、ASP.NET MVC2 とかかな。
しばらくは英語版で遊びますか。
というか仕事せんと…。
作成者:mer 作成日:木, 2010-04-08 23:36
本日の Effective C# は「項目31 機能を最小限かつシンプルにすること」です。
最小限かつシンプルにプログラムを書くのは非常に大事です。読みやすさの面からも。
でも、書籍での "最小限かつシンプル" は読みやすさではなく、パフォーマンスに言及して書かれています。
IL は JIT コンパイラでネイティブコードに変換されて実行されます。変換は実行時にすべて行うと時間がかかるので、呼び出されるメソッドのみ行われるそうです。
つまりは、だらだらと単一のメソッドに分岐をたくさん書いていると、実行されることのほとんどないところまで JIT コンパイラは変換を行うので、その分実行速度が落ちることがあるよということだそうです。
まあ、個人的には JIT コンパイラでの変換は、ただの一度だけで済むので、最初の処理がちょっと重いかな? 程度で大差ないと思うんですけどね。
次には、JIT コンパイラが変換時に、レジスタへローカル変数の割り当てを行いますが、これがローカル変数の数が少なければ少ないほど有利と書かれています。
作成者:mer 作成日:水, 2010-04-07 22:55
本日の Effective C# は「項目30 CLS 互換性のあるアセンブリを作成すること」です。
CLS ってなんぞや? と思ったんですが、「共通言語使用 (Common Language Specification」のことだそうです。
ようは、.NET Framework のあらゆる言語で相互運用できるよう、最低限の規則をまとめたもの、みたいです。
たとえば C# は同じスペル同じシグネチャで、大文字小文字だけが異なるメソッドを宣言できます。ですが、Visual Basic は大文字小文字を区別できないため、これらのメソッドをうまく呼び出せないことが想像できます。なので、大文字小文字だけが違う公開メソッドを作成してはいけないとか、そういったもののようです。
ありがたいことに、CLSCompliant 属性 をつけるだけで、CLS 準拠でない場合はコンパイルが失敗します。
ページ