テスト設計コンテストU-30クラス審査委員長業の振り返り

社外のコミュニティ活動として、2017年からテスト設計コンテストU-30クラスの創設とその審査員長を続けていたのですが、立候補あり今年度から大段さんに引き継ぐことになりました。良いタイミングなので、今回振り返りながら、自分の審査委員活動の総括をで…

リグレッションテストの方針立て

リグレッションテストの方針の重要性 ソフトウェアに変更を加えた際に、意図せず変更とは関係のない所で故障が発生したり潜在的なバグが顕在化したりしたものは、リグレッション(和製英語でデグレードとも)と呼称されます。 リグレッションテストは、この…

シフトレフトテストを支えるテスト設計についてSoftware Designに寄稿

最近、Software Design 2月号にて、シフトレフトテストの解説記事を執筆する機会をいただきました。Software Design 2024年2月号シフトテストレフトは、シフトレフトの一種で、「テスト対象を動かして動的にテストするタイミングをなるべく早く設けよう」と…

一部で見られる品質保証部門の陳腐化。そして陳腐化した品質保証は品質を悪化させる

※品質保証のエンジニアである筆者が自省・戒めのために書いた記事になります 品質管理(Quality Control)、品質マネジメントは国内では製造業を中心に発展し、プロダクトの競争力向上に貢献してきました。 JTCと呼ばれる旧来からのメーカーでは、その実績・…

PCの執筆・作業環境の整備で買ってよかったもの2023年版

今年、書籍執筆の機会をいただいているのですが、執筆期間が短く、プライベート時間にかなりの間文字を書き続けています。(体が無理できなくなったのも合わさって)そこで気になったのが、自分の自宅のPC環境の使いづらさでした。 その流れで今年後半はPC環…

プロパティベーステストの概要とPythonでの実装例

「実践プロパティベーステスト」の発売をきっかけに、国内でプロパティベーステストの話題がホットになっています。 今回はこのプロパティベーステストの概要とテクニックについて、Pythonをサンプルに解説します。 プロパティベーステストとは プロパティベ…

組み合わせテストの組み合わせを減らすアプローチ

組み合わせテストは、「組み合わせ爆発」という言葉がある通り、テストケースの規模が大きくなりがちです。それに付随して、開発のスピードやコスト、必要リソースに悪影響を及ぼすこともあります。 そのため、組み合わせテストの組み合わせ削減は、テストケ…

現代的なユニットテストでのコードカバレッジ(テストカバレッジ)の扱い方

ユニットテストのコードカバレッジ(テストカバレッジ。ステートメントカバレッジやC0、C1など)は、不適切な運用が根強く見られます。多いのが、コードカバレッジの確保だけをテストの十分性目標にして、まずいテストを書いてしまうパターンです。 今回はこ…

抽象レベルの高いテスト設計(テストアーキテクチャ設計など)の構成要素にテストケースセットを選んではいけない

大規模な開発では、抽象レベルの高いテスト設計(いわゆるテストアーキテクチャ設計が代表例)を通して、大規模なテストを中小規模のテスト要素に分割するアプローチがとられます。 例えば次ようなものです: システムオブシステムズのレベルで、各企業組織…

CI/CD方針、テスト・QA方針と連動する三分類ブランチ管理方針で、開発での高品質と高スピードの両立を支える

最近の開発では、CI/CD、自動テスト、継続的テストが当たり前となっていますが、その影響で、それらのCI/CD方針、テスト方針と、Git等のバージョン管理のブランチ方針をどう連携させるかが、定番の課題になっていると感じています。 今回は、このブランチ方…

品質保証(QA)とは。定義の三大流派と定義揺れの弊害

近年のソフトウェア業界では、テスト関連活動を担うエンジニアを「QAエンジニア」と呼ぶようになっています。ただQA(品質保証)という言葉は、旧来から二つの定義が共存しているほか、業界内の通例で更に別の意味付けが行われた結果、定義が曖昧になり誤解…

テスト設計の一通りの流れについてのチュートリアルに登壇

先日、テスト設計コンテストU-30クラスに関連するイベントとして、テスト設計のチュートリアル講師の機会を頂きました。https://speakerdeck.com/goyoki/test-design-tutorial今回のチュートリアルでは、初学者向けに、勉強会やセミナーで解説されるテスト分…

モダンなテストレベル設計(ユニットテスト~システムテスト等をどう設計するか)の原則

プロジェクト全体のテストを組み立てる際に重要な課題になるのが、テストレベル設計です。テストレベル設計は、ユニットテスト、結合テスト、システムテストといったテストレベルを、どのような責務・段取りで行うか分析・設計する活動です。 このテストレベ…

カオスエンジニアリングのプラクティス:スクイーズテスト(Squeeze Test)とは

カオスエンジニアリングや継続的ベリフィケーションの解説で目にすることのあるテストプラクティスに、スクイーズテスト(Squeeze Test、圧迫テスト)があります。ただこのスクイーズテストはカオスエンジニアリングの一例として名こそ取り上げられているも…

自動テストを支えるテスト設計について講演

先日、JaSST'23 Tokaiというテストのイベントで「自動テストを活躍させるための基礎作りとテスト設計の工夫」と題して講演する機会を頂きました。https://speakerdeck.com/goyoki/improvements-and-test-design-for-effective-test-automation今回はシンポジ…

SQuaRE、ISO/IEC 25010の製品品質モデルの改訂動向

SQuaRE、ISO/IEC 25010についてですが、標準規格の担当WGの方が、2022年の3月のタイミングで審議中の改訂情報に触れていました。https://speakerdeck.com/washizaki/squareguan-lian-falsebiao-zhun-hua-falsequan-ti-dong-xiang-25010-25019gai-yao-ip-shan…

探索的テストの力を引き出す段取り、そしてTEXの改善

これまで色々な立場で、色々なテスト案件を経験してきましたが、その中で一番生産性が高いテストアプローチが、精鋭テストエンジニア達による探索的テストでした。 適切なタイミングで、必要な環境と必要な人材が揃った探索的テスト部隊がテストを始めると、…

テスト自動化の事後(影響、評価、ネクストステップ)について講演

先日、QuesというソフトウェアQAをテーマにした勉強会に「テスト自動化の成果をどう評価し、どう次につなげるか」と題して登壇させていただきました。docs.google.com「テスト自動化をした後」をテーマにしてほしいとの要望を頂いていたため、今回は以下の3…

GoogleTestとSanitizerを組み合わせて動的解析

「Calendar for ソフトウェアテストの小ネタ | Advent Calendar 2022 - Qiita」の記事です。C++のメジャーなテスティングフレームワークGoogleTestは、gccやclangに組み込まれたSanitizerと連動することで、不正なメモリ操作や不適切なスレッド間データ共有…

Cap'n Protoのシリアライズによるツール間のデータやりとり実装例

最近 Cap'n Proto の導入例を割と見るようになっています。Cap'n ProtoはRPCのフレームワークおよびフォーマット仕様のシステムで、gRPCに対抗して作られたものです。今回はCap'n Protoのスキーマ言語の定義と、その処理の簡単な例として、Serializationの最…

テストオラクルに依存しないテスト実装テクニック:ラウンドトリップテスト(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内容は、システムテスト/結合テスト/ユニットテスト…