Mockツール

先日は未踏ユースについて触れたが、今日は未踏について。2006年度の「機械猫Mocker」だ。アイデアが面白そうだったので、少し注目していた。テストケースから、そのテストを通るクラスを作成してくれるという。どのような理論的裏づけがあるかを含め、興味があった。

バージョン0.9を使った時は、バグが多く実用できるレベルではなかった(その感想は、作者氏のblogにも書かせていただいている)。文句だけ言って、フィードバックをしないのも失礼かと思い、また、1.1aがリリースされたとのアナウンスがあったので、再度使用してみた。


結論から言うと、「実用レベルに達していない」という感想は変わらなかった。というより、失礼ながらツールとして公開できる品質、そして未踏の成果として公表するレベルには達していない。
作者氏言うところの「心臓部」であるインタプリタがまともな実装でない。言語処理系が最低限まともなレベルであるかを確認するには、ぶら下がり文や、演算子の優先順位を試してみるとある程度わかる。
例えば、以下のテストケースを動かしてみる。
(実際に意味があるテストケースではない。あくまでツールとしての仕様を確認するテストである)

//ケース1
package sample;
import junit.framework.TestCase;

public class CalcTest extends TestCase {
	Calc calc;

	protected void setUp() throws Exception {
		super.setUp();
		calc = new Calc();
	}

	public void testAdd(){
		calc = new Calc();
		int x = 10,y = 20,z = 30;
		// 演算子の優先順位確認。xyz=8となるはず。
		int xyz = x & y * z;
		calc.set("+");
		assertEquals(xyz,calc.add(4,4));
	}
}
//ケース2
package sample;
import junit.framework.TestCase;

public class CalcTest extends TestCase {
	Calc calc;

	protected void setUp() throws Exception {
		super.setUp();
		calc = new Calc();
	}

	public void testIncrement() {
		calc = new Calc();
		calc.setIncrement(1, 0);

		boolean flag = true;
		//ifとforのぶら下がり文。
		if (flag)
			for (int i = 0; i < 3; i++)
				assertEquals(i, calc.next());

	}
}
//ケース3
package sample;
import junit.framework.TestCase;

public class CalcTest extends TestCase {
	Calc calc;

	protected void setUp() throws Exception {
		super.setUp();
		calc = new Calc();
	}

	public void testIsEven() {
		calc = new Calc();

		for (int i = 0; i < 10; i++) {
			//少し意地悪して、3項演算子。
			boolean isEven = i % 2 == 0 ? true : false;
			assertEquals(isEven, calc.isEven(i));
		}

	}
}


結果は、実行時エラーが出たり、テストケースを通るコードが出力されなかったりと、全滅である。
しかも、1番目のケースについては、 x & y * z の処理結果を10と認識してしまっているようだ。(x & y) * zと演算順序を誤ってしまい、結果が0としてしまっているのならまだしも(もちろん、その場合もエラーであることには間違いないが)、10という結果はどうやったって出てこない。デバッガで確認してみたところ、なんとそもそも&を演算子として認識していないようだ。


ちなみに、構文解析のコードも非常に不正確。途中でコードを追いかけることをあきらめた。字句解析と構文解析を自前でやろうとしているようだ。しかし、SmallInterpriter(Smallの意味は不明)というクラスが、JavaBNFとどう対応するかがまったくわからない。構文木すら作ることなく、行き当たりばったり、コードをつぎはぎして、何とか動くようにしたとしか見えない。


このツールには、モデル検査のような理論的裏づけがあるわけではないらしい。それはともかく、テストツールであるのにそのツール自身の品質が悪いというのは致命的だ。


千葉 滋PMは、この業界では非常に有名な方であり、直接お会いしたことはないが、個人的にも尊敬している。過去にも、「未踏ソフトウェア創造事業は賞金と思われているが,それは誤解。受託開発でちゃんと納期がある。(税金を使っているのだから)納税者の方々への説明責任がある」とおっしゃっている。(失礼かもしれないが)アカデミックな分野の方としては珍しく、プロジェクトに対する姿勢や責任感が非常に立派な方だと思う。しかしながら、このツールに対するレビューが適切にされていたか、疑問である。

未踏は、アイデアが大事なのはもちろんだが、アイデアだけでは意味がない。難しいとは思うが、関係者の方には頑張ってほしい。

未踏ユース

久々に未踏ユースのページを見てみる。
http://www.ipa.go.jp/jinzai/esp/2006youth/koubokekka.html

未踏ユースは若手中心ということもあって、アイデア勝負的なプロジェクトも多い。ただ、過去にはSoftEtherで有名な登 大遊氏も採択されており、才能あふれる若手が出てきていることも事実だ。
(彼の場合には、未踏ユースに採用される前から有名ではあったが)

見た中では、プログラミングを学べるMMORPGの開発が面白そうだ。開発結果も追いかけてみよっと。

引越し開始

自宅サーバーからはてなへ引越ししました。古い日記は徐々にサルベージする予定です。今までは月1〜2回くらいしか更新していなかったので、これからは週1回くらい更新できるよう努力します。