GAIO CLUB

2023年04月24日

【第1回】ガイオ用語集「単体テスト」

ガイオ用語集
単体テスト

単体テストとは

ソフトウェア開発において非常に重要な工程の一つであり、1つの機能やモジュールを単独でテストすることです。単体テストを行うことで、モジュール内で発生する問題を事前に検出でき、修正することができます。

ソフトウェア開発では、潜在する問題が後工程で検出されるほど、手戻り工数が大きくなるとされています。単体テストをしっかりと行うことで、開発工数の浪費やスケジュール遅延を防止することができます。

また、昨今のソフトウェア開発の主流となってきている、アジャイル開発のような反復的に機能を拡張していくソフトウェアの開発スタイルはテスト自動化との相性が良く、単体テストを自動で実施することが一般的です。(反復的に拡張をしていく中で、既存の機能が正しく動作することを担保しつつ、新規機能の開発を進めていくためです)

その他、テスト駆動開発と呼ばれる開発スタイルなどが存在し、事前に単体テストのテストケースを設計/実装した上で、開発する機能のプログラムコードを書いていくという進め方を見ても、単体テストが重要な位置づけであることが分かります。

単体テストの種類

ホワイトボックステスト

対象モジュールの内部構造を把握した上で、それらの一つ一つが意図した通りに動作しているかを確認するテスト方法です。
命令網羅(C0)、分岐網羅(C1)、条件網羅(C2)、改良条件判断網羅(MC/DC)などのコードカバレッジを測定することにより、テスト項目の網羅性を定量的に表すことができます。

ブラックボックステスト

対象モジュールの内部構造は考慮せず、モジュールの仕様(入力データや出力データ)に着目して動作を確認するテスト方法です。同値分割、境界値分析、決定表、原因・結果グラフなどの手法が存在しています。

単体テストのメリット・デメリット

メリット

前述の通り、モジュール単体でテストを行い、早期に問題を改修することで、手戻り工数を低減できます。
また、単体テストを実施する上で、一つの機能が複雑かつ大きくなり過ぎない程度の粒度にした方がテストしやすくなるため、結果的にプログラムコードが後から改修しやすい粒度に整理されることが多いです。

デメリット

テストケースの作成に工数がかかることです。モジュールが他の依存する機能や外部インタフェースを必要とする場合、テスト専用のドライバやスタブ、およびモックを必要とする点も挙げられます。

単体テストのやり方と単体テストツール

単体テストを実施する際は、プログラム言語に応じたフレームワークを用いて自動化することが一般的です。(もちろん、手動でモジュールを動作させられる場合、手動で実施することは可能です。)

C/C++:Unity、CppUnit、Google Test
C#:xUnit、MSTest、NUnit
Java:JUnit
Python:unittest、pytest、doctest
mスクリプト:matlab.unittestパッケージ

また、単体テスト工程では、これらの単体テスト自動実行フレームワークとあわせて、テストツールの利用が効果的です。ガイオには、自社開発製品C/C++組込みソフトウェア開発向け単体テストツール「カバレッジマスターwinAMS」とLinux開発環境向けの「Quality Town for Embedded grade(QTE)」があります。

「カバレッジマスターwinAMS」は、マイコンのオブジェクトコードに則った信頼性の高い単体テストを実施できます。「Quality Town for Embedded grade(QTE)」は、大規模ソフトウェア開発にも適しており、CI/CD環境にOSSのテストツールであるGoogle Testを組み合わせた効率的な単体テスト環境の構築を実現できます。

まとめ

・単体テストは現在のソフトウェア開発において非常に重要な工程です。
・単体テストには、ホワイトボックステスト、ブラックボックステストがあります。
・単体テストには開発工数がかかるデメリットがありますが、手戻りによる工数を低減できます。
・単体テストの実施にはテストフレームワークを利用し、自動化することが一般的です。


単体テストは今日のソフトウェア開発において欠かせない工程であり、より高品質なソフトウェアを開発するために適切なテストを行うことが重要です。

この記事を読んだ人はこんなページを読んでいます。

人気のコラム

最新のコラム