JCUnitでいかにして制約処理(禁則処理)を行っているか?結局のところ、以下の実装がその本質である。 jcunit/IpoGplus.java at 0.8.x-develop · dakusui/jcunit · GitHub 組み合わせテストにおいて、テストスイートの生成と制約処理は同時並行で行わなくては…
Constraint Handlingについてだが、率直にいう。0.7.xの制約処理(禁則処理)はたぶん、バグだらけだ。 JCUnitで制約を取り扱う必要があるなら、0.8.xを使って欲しい。 どちらもIPO-G系のアルゴリズムに制約処理を埋め込んだもので、制約に違反するタプルが…
ICST 2017で発表や大学院進学(社会人博士課程)等色々あったのだが、こちらのブログではなんにも報告していなかった。 その一方、アクセスログを見るとゴールデンウィーク後、それなりの数のアクセスを頂いているようだ。 このブログは開発記録として運営し…
githubにあるPICTレポジトリで報告されているが、PICTには以下のモデルからのテストスイート生成が終わらないという問題がある。 Eingangskanal: EVA_Anlageberatung, EVA_Order, EVA_Sonderweg, EVA_Sparplan, EVA_Neuemission, EVA_Direkteinstieg, HOST_T…
表題の通りです。スケジュールはこちら。 ICST 2017 | Schedule 東京で開催されるカンファレンスなのに、日本人の発表者があまり見当たらないのは残念なことです。 2/13まではEarly Birdで少しだけお安くお申し込みできます。 ICST 2017 | Registration キー…
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…
はじめに 本ブログでご案内しているように、javacのバグによりJDK1.7.0_79以前でコンパイルエラーが生じることがわかった。 この問題を回避するために、jcunit 0.6.4をリリースしたので、pom.xmlを以下のように更新して欲しい。 <dependency> <groupId>com.github.dakusui</groupId> <artifactId>jcunit</artifactId> <version></version></dependency>…
前回のポストで報告したように、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_80より古いjavacを使っている場合、JCUnit及びそれを使用したライブラリのコンパイルができないことが判明した。ちなみにこれはjavacのバグだ。 これは、確認している限り、JDK 1.6.0_45では起きないし、手元のJDK 8系統でも起きたことがない。 詳…
はじめに 本稿執筆中に、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>
さて、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の使い方を解説するために簡単なプログラムをテストしてみたいと思う。 例題としてQuadraticEquationSolver(2次方程式ソルバー)を取り上げる。a,b,cの三つの入力をとり、これらを係数とする2次方程式を解の公式を使って解く他愛も…
長い道のりであったが、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>
JCUnit 0.6.0 alphaをリリースしてみた。 今回の主要な変更は以下の通り。 カバレッジレポーティング機能 FSM(有限状態機械)の入力履歴検査機能 (InteractionHistory) リファクタリング 各種プラグインの構造改善 リクエストのあった生成されたテストスイ…
Xegerというライブラリがある。 ある正規表現にマッチするような文字列を乱数によって生成してくれるものだ。 これは面白い。 xeger - A Java library for generating random text from regular expressions - Google Project Hosting ただプログラム中の正…
Theoriesランナーについて先日、私自身は使っていないことを書いたのだが、自分で作ってみると興味が出てくるものだ。 Haskellでいうquickcheckが念頭にあると、なんでこういう仕様でこういうものを作ろうとしたのかが分かる。ようだ。 quickcheckというのは…
コードのある場所で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がクラス化された生成子なら、それは本来メソッドの中で使い捨てにされるものだろう。 ならば、フィールドをprivateにする必要はあるのだろうか? メソッド間、クラス間で本当に受け渡ししないならばprivateでもpublicでもいいのだが、受け渡しをする…
@Suiteのついたテストクラスはまとめていろんなクラスにあるテストを実行する。このいろんなクラスというのはSuiteの「子」としてJUnitに扱われる。 @Suiteとアノテーションがつけられたクラスの中のあるメソッドをIntelliJのテスト結果画面から選択すると、…
これは、、、使えるぞ。
皆さん、JUnitのTheories runnerは使っていますか? 僕は使っていません。 可能な値の組み合わせをすべて<直積>でテストしようとするのでテストケース数が爆発してしまうのと、 一つのテストメソッドに対してそれらの組み合わせを一つのテストケースとして…
なんとかかんとか、0.5.5をリリースした。 発端は uehaj.hatenablog.com JCUnitが持っているプリミティブ用のデフォルト値を外部から取りやすいようにするというだけのことだったのだが、プラグインのインタフェースがあんまりよろしくないから変えないと、…
今回の話はレポートで組み合わせとか順列の列挙をするプログラムを作る課題をやってる学生さんには面白い話かもしれない。 JCUnitは内部的にcombinatoradix(旧称enumerator)と呼ばれる私が作ったライブラリを使っている。 github.com JCUnitは性質上、かなり…
こちらのエントリでご紹介いただいたときに「デフォルトで設定されている各型ごとの水準一覧を取る手段がない」という指摘も頂いた。 uehaj.hatenablog.com それ自体は、なんとかなりそうで、難しいものでもないのでこんなチケットを作った。 github.com で…
ダメだコイツ。解体しないと。 つうかLevelsProviderのインタフェース自体を見直さないと。
IPOはテストケース(Tuple)内の因子(Factor)の水準(Level)を一個ずつ、すべての可能な組み合わせが網羅するように決めていくアルゴリズム。生成されるテストスイートは縦方向(テストケース数)と横方向(因子数)を必要に応じて交互に増加させながら成長して…
TupleGeneratorを直接取り扱いたい人々が一定数いるように見受けられるので、そのためのクラスやメソッドを整理してみた。 TupleGenerator tg = new TupleGenerator.Builder().setFactors( new Factors.Builder() .add("OS", "Windows", "Linux") .add("Brow…
(早速機能拡張をしてるので、10/5現在の最新版は0.5.4です。 JCUnit 0.5.4リリース。 - jcunit's blog )今回の目玉は何といってもFSM(有限状態機械)のサポートだ。github.com ユーザがSUT(テスト対象ソフトウェア)を有限状態機械としてモデルすると、pai…
MVCで言うならVのようなソフトウェアのプレゼンテーションとかUIとかを担う層とも言える。 モデルとビューを分離するのはビューへの変更は頻繁に起こることから来ていて、そしてそれはユーザの選好に大きく依存するからなわけだ。するとアノテーションの体系…
前回のポストからずいぶん時間が経ってしまった。 FSMサポートについてのこれまでの設計を見直したいと思ったのと、他のことに興味を奪われていたためだ。間は開いてしまったもののもうすぐ前回の続きを書けると思う。