単体とは?

VSTSの単体テスト機能は本当に使えるのか? > 第3回 VSTSで提供される注目すべき単体テスト機能機能
前回では、アジャイル開発者の視点からVisual Studio 2005 Team System(以下、VSTS)の単体テスト機能についての考察を行った。しかし、その結果として.NETでのテスト駆動開発の定番ツールとなっているNUnitからVSTSのテスティング・フレームワークへ移行するだけの十分な根拠は得られなかった。
そこで、VSTSでしか実現することのできない単体テスト機能についてさらに検証を行ってみることにしよう。具体的には「データ・ドリブン単体テスト」と「ASP.NET単体テスト」を取り上げる。
今回は単体テスト機能の検証用アプリケーションとして、マイクロソフトのASP.NETリファレンス・アプリケーションであるMicrosoft .NET Pet Shop 4.0(以下、Pet Shop)を使用する。なお、Pet Shop自体のインストールについては本記事では割愛するが、インストール時に対象のデータベースとしてMicrosoft SQL Server 2005を選択している点に注意してもらいたい。
Pet Shopは、インターネット上でペット販売を行うE-Commerceサイトのサンプル・アプリケーション。上記サイトからダウンロードしたインストーラからソース・コードとデータベースをインストールすることができる。
単体テスト・コードを記述するに当たって、プロダクト・コードが期待どおりの動作を行っていることを確認するために、どれくらいの数のテスト・データを準備すれば十分なのだろうかと頭を悩ませることがある。最終的に大量のテスト・データが必要とされる場合には、テスト・ケースごとに数多くのテスト・メソッドを記述すればよいのだろうか、それともテスト・ケースを反復処理するようなテスト・メソッドを記述すればよいのだろうか。
VSTSの「データ・ドリブン単体テスト」を使用すれば、問題は簡単に解決できる。データ・ドリブン単体テストでは、単体テストにおいて大量のテスト・データを使用する必要がある場合、それらのテスト・データをデータベースから取得してテストを反復実行させることができるのだ。
それでは実際にPet Shopを使用してデータ・ドリブン単体テストの機能を検証してみよう。ここでは、カートにさまざまな商品を追加した後のアイテム(=固有商品)数量と合計金額を確認するデータ・ドリブン単体テストを作成することにする。
Google対抗? Microsoft Sync Frameworkの正体 (2007/11/20) 先日、マイクロソフトが発表した同期フレームワークは、.NETアプリケーションに何をもたらすのか? 実装サンプルを通して、その機能と特徴を簡単に紹介
ホワイトペーパー利用者に「Amazonギフト券」を抽選で100名様にプレゼント!――TechTargetジャパン リニューアル・キャンペーン
@ITトップ|Insider.NETフォーラム トップ|会議室|利用規約|プライバシーポリシー|サイトマップ

[ 82] VSTSで提供される注目すべき単体テスト機能 − @IT
[引用サイト]  http://www.atmarkit.co.jp/fdotnet/vststester/vststester03/vststester03_01.html

実装・単体テストの品質をうまくチェックするにはどうすればいいのだろうか。本稿ではまず品質の考え方を概観し、その後、チェックを現実化するツールを紹介していく(@IT編集部)
今度のプロジェクトは実装・単体テストを一括発注することになった。でも一括発注だとどのように品質をチェックしたらいいのだろう。いつものように目の前で作業をしてくれれば分かるんだけれど……。
品質には大きく分けて2つの考え方があります。製品(システム)そのものの品質と製品を作成するプロセス(作り方)の品質です。前者は、対象物そのものがどの程度の品質を保っているかを評価することであり、後者はプロセスがどれくらい欠陥を作らないようにしているか、また除去できるかを評価しそのプロセスから作られた製品はどの程度の品質なのかを評価する方法です。
一般的にプロセスの品質の方が複数の製品を対象にできるため着目されています。例えばCMMIに代表されるようなプロセス改善の仕組みはこのプロセスの品質の考え方によって実現されています。
プロセス品質が重要なことは分かりますが、一括発注先にプロセスを強制することは難しい場合があります。そのようなときにどのように品質を確保するかが問題となります。発注先のプロセスがしっかりしたところに発注すればいいわけですが、それだけでよいのでしょうか。いろいろな状況が考えられます。今回はプロセス品質にはこだわらず、製品品質を評価する方法を考えてみましょう。
実装単体テスト工程における製品品質を評価するためには、以下の表のような評価をするとよいでしょう。
ソースコードを対象としてフォーマットの適切さ、コーディング規約の遵守、バグになりやすいコードの有無などを評価する
ここでは単体テストをBlackBoxテストとWhiteBoxテストの2種類に分類しています。BlackBoxテストはソースコードをBlackBox化して、仕様どおりかをテストする方法で、WhiteBoxテストはソースコードの詳細に沿った形でテストする方法です。BlackBoxテストが仕様と合致しているかという正確性の品質を評価し、WhiteBoxテストではテスト実施済みコードの点から信頼性を評価しています。
製品品質、つまりソースコードの品質を評価するためにコードレビュー(インスペクション)や単体テスト(BlackBox、WhiteBox)を行います。それぞれの手法について簡単に説明します。
コードレビューは、コーディング規約違反やバグになりやすいコードの有無、仕様との差異を人間の目で確認し、ソースコードの品質を評価するタスクです。このレビュー方法には、Checklist-Based Reading(CBR)、Perspective-based Reading(PBR)といった手法があります。CBRはチェックリストを基にコードをレビューする方法で、PBRはプログラムの視点(規約を守っているか、保守しやすいかなど)を絞り、その観点ごとにシナリオ化して、そのシナリオを基にコードをレビューする方法です。優秀なプログラマーなどによって属人的にコードレビューする方法もありますが、それは手法ではありません。
レビューで大事なことは、どの範囲のソースコードを誰がレビューアでどれくらいの時間をかけてレビューしているかということと、レビューの指摘事項の記録を取るということです。この2つの情報によってソースコードの品質を測ることができます。
レビュー指摘数(パッケージ別、チーム別、個人別、指摘分類[仕様勘違い、コーディング規約不適合など])
[*] メトリクスについては「初めてのソフトウェアメトリクス(前編) ソフトウェアの品質を数値化して確かめる」を参照してください。
最初の2つのメトリクスはこのレビューが適切なものだったかという判定に利用され、その判定により妥当だと判断された場合にレビュー指摘数が多い・少ないといった定量的にソースコードの品質を測ることができます。ただし、単一のプロジェクトの指摘数だけを確認することは相対的な品質しか分かりません。言語を限定しいくつかのプロジェクトのレビュー指摘数を統計的に処理することで、ライン数当たりのレビュー指摘数の標準値を定義することができます。こうすることで相対的ではなくソースコードの品質を定量的に評価できるようになります。
最初のうちは相対的な評価をするとともにどの指摘を修正するかということを考える方が適切だと思います。相対的であっても、チームや個人の品質の課題などを洗い出すことができ、製品品質を高めるのに役立ちます。
単体テスト(BlackBox)は、仕様どおりにソースコードが作成されているかどうかを確認しソースコードの品質を評価するタスクです。単体テストという言葉はあいまいな言葉で、結合テスト前のテストを指し、統合後(ビルド後)の疎通テストやスモークテストを指す人もいるようです。ここでは単一のモジュール(Javaのクラス)のロジックをテストすることを単体テストと呼びます。
つまり、メソッドの仕様に沿ってテストケースを作成し、単体テストを実施することになります。単体テストを実施するためにテストドライバと呼ばれるテスト対象のクラス(メソッド)を呼び出すモジュールを作成する必要があります。近年、このテストドライバはxUnitと呼ばれるテストのフレームワークによって形式的に作成できるようになっています。テストドライバとテストケースを組み合わせてテストを実施していきます。テストケース数、テスト実施数とテストの成功数でソースコードの仕様書の適合性という観点での品質を測ることができます。
テストケースの粒度と重複度によってテスト実施数の精度が変わるので、この品質評価を相対的ではない評価に用いるためには、コードレビューの定量評価と同様に複数のプロジェクトのテストケース数を統計的に処理する必要があります。
テストされていないコードは品質が評価されていないコードであり、それらのコードが残っていることは好ましくありません。そのため単体テスト(BlackBox)と同様に単体テストを行います。単体テスト(BlackBox)との違いは、仕様書に沿ってテストケースを作成するのではなく、ソースコードの構造に沿ってテストケースを作成する点です。本来的に意味のあるテストケースを作成した方がよいですが、テストされていないコードをなくすことを目的にしているので意味のないテストケースでもテスト可能です。
このテストの目標はソースコードのテスト網羅度なのでカバレッジ(テストをしているかどうかの全体に対する割合)を計測して、ソースコードの信頼度を評価します。カバレッジの詳細についてはここを参照してください。
カバレッジの目安は、難しく議論の分かれるところです。そのため環境(Web、Javaなど)によってコストメリットの高い数値を設定するとよいでしょう。筆者の経験的には85%くらいがバランスの良い数値かと思います。
情報マネージャのための「今日のひと言」 - 2007/11/22『クレームはニーズ』 クレームは「できれば受けたくない」「厄介もの」と感じている人が多いようです。ビジネスでは……>>続きはクリック
ホワイトペーパー利用者に「Amazonギフト券」を抽選で100名様にプレゼント!――TechTargetジャパン リニューアル・キャンペーン
@IT情報マネジメント トップ|プロジェクト管理 トップ|会議室|利用規約|プライバシーポリシー|サイトマップ

[ 83] @IT:明日からできるプロジェクト管理(4)
[引用サイト]  http://www.atmarkit.co.jp/farc/rensai/open04/open04a.html

数学、とくに位相幾何学において、n 次元の単体(たんたい、simplex)とは、r ? n ならばどの r + 1 個の点も r ? 1 次元の超平面に同時に含まれることのないような n + 1 個の点からなる集合の凸包のことで、点・線分・三角形・四面体といった基本的な図形の n 次元への一般化である。
単体は、頂点の位置さえ決めればそれのみによって一意的に決定される。さらに単体は単体的複体や鎖複体などの概念を与えるが、これらはさらに抽象化されて、幾何学を組合せ論的あるいは代数的に扱う道具となる。また逆に、抽象化された複体の概念から単体が定義される。
r + 1 個の点(の位置ベクトル) a0, a1, ..., ar があり、これらすべての点が Rn の r ? 1 次元以下の部分空間に含まれることはない(これを一般の位置にあるという)ものとする。このとき、
二つの単体が頂点を共有し、一方が他方に含まれるとき、含まれる単体を他方の単体の面 (face) であるという。特に、m 次元単体であるような面を m 次元の面 (m-face) という。たとえば、頂点は 0 次元面である。また特に 1 次元面を辺と呼び、余次元 1 の面をファセット(facet、切子面)と呼ぶ(ここで「余次元」というのは、含む単体の次元とその面の次元との差のことである)。
頂点の位置ベクトルが a0, a1, ..., ar で与えられる r 次元単体の容積(volume, r 次元体積)は行列式 det を用いて以下のように与えられる:
単体は凸な図形であり、一般の位置にある頂点の組を与えれば、その頂点を含む最小の凸図形(凸包)として一意に決定される。また、単体の頂点集合から幾つかの頂点を選ぶならば、選んだ頂点の張る単体はもとの単体に面として含まれる。これらの性質から、単体(一般に複体)は組合せ論的対象となる。特に n 次元単体の r 次元面の総数は、組合せの数 nCr である。
単体は頂点集合の凸包であるということ、単体の面は頂点集合の部分集合を選ぶことと対応しているという性質から、「頂点集合を決めれば、単体はそれが含む全ての面とその包含関係まで込めて特定される」ことが理解される。もう少し正確には、単体が他の単体に面として含まれることを面関係 (face relation) と呼ぶことにすると、「ある単体の面全体の成す集合に面関係による順序を入れたものは、頂点集合の冪集合が包含関係に関して作る順序集合とみなすことができる」ということである。
なお、位相幾何学的には凸性はあまり意味を持たないが、各面を連続的に動かして移りあう図形を区別しないため、やはり頂点を決めれば(それらをあらゆる次元ですべて繋ぐことで)単体は一意的に決定され、上と同じことを考えることができる。重要なことは、単体を、それが含む面の全体を考えて、頂点集合の部分集合の族とみなすことである。

[ 84] 単体 (数学) - Wikipedia
[引用サイト]  http://ja.wikipedia.org/wiki/%E5%8D%98%E4%BD%93_(%E6%95%B0%E5%AD%A6)



お気に入り



  • track feed
    • seo