![画像](http://ymsl.in/shared/images/testing_21.jpg)
ソフトウェア製品の品質は、現在のドキュメントと厳密なテストに特に依存していません。 ソフトウェア開発とテスト全般の問題、特にFitNesse環境の使用に焦点を当てたいと思います。
イントロ
ソフトウェアのテストについて話す場合、ほとんどの場合、かなりの量のコードが作成された後に実行されるテストを意味し、「必要なものを書いたかどうか」を確認する必要があります。
テストでのコードの範囲、テストのタイプおよび期間は多くの要因に依存することは明らかですが、この場合、単体テストと受け入れテストに言及する価値があります。
通常、このコードまたはそのコードを書いた人が単体テストを実行する場合、受け入れテストは通常顧客が実行します。 そして、それはすべて、顧客の要求がどれだけ高いか(そして、重要なことには、彼が受け入れる完成品をどれだけ定性的にテストできるか)に依存します。
そのため、通常、ユニットテストは実行のために自動化されています(1回だけ記述され、自動モードで何度も実行されます)。
また、受け入れテストは通常、手動モードでゆっくり実行され、絶えず変更され、通常、紙に修正されることはほとんどありません。
なぜこれらすべてがテストについて語っているのですか? 作成されたソフトウェア製品の適切に組織化されたテストプロセスは、最終的に修正エラーの費用と時間を節約し、さらに、会社の評判から利益を増やします。
![画像](https://habrastorage.org/getpro/habr/post_images/398/06a/a77/39806aa7700e43c9a2b62ce111031872.jpg)
問題の定義
通常、テストの重要性を説明するとき、ソフトウェア製品のバグを検出する段階に応じて、バグを修正するコストの指数関数的増加のグラフを提供するのが好きです。
![画像](https://habrastorage.org/getpro/habr/post_images/2a2/a0a/c2b/2a2a0ac2b5e27fb510fab0078988a154.png)
しかし、テスト、特に手動のコストが高すぎることも忘れてはなりません。 そのため、実行に4500以上のテストがある場合(平均的なプロジェクトの受け入れテストでは正常です)、そのようなテストの1回の実行に40人日以上が必要になります。 ここで、間違いを見つけたと想像してください。このエラーを修正した後、手動で4500テストを再度実行する必要があります。
![画像](https://habrastorage.org/getpro/habr/post_images/5db/4b2/61a/5db4b261a79fe3d31c3a1c0b4783d4b4.jpg)
手動テストの問題に加えて、ドキュメントを最新の状態に保つことにも問題があります。
要件、ユーザーインターフェイス仕様、テスト仕様、およびそれらの実装のドキュメントの同期を確保する必要があります。
ユーザーインターフェイスの仕様については、ドキュメントがスクリーンショットやデザインスキームから時間の経過とともに解放され、起こりうるエラーに対する耐性を高める傾向があります。 しかし、同時に、そのようなドキュメントは読めなくなり、理解するのが難しくなります。 低レベルのスクリプト(ユースケース)が多すぎるため、保守が困難になります。 最終的に、これらすべてが、ドキュメントを最新の状態に保つための開発者の動機がなくなるという事実につながります。
![画像](https://habrastorage.org/getpro/habr/post_images/890/177/884/8901778844535bb6aea36a4b8a34b261.jpg)
通常、テスト仕様は、ユースケース(スクリプト)の特定の名前、番号、および行を使用してユーザーインターフェイス仕様を完全に複製します。 これらは、ユーザーインターフェイスの仕様よりも具体的かつ具体的です。 しかし、彼らはまだ人々が自分に反映されているものを自由に解釈する可能性を残しています。
開発者と管理者がドキュメントを最新の状態に保つモチベーションを維持することは困難です。
もちろん、理想的なオプションは、ロボットを使用して手動でテストを実行し、ドキュメントに結果を表示することです...
![画像](http://neatorama.cachefly.net/images/2007-09/festo-airic-arm.jpg)
しかし、そのようなスマートなギズモの時代はまだ来ていないので、他の方法を使用する必要があります...
フィットネス紹介
FitNesseを検討することをお勧めします
FitNesseは、主に共同ソフトウェア開発のためのツールです。
FitNesseを使用すると、顧客、テスター、およびプログラマーは、ソフトウェアが何をする必要があるかを学び、ソフトウェアが実際に行うことと自動的に比較できます。 FitNesseでは、顧客の期待と結果を比較できます。
FitNesseはソフトウェアテストツールです。
AcceptanceTests-エントリと予想される終了の単純なテーブルを含むWebページを共同で定義します。 これらのテストを実行し、結果を確認します。
FitNesseはwikiです。
ページを簡単に作成および編集できます。
FIT(「統合テストのフレームワーク」)は、そのテーブルに関連するFixtureCodeを使用して各FitNesseテーブルを実際に処理するコアです。 xUnit環境の拡張としてWard Cunninghamによって設計されました。 最新のプログラミング言語(.Net、Java、Python、Ruby、C ++など)のほとんどをサポートしています。
FIT + Wiki + Webサーバー= FitNesse
![画像](https://habrastorage.org/getpro/habr/post_images/313/e3b/7fe/313e3b7feb37a7f35004e27d85cd519a.gif)
FITに加えて、今日、SLIMテクノロジーのサポートがあります。これについては、製品のWebサイトで詳細に確認できます。
![画像](http://fitnesse.org/files/images/fitnesse_architecture.jpg)
フィクスチャコードがどのように見えるか、テスト用のテーブル、環境の結果の例を与えることができます。
例
C#で特定のアプリケーションをテストするためのフィクスチャコードの例を次に示します。
using System;
using System.Collections. Generic ;
using System.Text;
using Ranorex;
namespace NetFit
{
public class AddVIPTest : fit.ColumnFixture
{
///
/// UI Repository instance for VIP Application
///
private VIPRepo repo = VIPRepo.Instance;
private string gender;
private string lastName;
private string firstName;
///
/// Property for FirstName parameter.
/// By setting the property Ranorex directly clicks
/// the text box and simulates the keyboard events
/// Returns the current text value of the text box.
///
public string FirstName
{
set
{
this .firstName = value ;
repo.VIPApplication.FirstName.Click();
Ranorex.Keyboard.Press(firstName);
}
get
{
return repo.VIPApplication.FirstName.TextValue;
}
}
///
/// Property for FirstName parameter.
/// By setting the property Ranorex directly clicks
/// the text box and simulates the keyboard events
/// Returns the current text value of the text box.
///
public string LastName
{
set
{
this .lastName = value ;
repo.VIPApplication.LastName.Click();
Ranorex.Keyboard.Press(lastName);
}
get
{
return repo.VIPApplication.LastName.TextValue;
}
}
///
/// Property for Gender parameter.
/// Depending on the given value Ranorex selects
/// the right radio button.
/// Returns the currently selected gender
///
public string Gender
{
set
{
gender = value ;
if (gender.Equals( "Female" ))
repo.VIPApplication.Gender.Female.Click();
else if (gender.Equals( "Male" ))
repo.VIPApplication.Gender.Male.Click();
}
get
{
if (repo.VIPApplication.Gender.Female.Checked)
return "Female" ;
else
return "Male" ;
}
}
/// Method is used to simulate a click on
/// specified button.
///
///
/// Specifies the label of the button to press
///
public void Action( string button)
{
repo.VIPApplication.Self.FindChild(button).Click();
}
///
///
/// Returns the current text value of
/// the status bar.
///
public string ValidateStatusBox()
{
return repo.VIPApplication.StatusBar.TextValue;
}
}
* This source code was highlighted with Source Code Highlighter .
これは、FitNesseのテストケースの表です。
!| NetFit.AddVIPTest |
| FirstName | LastName |性別|アクション| ValidateStatusBox?|
|メリーリン|モンロー|女性|追加| VIPカウント:1 |
|ビル|ゲイツ|男性|追加| VIPカウント:2 |
|ヒラリー|クリントン|女性|追加| VIPカウント:3 |
これが、このテストの結果の仕組みです。
![画像](https://habrastorage.org/getpro/habr/post_images/1d6/390/45d/1d639045d359de964bdf1bf840630021.png)
FitNesseを使用すると、テストキットを作成できます。これにより、ソフトウェアの受け入れテストが大幅に簡素化されます。 さらに、FitNesseはWiKiであるため、同じ環境で、実行されたテスト(モジュール式と受け入れテストの両方)を参照して、すべてのプロジェクトドキュメントを保存および最新の状態に保つことができます。
さらに、Uffe Overgaard Kochが自動テストについて話している自動テスト会議のビデオを見ることができます。
携帯電話。
この資料が役立つことを願っています。