カテゴリー「-プログラミング ( 2008.10-12 )」の42件の記事

2008年12月31日 (水)

[TDD の練習(3)] 和暦年月の文字列を検証する

とある掲示板より。
> 号年月(例 H2012)が実在する年月であるかをチェックしたいです。
> 年号は、H=平成 S=昭和のみを対象とします。

質問者は、 旧 VB の IsDate() 関数と互換のメソッドが使えるような実装が出来た、 というところで終わっています。 そのコードは、 「一部省略しております」 とのことで、 文字列を分解する前の文字列長チェックとかは書かかれていません。

で。 こういう検証器、 つまり、 引数が何らかの基準を満たしていたら true、 そうでなければ false を返すというモノは、 テストを書きやすいのでネタにしてみます。
また、 和暦を扱う上で厄介なのは、 境界値の前後をどうするかという仕様の問題ですが、 ここでは IsDate() の挙動に合わせる、 ということにします。

ということで、 いつものようにどんなテストコードを書いていけばいいのかを、 文章で書いてみますので、 ユニットテストに書き下してみてください。

今回は、 VB.NET 2008 + NUnit です。
・ プロジェクト名: IsDateを使ってみる
・ テストクラス: 年月検証器のテスト
・ 製品クラス: 年月検証器 ( +α )
・ 製品に実装するメソッド
Public Shared Function それは実在する年月か (ByVal 元号年月 As String) As Boolean

続きを読む "[TDD の練習(3)] 和暦年月の文字列を検証する"

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

2008年12月30日 (火)

[TDD の練習(2)] (すっかり出遅れた) 縦書き祭

わんくま blog での縦書き祭は → このへんから

てことで、 仕様はこんな感じにします。
・ 入力は全角のテキストだとする。 ( そうじゃなかったら、 読み込んだときに変換してね )
・ Console.WriteLine() で出力していくと、 縦書きしてあるように見えること。
・ 無駄な空白 (右端と下端) は、 出力しない。

前回と同様に、 どんなテストコードを書いていけばいいのかを、 文章で書いてみますので、 ユニットテストに書き下してみてください。

  1. 最初に、 どんな使い方をするものなのか、 考えます。
    コードの流れはどんなふうでしょう。 その中で、 今回作るモノはどのように使うでしょう? 分かりにくいときは、 ざっと書いてみます。
    ここは回答例を書いておきましょう。 こんな感じでしょうか…

// 読み込んだら、UNICODE 正規化と全角変換して
List<string> 横書きデータ = new List<string>();
foreach (string 一行 in 横書きデータ元) {
  string 正規化済み
   
= 一行.Normalize(
      System.Text.NormalizationForm.FormC);
  string 全角化済み
    = Microsoft.VisualBasic.Strings.StrConv(
      正規化済み,
      Microsoft.VisualBasic.VbStrConv.Wide,
      0x0411);
  横書きデータ.Add(全角化済み);
}

// 縦横変換機を呼び出して
IEnumerable<string> 変換後データ
  = 縦横変換機.縦書きに直せ(横書きデータ);

// コンソールに書き出させる
foreach (string 横一行分 in 変換後データ) {
  Console.WriteLine(横一行分);
}

上で書いたコードで、 まだ無いモノは 縦横変換機 ってヤツです。 こいつを作るためのテストを書いていきます。

続きを読む "[TDD の練習(2)] (すっかり出遅れた) 縦書き祭"

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

2008年12月28日 (日)

[.NET] yield return はコードカバレッジでカバーできない

そーいや yield return を自分で使ったこと無かったやん~ f(^^;
…と思い立って使ってみたんだけど。 その話はさておき。

前から気になってはいた、 yield が Visual Studio のコードカバレッジでちゃんとカウントしてくれない、 って問題。
けっきょく、 Visual Studio 2010 で対応、 ってことらしいです。 ( …とメモ f(^^; )

・ MSDN フォーラム: Visual Studio フィードバック
yield returnはコードカバレッジでカバーできない。

・ MS Connect : Feedback ID = 329830
Code Coverage is incorrect when using 'yield return' block

It has been resolved as fixed and the fix should appear in the upcoming beta of Visual Studio 2010.
投稿者: Microsoft、投稿日時: 2008/11/18 23:56

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

[.NET] StreamWriter を使って シフト JIS のテキストファイルを書き出すと 2GB でエラー

あれま。
まぁ、 Encoding 無指定で ( てことは UTF-8 だっけ? f(^^; ) 書き出す分には、 問題無く 2GB 越えられるようだし。 どうしてもシフト JIS で 2GB 越えを、 ってときには、 自前で変換してバイナリで書き出せば、 きっと回避できるし。

MS Connect: FeedbackID = 389622
StreamWriter に Encoding を指定してファイル出力を行うと、 2GB を超える直前でArgumentException が発生する。
Encoding を指定しない場合は、 問題なく出力される。

けれど、 知らずにログの書き出しとか実装してたら、 大ハマリするよねぇ (;;

※ 直して欲しい人は、 レイティング付けましょうね f(^^;


( 2009/01/08 追記 )

上記フィードバックに MS からの回答が付いてました。

This problem has been fixed and the fix will appear in the next major release of the .NET Framework..

投稿者: Microsoft、投稿日時: 2009/01/06 14:21

もう直ってるけど、 公開は次の .NET Framework のメジャーリリース ( つまり、 4.0 のことでしょうね ) で …って、 また微妙な言い方を。 既存のバージョン用の修正は出るのかどうかワカランじゃん。

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

サンプルコードはサンプルであって製品じゃないんだからねっ

…っていう、 昔はあたりまえだった ( …ハズ f(^^; ) ことを、 このごろはどんどんしつこく言わないといけないご時世なようで。

いつからなのか分からないけど、 今日ふと気付いたら、 MSDN ライブラリにも、 こんな注意書きが。
20081228_msdnlib01

このサンプルコードは概念を示すためのものであり、 その概念に関連するコードのみを示しています。 特定の環境について必ずしもセキュリティ要件を満たしていませんので、 そのまま使用しないでください。 セキュリティおよびエラー処理コードを追加して、 プロジェクトをより安全かつ堅牢にすることをお勧めします。

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

2008年12月25日 (木)

[.NET] SandCastle 用に、 namespace へのコメントをソースコードに埋め込む方法

いや、まだだから」 より。

その3.名前空間ごとに NamespaceDoc クラスを作成する。

ということで、この方法があったりします。
つまり、名前空間のコメントを入れるためのクラスを定義してしまうってゆー、まーなんというか、盲点というか、抜け道というかw
C# だとこんな感じですねー。

namespace 対象とする名前空間 {
    /// <summary>
    /// 名前空間の概要
    /// </summary>
    /// <remarks>名前空間の補足</remarks>
    [System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
    class NamespaceDoc {
    }
}

…ぐふぅ。 そんなぁ~!? f(^^;
はい、 まさにドキュメント読んでませんでした orz

続きを読む "[.NET] SandCastle 用に、 namespace へのコメントをソースコードに埋め込む方法"

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

2008年12月21日 (日)

[TDD の練習] FizzBuzz 問題

わんくま同盟 東京勉強会 #27上野さんセッションで紹介された、 FizzBuzz 問題。
100 まで表示せい、 ってお題に、 即座にその場で書き下した yukiyukki初音さん、 さすがです。

けど、 あれれ? 0 始まりじゃなくて、 1 からだよ~ f(^^;
あ、 それだけじゃないよ~な…

これって意外と難しい? f(^^;

ということで、 NUnit ( VS 2008 Pro. 以上を持ってるなら、 そのユニットテストでも OK ) 用のテストコードを考えてみてください。

続きを読む "[TDD の練習] FizzBuzz 問題"

| | コメント (2) | トラックバック (1)

[わんくま同盟 東京勉強会] 第27回 (2008/12/20) の資料

初めて参加させていただいた東京の勉強会では、 名古屋第1回でもやった MSF Agile を話させていただきました。 → わんくま同盟 勉強会の資料

1年前のプレゼン資料がほぼそのまま使えたというのは、 喜ぶべきか悲しむべきか…
いまだに MS のサイトには MSF ver.4.x の日本語資料が無いみたいだし、 日本では TFS を真剣に売り込むつもりが無いんじゃないの? …と、 つい愚痴りたくなります f(^^;
# ひょっとして、 米国外には MSF は広めないでくれ って圧力が掛かってるとか? (w

そうそう。 東京の勉強会参加者には、 自営や社長さんが大勢いらっしゃってちょっとびっくり。 名古屋とはだいぶ雰囲気が違いますね。

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

2008年12月 9日 (火)

Excel VBA で、 ファイルのバージョンとタイムスタンプを取得する

今回のプロジェクト、 納品が頻繁に発生するので、 納品したモノのバージョン管理も欠かせません。 となると、 いつ、 どんなファイルバージョンのものを納品したのか、 記録しておかないといけないのですが…
ひとつひとつ、 ファイルのプロパティを開いてファイルバージョンを書き写すのって… めんど~ orz

どーせなら、 VBA でサクっと書けて、 Excel の表になってくれちゃえばいいのに~ f(^^;

続きを読む "Excel VBA で、 ファイルのバージョンとタイムスタンプを取得する"

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

2008年12月 6日 (土)

[わんくま同盟 名古屋勉強会] 第5回 (2008/12/06) の資料

20081206_wankuma 第5回では Lightning Talk ( LT ) ということで、 いつもと違ってちょっとヨタ話 f(^^;わんくま同盟 勉強会の資料

もと機械設計屋さんから見た、 「オブジェクトを志向しているプログラム」 ( Object-Oriented Program ) ってモノのイメージを、 5分間で喋らせていただきました。

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

より以前の記事一覧