jcunit's blog

JCUnitの開発日誌(ログ)です。"その時点での"JCUnit作者の理解や考え、開発状況を日本語で書きます。

IEEE International Conference on Software Testing 2017でJCUnitの発表をすることになりました。

表題の通りです。スケジュールはこちら。 ICST 2017 | Schedule 東京で開催されるカンファレンスなのに、日本人の発表者があまり見当たらないのは残念なことです。 2/13まではEarly Birdで少しだけお安くお申し込みできます。 ICST 2017 | Registration キー…

A new IPO-G based algorithm that supports constraint handling

Background A couple of weeks ago, when I was writing a jcunit demo that tests geophile[0] library, I noticed that its old constraint handling doesn't work well. Since the behavior looked hard to fix without hurting compatibility and it wou…

(第四回)JCUnitで2次方程式を解くプログラムをテストする。

はじめに 本ブログでご案内しているように、javacのバグによりJDK1.7.0_79以前でコンパイルエラーが生じることがわかった。 この問題を回避するために、jcunit 0.6.4をリリースしたので、pom.xmlを以下のように更新して欲しい。 <dependency> <groupId>com.github.dakusui</groupId> <artifactId>jcunit</artifactId> <version></version></dependency>…

0.6.4リリース

前回のポストで報告したように、JUCnit 0.6.3やそれを使ったアプリケーションはJDK 1.7.0_79ではコンパイルできない。 2016-04-05 - jcunit's blog これはJDK 1.7.0_80で修正されたjavacの以下のバグが原因だ。 http://bugs.java.com/view_bug.do?bug_id=801…

JDK 1.7.0_79以前でコンパイルできない。

JDK 1.7.0_80より古いjavacを使っている場合、JCUnit及びそれを使用したライブラリのコンパイルができないことが判明した。ちなみにこれはjavacのバグだ。 これは、確認している限り、JDK 1.6.0_45では起きないし、手元のJDK 8系統でも起きたことがない。 詳…

(第三回)JCUnitで2次方程式を解くプログラムをテストする。

はじめに 本稿執筆中に、JCUnit 0.6.0にバグがあることとユーザビリティを向上する必要があることがわかり、0.6.2をリリースした。 本稿を試すにあたっては以下のようにpom.xmlを更新して欲しい。 <dependencies> <dependency> <groupId>com.github.dakusui</groupId> <artifactId>jcunit</artifactId> <version>[0.6.2,)</version> <scope>test</scope> </dependency> <dependency> <groupId>junit</groupid></dependency></dependencies>

(第ニ回)JCUnitで2次方程式を解くプログラムをテストする。

さて、39件も失敗した前回のテストだが、どのテストがどのように失敗しているかつぶさに見ていこう。 失敗するテストは以下の通り。 { 1, 3, 4, 6, 7, 8, 9, 10,11,12,13,14,15,17,18,19, 24,25,26,27,28, 30,31,32,33,34,35,36,37,38, 40,41,42,43,45,46,…

(第一回)JCUnitで2次方程式を解くプログラムをテストする。

今回からしばらく、JCUnitの使い方を解説するために簡単なプログラムをテストしてみたいと思う。 例題としてQuadraticEquationSolver(2次方程式ソルバー)を取り上げる。a,b,cの三つの入力をとり、これらを係数とする2次方程式を解の公式を使って解く他愛も…

0.6.0リリース。

長い道のりであったが、0.6.0をリリースした。 Maven coordinateは以下のとおり。 <dependency> <groupId>com.github.dakusui</groupId> <artifactId>jcunit</artifactId> <version>[0.6.0,)</version> <scope>test</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test<…</scope></dependency>

0.6.0-alpha

JCUnit 0.6.0 alphaをリリースしてみた。 今回の主要な変更は以下の通り。 カバレッジレポーティング機能 FSM(有限状態機械)の入力履歴検査機能 (InteractionHistory) リファクタリング 各種プラグインの構造改善 リクエストのあった生成されたテストスイ…

Xeger

Xegerというライブラリがある。 ある正規表現にマッチするような文字列を乱数によって生成してくれるものだ。 これは面白い。 xeger - A Java library for generating random text from regular expressions - Google Project Hosting ただプログラム中の正…

Theoriesについて

Theoriesランナーについて先日、私自身は使っていないことを書いたのだが、自分で作ってみると興味が出てくるものだ。 Haskellでいうquickcheckが念頭にあると、なんでこういう仕様でこういうものを作ろうとしたのかが分かる。ようだ。 quickcheckというのは…

Mapの変更

コードのある場所でTreeMapをLinkedHashMapに変えてみた。 すると、 benchmark1_3$4 :(testcases, remainders, time(sec))=( 9, 0, 0.0) benchmark2_3$13 :(testcases, remainders, time(sec))=( 24, 0, 0.03) benchmark3_4$15_3$17_2$20 :(testcases, remai…

Builderのフィールドは全部publicでいいのでは

Builderがクラス化された生成子なら、それは本来メソッドの中で使い捨てにされるものだろう。 ならば、フィールドをprivateにする必要はあるのだろうか? メソッド間、クラス間で本当に受け渡ししないならばprivateでもpublicでもいいのだが、受け渡しをする…

IntelliJはParameterizedテストランナーを特別扱いする

@Suiteのついたテストクラスはまとめていろんなクラスにあるテストを実行する。このいろんなクラスというのはSuiteの「子」としてJUnitに扱われる。 @Suiteとアノテーションがつけられたクラスの中のあるメソッドをIntelliJのテスト結果画面から選択すると、…

FSM/JCUnit+Selenium

これは、、、使えるぞ。

Theories runner

皆さん、JUnitのTheories runnerは使っていますか? 僕は使っていません。 可能な値の組み合わせをすべて<直積>でテストしようとするのでテストケース数が爆発してしまうのと、 一つのテストメソッドに対してそれらの組み合わせを一つのテストケースとして…

0.5.5リリース

なんとかかんとか、0.5.5をリリースした。 発端は uehaj.hatenablog.com JCUnitが持っているプリミティブ用のデフォルト値を外部から取りやすいようにするというだけのことだったのだが、プラグインのインタフェースがあんまりよろしくないから変えないと、…

JCUnitを支える技術、あるいは再帰もループも用いない順列・組み合わせ列挙のアルゴリズム

今回の話はレポートで組み合わせとか順列の列挙をするプログラムを作る課題をやってる学生さんには面白い話かもしれない。 JCUnitは内部的にcombinatoradix(旧称enumerator)と呼ばれる私が作ったライブラリを使っている。 github.com JCUnitは性質上、かなり…

Pluginインタフェースの整理

こちらのエントリでご紹介いただいたときに「デフォルトで設定されている各型ごとの水準一覧を取る手段がない」という指摘も頂いた。 uehaj.hatenablog.com それ自体は、なんとかなりそうで、難しいものでもないのでこんなチケットを作った。 github.com で…

DefaultLevelsProvider

ダメだコイツ。解体しないと。 つうかLevelsProviderのインタフェース自体を見直さないと。

ConstraintManagerとIPO2TupleGenerator

IPOはテストケース(Tuple)内の因子(Factor)の水準(Level)を一個ずつ、すべての可能な組み合わせが網羅するように決めていくアルゴリズム。生成されるテストスイートは縦方向(テストケース数)と横方向(因子数)を必要に応じて交互に増加させながら成長して…

JCUnit 0.5.4リリース。

TupleGeneratorを直接取り扱いたい人々が一定数いるように見受けられるので、そのためのクラスやメソッドを整理してみた。 TupleGenerator tg = new TupleGenerator.Builder().setFactors( new Factors.Builder() .add("OS", "Windows", "Linux") .add("Brow…

JCUnit 0.5.1 リリース(更新)

(早速機能拡張をしてるので、10/5現在の最新版は0.5.4です。 JCUnit 0.5.4リリース。 - jcunit's blog )今回の目玉は何といってもFSM(有限状態機械)のサポートだ。github.com ユーザがSUT(テスト対象ソフトウェア)を有限状態機械としてモデルすると、pai…

思うにAnnotationは

MVCで言うならVのようなソフトウェアのプレゼンテーションとかUIとかを担う層とも言える。 モデルとビューを分離するのはビューへの変更は頻繁に起こることから来ていて、そしてそれはユーザの選好に大きく依存するからなわけだ。するとアノテーションの体系…

再始動

前回のポストからずいぶん時間が経ってしまった。 FSMサポートについてのこれまでの設計を見直したいと思ったのと、他のことに興味を奪われていたためだ。間は開いてしまったもののもうすぐ前回の続きを書けると思う。

JCUnitによる有限状態機械のテスト - 有限状態機械テストの方法(その3)

考えてみれば、ソフトウェアシステムというのは有限状態機械であり、ソフトウェアシステムの仕様を決めるとはその有限状態機械の仕様を決めることに他ならない。と、いうことは有限状態機械の仕様からテストを自動的に生成して、それを自動的に実施できるな…

JCUnitによる有限状態機械のテスト - 有限状態機械テストの方法(その2)

さて昨日に引き続き、JCUnitによる有限状態機械のテストの書き方について。 テストメソッドの宣言 これはどうということもなくて public FlyingSpaghettiMonster sut = new FlyingSpaghettiMonster(); @Test public void test() throws Throwable { FSMUtils…

JCUnitによる有限状態機械のテスト - 有限状態機械テストの方法(その1)

はじめに かれこれ三カ月くらい頑張って、有限状態機械(以下、FSM)をJCUnitを使ってテストする機能を作ってみた。 今回はひとまず0.4.20としてリリースした。MavenのCoordinateは以下のとおり。 <dependency> <groupId>com.github.dakusui</groupId> <artifactId>jcunit</artifactId> <version>0.4.20</version> </dependency> テストは十分ではない…

テストケースの内容に応じてテストメソッドの実行を制御する方法。

JCUnitのように、テストケースの集合を自動で生成する仕組みを作ったのに、確認すべき内容や実行すべきシナリオがテストケースの内容によって違う場合、それらの確認内容を振り分けるロジックをユーザにif文でちまちま書かせるのはいささかだせえ。そこで、…

0.4.12リリース。

今朝、JCUnit 0.4.12をリリースした。 Maven coordinateは以下のとおり。 <dependency> <groupId>com.github.dakusui</groupId> <artifactId>jcunit</artifactId> <version>0.4.12</version> </dependency> 0.4.10->0.4.12での今回の変更点は、 テスト実行条件を指定するためのアノテーション@Givenを、@Whenへと改名。 SimpleTupleGenerator (単体テス…

JCUnitのリファイン(0.3.0)リリース

JCUnitの設計をリファインし、機能を根本的なものに限った0.3.0をリリースした。 今回は「制約」を取り扱うための機能を実装した。 また、Annotationの役割・用語を整理した。 MavenのCoordinateは以下のとおり。 <dependency> <groupId>com.github.dakusui</groupId> <artifactId>jcunit</artifactId> <version>[0.3.0,]</version> </dependency> 以前…

「制約」の実装。

「制約」機能実装のために、"Combinatorial TestCases with Constraints"*1と"Constructing Interaction Test Suites for Highly-Configurable Systems in the Presence of Constraints: A Greedy Approach"*2から辿って"Interaction Testing of Highly-Conf…

JCUnitに必要なもの。

この三連休は、文献[1][2]を読んだりのんびり散歩していたりしたのだが、PICTの完成度をまずは目指さないとなとの思いを新たにした。 PICTに比較してJCUnitに欠けているものはおおよそ以下の機能だろう。 「制約(constraints)」機能 因子の階層 Negative tes…

PICTや他のシステムとの比較

PICTというMicrosoftの製品があることをJaSSTで知り合った方から教えていただいた。 PICTについては以下で詳しく述べられているのだが、http://msdn.microsoft.com/en-us/library/cc150619.aspx世間で出回っている様々な製品が与えられた条件に対して、何件…

てごろなSUT(Software Under Test)ないかな。

いままで、dog foodingというか、JCUnitの使い勝手を確認するためにthumbnailatorを対象にテストを実装してきた。 これまでの成果は逐次ブログのエントリにまとめて、ここで報告していこうと思う。が、そろそろ別のプロダクトを対象にテストを書いて、応用例…

JCUnitの名前の由来

JCUnitの名前の由来 大した話では無いのだけれど、今日はJCUnitの名前の由来など。 数学で使う組み合わせ記号nCkになぞらえて、JUnitで自動的にいろんな組み合わせをテストしてくれるという意味で、JCUnitとつけました。 そんなわけでトップに掲げているロゴ…

いわゆる禁則処理。

「パラメタ不正や禁則に違反する入力を組み合わせ試験に用いると、組み合わせ網羅率の低下につながる。」 というのは、特にHAYST法関連の書籍や研究でよく見かける主張だ。ここでいう禁則処理とは、句読点や記号を行頭に置かないために行末にぶら下げる処理…