テストオラクルに依存しないテスト実装テクニック:ラウンドトリップテスト(Roundtrip Test)

ファジングテスト、コンコリックテストなど、テスト入力を自動生成・大量使用するテストで問題になるのが、テストオラクル(テストの期待値を提供するもの)をどう実装するかです。このテストオラクル問題への対策の代表例については、次のようなアプローチ…

ミューテーションテストの概要と類似手法との違い

ミューテーションテストとは、テストの有効性を評価するための手法です。テスト対象を変更し(バグを埋め込み)、それによってテスト結果が変化するかを調べることで、テストがバグを見つけられるかを評価します。 ユニットテストなどホワイトボックステスト…

Go Fuzzingによるファジングテスト/ランダムテスト

Goは標準のテストフレームワークでファジングをサポートしています。今回はそのファジング機能について、テスト条件の網羅をどうするかを中心に使い方をメモします。 基本的なテストコードの書き方 Fuzzingを使ったテストコードの簡単な例を以下に示します。…

C++ コンセプト(concepts)の型制約のテスト

C++20から導入されたコンセプト(concepts)は、テンプレート型のパラメータの制約を実現する、型制約の言語機能です。 コンセプトを使うと、従来のSFINAEなどのテクニックと比べて、簡潔に型の制約を記述できるようになるほか、制約違反時のエラーメッセー…

JaSST'22東北でテスト自動化について登壇

先日、JaSST’22東北にて、「テスト自動化の成功を支えるチームと仕組み」と題して招待講演を行う機会をいただきました。内容は、テスト自動化を支える活動や、テスト自動化の基礎作りについて、長年の経験で得た経験や知見を整理したものになります。docs.go…

テストカバレッジを具体的に表現するためのアプローチ

構造やコードに対するテストカバレッジは、テスト対象のモデルが比較的明快であるため、表現が容易ですし、既に様々なカバレッジが世の中で使用されています。 例えばコードの場合、次のようなカバレッジでテストカバレッジを表現できます。 制御フローに対…

テストタイプの設計アプローチ(標準規格の品質モデルで分割してはいけない)

特定のテストレベル(例えばシステムテスト)で大規模で複雑なテストを設計する場合、目的や十分性基準、テスト設計方針を具体的に考えるために、関心事の分離を実施する必要があります。 その手段の一つとして、テストタイプの設計があります。そこでは巨大…

ソフトウェアテスト技術文書の英語読み書き・付け焼き刃勉強法

「Calendar for ソフトウェアテストの小ネ | Advent Calendar 2021 - Qiita」の記事です。今回は、ソフトウェアテストの英語技術文書のリーディング・ライティングを最低限できるようにするための、手っ取り早い付け焼き刃勉強法に触れます。 先の前置きとし…

Tesseract OCRで文言描画の多言語対応テストを自動化する

「Calendar for ソフトウェアテスト | Advent Calendar 2021 - Qiita」の記事です。多言語をサポートするプロダクトの開発では、各言語ごとに表示文言が正しく描画されているかテストしたい場合があります。 今回は、その文言描画の多言語対応テストを、Tess…

テストアーキテクティングをテーマに登壇

先週、JaSST東海というイベントで「テストを導くためのテストアーキテクチャの組み立て方」と題して登壇させていただきました。テストを導くためのテストアーキテクチャの組み立て方/cetam - Speaker Deck内容は、システムテスト/結合テスト/ユニットテスト…

責務構造ツリー

責務構造ツリー 責務構造ツリーは、活動の責務を分割するためのモデリングツールです。 QAアーキテクティングやテストアーキテクティングで、各QA活動、テスト活動の責務を分析し、詳細化するために使用します。 責務構造ツリーの概要 責務構造ツリーは、責…

QAアーキテクチャの事前検証

「QAアーキテクチャが本当に妥当なのか」は、大抵の場合、サービスやプロダクトリリース後の事後評価で判明します。例えば、以下のような指標の評価が、本当にQAアーキテクチャが妥当かの確認に有効になります。 ビジネスの成否。例えば、ビジネスのKPIの達…

デザインパターンの陳腐化

最近、というより昔からの定番ネタですが、GoFのデザインパターンは時代遅れで陳腐化したという話題をSNSで度々見ます。今回はそのパターンの陳腐化について書きます。 GoFのデザインパターンの陳腐化 GoFのデザインパターンの複数は今も価値があるものの、…

QAアーキテクチャの概要

QAアーキテクチャの定義 まずソフトウェア開発における「アーキテクチャ」は、対象の基本的な概念・構造・特性を、構成、設計判断、設計原則で表現したものを指します。 例えばシステムのアーキテクチャの場合ですと、ISO/IEC/IEEE 42010ではアーキテクチャ…

QAアーキテクティング手法:CEQAAM

【この記事は整備中です。逐次加筆・更新している段階です】 このエントリでは、QAアーキテクティングの一手法:CEQAAM(シーカーム。Cooperative and Evolutionary QA Architecting Method)を解説するものです。 CEQAAMは、QAアーキテクティングの原則、ア…

アジャイルテスティング問答

先日、「人類よ!これがアジャイルテスティングだ!QAテックリードが語るアジャイルQAの実践とは何か? - connpass」というイベントに登壇させていただきました。 インタビュー形式だったので講演資料などは特に残ってないのですが、内容の記録のため公開に…

アジャイルテスティングのイベントに登壇

Ultimate Agilist Tokyoの10年越しの縁で藤原大さんから声をかけていただき、会社にも許可をもらって以下のアジャイルテスティングのイベントに登壇することになりました。人類よ!これがアジャイルテスティングだ!QAテックリードが語るアジャイルQAの実践…

世の中のアジャイルテスティングの定義と原則

アジャイルテスティングの定義や原則には、いくつかのバリエーションが存在します(大きく「アジャイルの原則に適合したソフトウェアテスティング」or「アジャイルに適合したソフトウェアテスティング」の2つに分けられます)。今回は情報の整理のため、有力…

テスタビリティ(試験性)の拡張を実現する実装

前エントリ「テスタビリティ(試験性)を確保するための設計方針 - 千里霧中」の補足として、「テスタビリティ(試験性、Testability)を拡張可能にする」の実装について解説します。拡張を実現する手段の一つに接合部(Seam)があります。今回は実装例として、接…

テスタビリティ(試験性)を確保するための設計方針

テスタビリティ(試験性、テスト容易性)は「どれだけ容易にテストできるか」「どれだけテストを実現できるか」の度合いを示す品質特性です。 実践ソフトウェア・エンジニアリングの解説から引用すると、テスタビリティは次の特性から構成されます。 実行円滑…

Flutter Integration Testingでは、testパッケージではなくSDKのintegration_testパッケージを使う

前のエントリ「テストコードのデザインパターン:Robotパターン」を書いた際に情報提供いただいたネタです。 現在、FlutterのIntegration Testでは、flutter_driverパッケージとtestパッケージの組み合わせではなく、SDKのintegration_testパッケージでテス…

テストコードのデザインパターン:Robotパターン

アプリケーションなどのテストコードのデザインパターンの一つに、Robotパターン(Testing Robotパターン、Robot Testingパターン)という汎用的なパターンがあります。Presentation: Testing Robots - Jake Wharton Robot Pattern Testing for XCUITest | by …

Flutterの自動テストをGithub Actionsで実行する

Flutterのユニットテスト、ウィジェットテスト、インテグレーションテスト(エミュレータを使ったテスト)をGithub Actionsで実行する方法についてです。 対象のディレクトリ構成 (rootディレクトリ) test ユニットテスト、ウィジェットテストのテストコード t…

アジャイルテストでの計画・管理のツール:Test MatrixとTest Mindmap

「ソフトウェアテストの小ネタ Advent Calendar 2020」の記事です。Agile Testing CondensedやMore Agile Testingでは、リリーステスト(システム全体を対象とするテストレベル)の計画のやり方として、「リリース全体を俯瞰する視点で作成する。計画の作成…

機械学習による決定木分析でクラシフィケーションツリーを洗練させる

機械学習の手法の一つである決定木分析を使うと、入出力データから、対象の内部ロジックをある程度推測できるようになります。これはデバッグやテストの洗練に活用できる余地があります。今回はその一例として、決定木分析の主要なアルゴリズムであるCART法…

設計向けとテスト設計向けの適切な仕様表現の差異(デシジョンテーブルを例として)

設計向けとテスト設計向けでは、適切な仕様表現について認識に差異が出ることがあります。題材として、以下の仕様をデシジョンテーブルで表現する場合を考えます: 題材とする仕様 組み込み機器の単軸制御モード機能が対象 この機能は次の3つの入力を持つ 省…

UTP2(UML Testing Profile 2)でテスト設計の成果物を一通り表現する

UMLのプロファイル(特定用途向けに、ステレオタイプ、タグ付き値、モデル要素の制約・関係性の拡張をくわえたもの)の中に、ソフトウェアテストのためのプロファイルUTP2(UML Testing Profile 2)があります。 UTP2は、テストでモデルベースドアプローチを実…

Prometheusでファイルサービスディスカバリを使って監視対象を動的に変える

監視対象が動的に増減するような状況においてPrometheusで監視を行う場合、サービスティスカバリ機能が便利です。今回はその例として、Prometheusのファイルサービスディスカバリで監視対象を動的に変更する方法についてまとめます。 動作環境の構築 まずdoc…

Github Actionsでテストや静的解析に失敗するプルリクエストをマージできないようにする

Github Actionsを活用するとGithub内でCIを完結できます。 その活用例として、今回はプリリクエスト作成時にユニットテストと静的解析を実行し、それらが成功しないとプルリクエストのマージを拒絶する仕組みをGithub Actionsで作ります。 対象コード 対象ソ…

Nスイッチカバレッジ計測ツールを公開

状態遷移テストの補助用に、Nスイッチカバレッジを計測するツールnswitchcov_aを公開しました。https://github.com/hiro-iseri/nswitchcov_a ユーザマニュアル https://github.com/hiro-iseri/nswitchcov_a/blob/master/docs/userguide_jp.md 使い方の例 CUI…