【ソフトウェアテスト】xUnit と Spec系の比較

テスティングフレームワークについてググっていたら、どうやら2系統にわかれるっぽい。

xUnit

SUnit(Smalltalk) に始まり、JUnit(Java)、GoogleTest(C++)、HUnit(Haskell), ScalaTest(Scala), ExUnt(Elixir) など。

自分は今までこちらしか使ったことがなかった。

Spec系 

RSpec(Ruby), JGiven(Java), Igloo(C++) , HSpec(Haskell), Spec2(Scala) ,ESpec(Elixir)など。

テストケースの記述にフォーマットが決まっている。given/when/then 

 

どちらを選ぶ?

メジャーな言語は両方の系統を持っていることも多い。Spec系のほうが後から作られただけあって、下記のメリットがありそう。

  1. BDDのツールなので、ユーザ視点で表現する。プログラマ以外の人と仕様をすり合わせしやすい。
  2. 決まり切ったコード(Boilerplate code)を減らせる

とはいえ。システムテスト・受入テストについていえば1のメリットはありそうだが、単体テスト結合テストは開発者が行うテストなので、あまり関係ないかも。

2についていえば、概ね一般論として xUnit より有利、と言えるかもしれないが、実際には各ツールの出来に依存するのではないか?

なので、出来れば両方使ってみて使いやすいほうを使う、というのが正解な気がする。

【ToDo】ソフトウェアテストの例題

組み合わせテストの例題

として、牛丼のメニューを考える。

  • 牛丼 | 豚丼
  • 頭の大盛り| 並み
  • ご飯の大盛り | 並み
  • つゆだく|つゆ抜き
  • 味噌汁|豚汁
  • オプション:て生卵あり | なし
  • サイドオーダーとしてのサラダ:ごぼうサラダ | ポテトサラダ | コールスロー
  • ドレッシングの種類: ごま | 醤油

 

デシジョンテーブルを作成する。その後、直行表やペアワイズ法でテストケースを削減する。

洗い出したテストケースをもとに、BDDのspecをかく。

 

ペアワイズ法のツール

ja.osdn.net

qiita.com

replication.hatenablog.com

2018年01月07日のツイート

【関数型言語】Haskell のテストツール

stack を使ってプロジェクトを作成すると、それだけで test ディレクトリが作成され、stack test するとテストが実行できる。いったい何をどうテストしているのか?

stack new hello

stack build

stack test

 また、haskell で使えるテストツールとして

  • HSpec
  • HUnit
  • QuickCheck

HSpec は BDD なツール、HUnit はユニットテスト用、QuickCheck はテストデータ・テストケースまで自動生成してくれるらしい(@_@)

これから使い方を調べて使ってみる予定。

インストールの仕方だが、stack の設定ファイル1行追加するだけでよいらしい。

hajimete-program.com

記事通りに、hello.cabel の buld-depends に hspec の1行を追加し、

build-depends:

    base >=4.7 && <5

,   hspec

 stack test を実行したところ、いろいろ必要なものを自動的にダウンロードし、自動的にテストの実行まで無事に完了した。ダウンロード中のメッセージから、HUnit と QuickCheck もちゃんとダウンロードされていることを確認できた。

 とりあえず、下記の記事を真似て、動かしてみる。

qiita.com

stack index

2018年01月06日のツイート

【関数型言語】処理速度とメモリ使用量

処理速度

qiita.com

超大作。途中に各言語のベンチマークがある。

メモリ使用量

個人的には、「データが全て不変(immutable)って、無茶無茶メモリを食うんじゃ?!」と思ったので、実際のところどうなのか知りたかった。

だが。

関数型言語に関する記述・データが見つからない。

参考

atmarksharp.v01.jp

関数型言語でもJavapython などと同様に、データが不要になったらガベージコレクションされる」というのはわかった。ただ、前述のように、「変数を変更するたびに新しい変数を作る」ことが、ほかの言語と比較してどのくらいメモリを使うのか、しりたいところだ。

2018年01月05日のツイート