ただいま修行中...

ソフトウェア開発において、勉強中で悪戦苦闘の日々

マインドマップとテスト駆動開発

2009-06-29 20:57:57 | ソフトウェア開発
最近、テストコードを書いて、足りないものがないかと思い、テストケースを記述した後に、因子が足りているか・水準が足りているかを確認するために、マインドマップを使用して、仕様分析を行います。

実はコレには大きく2つのメリットがあります。1つ目は、xUnitで記述したテストケースの質が頭で考えているものよりも書くことで因子・水準漏れが少なくなる。

2つ目が非常に大きいことですが、これはxUnitで確認が取れれば、テストケースをExcelなどに記述しなくても簡単に確認することができるし、デグレが起きた時にも発見しやすくなることがあります。

最近、これを行ったことで効果があったのが、テスト経験が浅い人に試してもらったところ、データを取得するときに、Null判定をしていなかったなどが簡単に発見することができました。

それ以外にもテスト実施にかかる工数やコストがかなり削減されました。

DrawStringで小さいフォントを表示すると

2009-06-25 21:34:10 | C#
C#GraphicsDrawStringメソッドがあり、フォントサイズを0.1Fに設定して、座標値を指定すると、画像のようになってしまいます。

private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
Font fnt = new Font(this.Font.FontFamily, 0.1F, FontStyle.Regular);
PointF pt = new PointF(100, 100);
e.Graphics.DrawString("あいうえお", fnt, new SolidBrush(Color.Blue), pt);
}


これがPointFではなく、RectangleFで描画する領域を設定してあげれば、正常に表示されます。

どうも調べたら、Dpiが関係していて、Dpiが大きければ正常に描画されて、標準フォント(96DPI)の場合には画像のようになります。

ちなみにこの現象は、WindowsXPで起きます。Vistaだと問題なく正常に表示されます。

そんなに小さな値を設定しても文字が見えないので、ほとんどありえないパターンだと思いますが、こんな現象もあるのだなと思いました。

それにしてもGDI+の文字のところは色々と問題があるように思います。

DrawStringにおける取り消し線

2009-06-19 21:06:07 | C#
C#GraphicsDrawStringというメソッドがあります。

文字を描画するメソッドになります。

Fontの設定で、FontStyleStrikeoutというものがあり、取り消し線を描画することができます。それ以外にも太字やイタリックなどもできます。

通常はこれで問題ありません。ただし、前後に空白を入れた場合の動作が、半角目と全角文字で異なります。画像のようになってしまいます。

この画像の外の赤枠は、Graphics.MeasureStringを利用して取得した文字のサイズを基に描画しています。

色々と調べましたが、はっきりとした原因は、GDI+のDLLまで調べることができなかったので、わかりません。

ここからは推測になります。

StringFormatに、FormatFlagsがあり、StringFormatFlags.MeasureTrailingSpacesを加味しないで、取り消し線を描画しているのではないかと思われます。

StringFormatFlags.MeasureTrailingSpacesとは、行末の空白を含めるという設定になります。GDIでサンプルを作成したところ、特に問題なかったので、GDI+からの問題のように思います。

ちなみに、Excel2007で検証したところ、セルの文字はGDIのように描画されて、オートシェイプの文字は、GDI+のように描画されることがわかりました。

PictureBoxについて

2009-06-18 20:49:55 | C#
C#PictureBoxというコンポーネントがあります。

主な使用用途として画像や線などを描画します。

これで、どうしてもチラツキがあるなと思ったので、ダブルバッファリングを利用すれば、抑えられるなと思いました。

しかし、MSDNで調べてみると、DoubleBufferedprotectedプロパティなので、アクセスすることができません。

色々と調べると、PictureBoxはデフォルトでDoubleBufferedがTrueになっているので、制御する必要がないことが、Reflectorで、確認するとわかりました。

つまり、チラツキは別のところにあるなということです。

PictureBoxのことが少しだけ理解が深まりました。

PropertyGridについて思うこと

2009-06-15 20:58:43 | C#
今日、初めて、PropertyGridを使用して、VisualStudioプロパティのような画面を作成しました。

最初に、モデルを作成していて、テストコードもできて、後は組み込むだけとなったときに、PropertyGridのSelectedObjectオブジェクトを代入しました。

クラスからクラスを参照している部分も表示されるようになってだんだんと思い通りに表示されました。

しかし、ここで、どうしてもカテゴリの下に変数名が表示されてしまい、本当はカテゴリの下に、使用している変数を表示することがしたかったのにできないことがわかりました。(例:クラスA内に、クラスBがある場合に、クラスAを表示する場合)

これは色々と調べましたが、結局、クラスA内に、クラスBの処理を委譲しました。

コンポーネントの仕様上仕方のないことかもしれませんが、PropertyGridの仕様自体がどうなんだろうと思います。非常に大きなクラスができてしまうなと思いました。

Androidの実機へのインストール方法

2009-06-12 23:58:41 | Android
現状、Android Market以外のアプリがインストールできませんが、自分で作成したAndroidアプリを実機にインストールする方法は、PCとUSB接続を行うことができますので、まずは、接続を行い、ドライバをインストールします。

ドライバの場所は、AndroidSDKの中にUSBDriverというフォルダがあるので、その中から選択を行います。

次に、Eclipse上で、作成したアプリを実行すれば、実機で起動モードがあるので、そのモードで実行すれば、インストールが完了となります。

ただし、設定のアプリケーションの開発のUSB設定を有効にしておく必要があります。

先日のGoogle Developer Day 2009で、実機が配布をされて自分が作成したアプリケーションをインストールしたところ正常に動作しました。

エミュレーター上で起動するよりも実機の方が速度は速いし綺麗に描画されていました。

ちょっと感動しました。

GetFilesについて

2009-06-10 23:11:10 | C#
C#に、System.IO.Directory.GetFiles()という指定したファイルを取得するメソッドがあります。

実はこのメソッド、.NetFramework2.0からサブディレクトリまで検索してくれるのです。
下記のように、System.IO.SearchOption.AllDirectoriesを追記するだけです。

サンプルコードは下記のとおりです。

System.IO.Directory.GetFiles(@"C:\*.xls",System.IO.SearchOption.AllDirectories)

ちょっとしたツールを作成するときに発見して、再帰処理で検索しなくてはならないなと思っているときに、発見しました。

ビルドアクションについて

2009-06-08 23:03:33 | C#
Visual Studioを使用して、画像ファイルのプロパティを見ると、ビルドアクションというものがあります。

この種類には、なしや埋め込まれたリソースなどがあります。

簡単にいうと、DllやExeに埋め込まれるかそうでないかの違いがあります。

では、なしに設定している場合にも実は埋め込まれる場合があります。

それは、resxというファイルが関連していて、ここにファイルが追加されている場合には、ビルドアクションを「なし」にしなくてはなりません。

コレを「埋め込まれたリソース」にしてしまうと、2重登録されることになります。

つまり、resxに追加した場合には、「なし」で、そうでない場合には「埋め込まれたリソース」にする必要があります。

まずは自分を反省

2009-06-03 21:32:52 | プログラミング
あるバグフィックスをしていると、こうなっているだろうと思い、修正しても全く反映されていませんでした。

なぜか原因を調べてみると、そこの処理と全く同じ処理が別クラスであったので、今回、テストしていて確認しているところでは全く反映がされていないことがわかりました。

そもそもその重複するコードは全く不要であり、リファクタリングの対象になりますが、テストコードが無いこと・テスト期間があまりに短すぎるので、今回その部分のリファクタリングはやめました。

せめてテストコードがあればなんとかなりますが、そうではないので、泣く泣く撤退といった感じです。

最近はあまり重複するコードを見なくなっていたので、最初に見たときにはなんだコレと思いましたが、自分の指導不足もあるなと思い、自ら反省した事例です。

PowerPointで動画を使用するときに注意

2009-06-01 21:13:15 | ビジネス
あまり、使用する機会はないと思いますが、最近PowerPointで動画を使用する際には注意をしなくてはならないと思いました。

それは、PowerPointに動画を挿入すると、その動画ファイルはあくまでも参照しているだけなので、動画ファイルのフォルダの位置を変更したり、削除したりすると再生できなくなります。

これには、ビックリしました。たまたま前日に練習のために再生してみたら、再生できませんと表示されてしまい、原因を探ったら、参照しているだけだということがわかり、プレゼンとして使用するパソコン上で、動画ファイルを貼り付けなおしました。

ファイルサイズが大きくなってしまうので、参照にしてあると思いますが、もう少し画像のサムネイルを表示するものを工夫して、ファイルがありませんなどとしてくれると非常にありがたいと思います。

PowerPointで動画を使用するときには、ファイルを参照していることに気をつけて下さい。