追記


2008-11-14

自戒

  • ツールに溺れるな。ツールの導入が目的じゃなかったはずだ。高度な統合と自動化をめざすより、メッセで会話しろ。
  • テストを重視しすぎるな。仕様という名のテストを書くことが目的じゃなかったはずだ。テストより大事なのは動作するソフトウェアだ。
  • 要望を見落とすな。受け入れテストに載ってないからといって、ユーザがそれを望んでいないわけじゃない。盾に使うのは最後の手段だ。
  • 優先度の高い割り込みタスクを先にやれ。チケットの期限を守ることが、いつもユーザの利益につながるわけじゃない。変化を抱擁せよ。

2008-10-24

[TestNG] JDK1.4

TestNGの現時点の最新のリリースは5.8だけど、このバージョンだとJDK1.4環境でテストが実行できない。これはIssue25で指摘されているとおり、Java5から追加されているメソッド(String#contains)がorg.testng.reporters.XMLStringBufferで使用されているから。

trunkですでに修正されている(r629)のだけど、現時点では最新のソースをビルドしても他の部分でひっかかってうまく動かなかったので、XMLStringBufferのクラスファイルだけ5.8の中のものと置き換えて、とりあえず対処した。

ちなみに最新のリビジョンでひっかかるのは、org.testng.reporters.EmailableReporterで、こちらもJava5から導入されたStringBuilderが使用されているから。報告上げたほうが良いのかしら。

[Java] javadocの@version

JavaSEのAPIドキュメントは、せっかく真面目に@versionを書いてあるんだから、これとビルド時のターゲットの指定を比較してチェックするツールとかあると便利そうだ。すでにあるかしら?


2008-10-17

[Ant][Java][TestNG] TestNGの実行結果をメールする

AntでTestNGタスクを利用してテストを自動実行したら、その結果はメールで送るようにしておくと、メーラー上でテスト履歴が一覧できるようになって便利。 TestNGのレポートの出力には、「emailable-report.html」という、メールで読みやすいように整形されたHTMLが含まれているので、これを使用する。

 <!-- antcallでの呼び出し専用target -->
 <target name="test" if="initialized" depends="prepare" description="テストを実行し、テスト結果をメール送信します。">
     <!-- TestNG -->
     <testng classpathref="run.classpath" dumpcommand="true" verbose="3" outputdir="result/${module.name}" sourcedir="src" failureproperty="failed">
       <classpath>
         <pathelement path="${module.path}" />
         <pathelement location="bin" />
       </classpath>
       <xmlfileset dir="." includes="${module.test}" />
     </testng>
  
     <!-- 失敗したらメールサブジェクトに「FAILED!」を入れる -->
     <condition property="subject" value="TestNG - ${ant.project.name} with ${module.name} Module (${os.name}/${os.arch})  - FAILED!!">
       <isset property="failed" />
     </condition>
     <condition property="subject" value="TestNG - ${ant.project.name} with ${module.name} Module (${os.name}/${os.arch})">
       <not><isset property="failed" /></not>
     </condition>
 
     <!-- メール送信 -->
     <mail mailhost="${mailhost}" from="${mail0}" tolist="${mail1}" subject="${subject}" encoding="plain">
       <message src="result/${module.name}/emailable-report.html" mimetype="text/html" />
     </mail>
 </target>

2008-10-16

[Ant][Java] cobertura-reportの文字化け

Cobertura1.9のAnt用タスク「cobertura-report」は、ソースファイルがUTF-8であることを前提にしているので、Windows環境でShift_JISなんかで書いてたりするとレポートが文字化けする。

ぐぐってみると、日本語対応パッチを書いてらっしゃる方も見つかるのだが(1/2)、ソースがそんなに多くないならUTF-8で一時的にコピーを作っちゃうと楽。Ant1.6以上ならcopyタスクでoutputencodingを指定できる。

<copy todir="${utf8src}" encoding="Shift_JIS" outputencoding="UTF-8">
  <fileset dir="${src}">
    <include name="**/*.java" />
  </fileset>
</copy>
<cobertura-report format="html" destdir="${coverage}" srcdir="${utf8src}" />

2008-08-29

[BDD] 揮発性

昼飯を食べながら、「揮発性BDD」というのを妄想してみた。

  • リリースと同時に消えてしまう儚いSpec/Story。(ツールがxUnitとかなら、消えるのはTestという名の仕様)。
  • テストデータの可搬性とかは、BDD中は一切無視。自分とこで動けば充分。定数埋め込みでオッケー。データ重複おかまいなし。どうせ消えちゃうんだから。

そのかわり、

  • Spec/Storyは消えちゃうので、リリース後もちゃんとメンテナンスを続けるつもりがあるなら、リリースまでにテストを書き起こさなければならない。
  • このテストは回帰テストとして後の開発で使用されることを念頭に、きちんと設計する。シンプルかつ充分なテストデータを用意する。ドキュメント化する仕様はドキュメント化する(これはBDDツールからの出力でもいいかも)。

これは、

  • BDD中にテストデータの使いまわしとか卑しいことを考えて、フットワークが落ちるのを防止する。
  • 天変地異かよってぐらいの仕様変更が起こったときに、無駄になるものを最小限に抑える。

という効果が期待できると思うのだけど、どうかしら。


2008-06-26

結合テスト

当たり前だけど、真面目にユニットテストをやるほうが、モジュールの信頼性は上がるし、結合してから問題は起きにくい。 結合してからのテストが、真面目にユニットテストをやらない場合よりも圧倒的に楽になる。

逆に言えば、真面目にユニットテストをやらないほうが、結合テストを真面目にやる傾向がある気がする。

これは、GUIのユーザビリティなんかに結構影響があって、何べんも結合テストで使っているうちに見えてくる問題点もあるんだよなぁと思う。 いってみればドッグフードを食べてる状態で、リリースまでに改善できる部分がより多くなるんではないか。


2008-06-23

[Java][Squeak] Javaで5000行以下のSqueakインタプリタ

JSqueak Weekly Squeakの記事「JSqueak - Smalltalk interpreter written in Java」経由で、JSqueak。実は2006年ぐらいからあったらしい(=>大島芳樹のカリフォルニア日記 - DanのSqueak on Java )。

ちょっとだけ触ってみたけど、これが5000行以下のコードで動くってのはすごいと思った。Java Web Startで、ブラウザからクリック一発で試せるのもうれしい。

今は冗談抜きで忙しすぎるので、落ち着いたらちゃんとコードを読んでみよう。


2008-05-22

[Wiki][VB] エクセルのワークシートのコンテキストメニューをリセット

画像の説明

PukiWiki向けのExcelアドイン「Wikiサポートアドイン」を、以前から便利に使わせていただいていたのだけど、使ってるうちにだんだんコンテキストメニューがなんだかすごいことになってきました。Officeはいまだに2003。

VB分からんしなーと思ってほっといてたんですが、ちと増えすぎたんで検索。「ワークシート上での右クリックメニューを初期化するには」を参考に、リセットしました。

  1. Excelで「ツール>マクロ>Visual Basic Editor」
  2. VBEで「表示>イミディエイトウィンドウ」
  3. イミディエイトウィンドウに以下を入力してEnter。
Application.CommandBars("Cell").Reset

これでキレイになりました。

画像の説明


2008-04-25

ついったー

日本語版が出来たと聞いたので、アカウントを作ってみました。

使い分け

  • ここは基本的に技術系のネタのみ
  • mixiはプライベート中心
  • tumblrは公開可能な範囲のメモ
  • はてブ、del.icio.usは非公開のブックマーク用
  • twitterは?

2008-04-21

[Java] Vistaでのテンポラリファイル作成

以下のプログラムを、Vista上で管理者権限のないユーザで実行すると、(3)のときだけ失敗した。

import java.io.File;

public class Tekito {

    public static void main(String [] args) {
        // (1)
        createTempFile(new File("."));
        // (2)
        createTempFile(new File(System.getProperty("user.dir")));
        // (3)
        createTempFile(new File(""));
    }

    private static void createTempFile(File parent) {
        System.out.println(parent.getAbsolutePath());
        try {
            File.createTempFile("hoge", "fuga", parent);
            System.out.println("成功");
        } catch (Exception ex) {
            System.out.println("失敗");
            ex.printStackTrace();
        }
    }
}
C:\Users\die\workspace\tekito\.
成功
C:\Users\die\workspace\tekito
成功
C:\Users\die\workspace\tekito
失敗
java.io.IOException: アクセスが拒否されました。
    at java.io.WinNTFileSystem.createFileExclusively(Native Method)
    at java.io.File.checkAndCreate(File.java:1704)
    at java.io.File.createTempFile(File.java:1793)
    at Tekito.createTempFile(Tekito.java:14)
    at Tekito.main(Tekito.java:8)

管理者として実行すれば全部成功する(XPだと、管理者じゃなくても成功する)。ワケがわかんないです。なんでだろう。

[Java] なんとなく

わかった気がする。

  • new File("").getAbsolutePath() はカレントディレクトリを返す
  • でも、それをFile.createTempFileの引数に渡しても、テンポラリファイルはカレントディレクトリではなく、ドライブのルート(c:\とか)に作成される(XPでもVistaでも)
  • その場所に書き込み権限がないとエラー

ということかな。


追記

2006|07|08|09|10|11|12|
2007|01|02|03|05|06|07|08|10|11|12|
2008|01|02|03|04|05|06|08|10|11|

.NET | AIR | AOP | Ant | BDD | COBOL | CentOS | Java | Lisp | Logo | Mac | OCaml | OpenSource | Oracle | PC | PDF | PHP | Perl | PostScript | Redmine | Ruby | SNS | Scheme | Smalltalk | Spring | Squeak | Subversion | TechEd | TestNG | Trac | UML | VB | WSH | Wiki | XML | XPS | mobile | tDiary