Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
テストについて考えていること
Search
shimarisu_121
April 23, 2024
Technology
0
68
テストについて考えていること
2024.04.13
「テストについて」というお題についてある場所で話した際のLT資料です
自分はどういうことを考えてきたのか?を振り返るような内容になりました
shimarisu_121
April 23, 2024
Tweet
Share
More Decks by shimarisu_121
See All by shimarisu_121
私のVSCodeの設定
kawana77b
0
43
喫煙のこと
kawana77b
0
50
Other Decks in Technology
See All in Technology
Eight Engineering Unit 紹介資料
sansan33
PRO
0
6.2k
1万人を変え日本を変える!!多層構造型ふりかえりの大規模組織変革 / 20260108 Kazuki Mori
shift_evolve
PRO
6
1.2k
技術選定、下から見るか?横から見るか?
masakiokuda
0
190
AI駆動開発ライフサイクル(AI-DLC)の始め方
ryansbcho79
0
330
Data Hubグループ 紹介資料
sansan33
PRO
0
2.6k
First-Principles-of-Scrum
hiranabe
4
2k
スクラムマスターが スクラムチームに入って取り組む5つのこと - スクラムガイドには書いてないけど入った当初から取り組んでおきたい大切なこと -
scrummasudar
3
2k
製造業から学んだ「本質を守り現場に合わせるアジャイル実践」
kamitokusari
0
610
AWS re:Invent 2025 を振り返る
kazzpapa3
2
110
Introduction to Sansan, inc / Sansan Global Development Center, Inc.
sansan33
PRO
0
2.9k
善意の活動は、なぜ続かなくなるのか ーふりかえりが"構造を変える判断"になった半年間ー
matsukurou
0
470
Kusakabe_面白いダッシュボードの表現方法
ykka
0
120
Featured
See All Featured
Amusing Abliteration
ianozsvald
0
86
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.8k
Everyday Curiosity
cassininazir
0
120
The World Runs on Bad Software
bkeepers
PRO
72
12k
The Curse of the Amulet
leimatthew05
0
7.1k
Getting science done with accelerated Python computing platforms
jacobtomlinson
1
94
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
61
48k
How to build a perfect <img>
jonoalderson
1
4.8k
Paper Plane (Part 1)
katiecoart
PRO
0
3k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
1
1.3k
Imperfection Machines: The Place of Print at Facebook
scottboms
269
13k
The Limits of Empathy - UXLibs8
cassininazir
1
200
Transcript
テストについて考えていること 2024/04/13 shimarisu_121
テストの5大要素 すべてのテスト技法は以下の要素を持つ • テスト実施者 • カバレッジ • 発見したい問題(推測される潜在的問題は何か?) • 作業内容
• 結果の判定方法(パスする基準は?) 出典: ソフトウェアテスト293の鉄則
テストの7原則 • テストは欠陥があることは示せるが、欠陥がないことは示せない • 全数テストは不可能 • 早期テストが時間とコストを節約 • 欠陥は偏在する •
テストは弱化する • テストはコンテキスト次第 • 「欠陥ゼロ」の落とし穴 出典: JSTQB FLシラバス
テストにおける思考 テストとは探求であり、その為に3つの思考法を利用する(探索的テストで重要) • 前方思考 ◦ Aというボタンが実在するよね、これを押したらどうなるのだろうか? • 後方思考 ◦ 機能Bなんてものがあってもいいよな。モジュールCをチェックしよう
• 水平思考 ◦ この機能面白いな。もっと過激にしたらどうだろう? 出典: ソフトウェアテスト293の鉄則
モンキーテストも時には行う 衝撃のバグが見つかることもある。しかし、基本的に経験則ではあま り効率は良くない。日々の数%くらいの時間で取り組むと良いのかも しれない テストの自動化は致命的欠陥の予防に相当役立ちますが、 経験則的には潜在的欠陥の多くは 意識して探さないと見つかり ません
寄り道:コーディングするときの思考 主にコードリーディングで意識していること • エディタの型定義や参照機能を利用して、コードを「掘って」中身の正しさを チェックする ◦ スクリプト言語(pythonなど)なら外部パッケージも掘れる • gh searchやsourcegraphでオープンソースの類似コード事例やissue
をチェック • testsフォルダの単体テストはその関数の「使い方」を示している場合も多い • アーキテクチャやデザパタ、各種サードパーティライブラリの勉強は「チャレ ンジで見た」形式で理解の促進に一役買う
バグを発見しやすい方法 • 境界値 ◦ 鉄板。単なるパラメータだけでなく、時間、レイヤ、あらゆる部分の「切 れ目」がバグ要因になる ◦ 単体テストコードを作成するときに根拠を持った上で仕込むべき部分。 一方、老朽化したらまず疑うのもここ •
例外処理・イレギュラー処理のチェック ◦ 保険処理と言われる類に対して「イジワル」をしてみる • 同値分割(バグが出た箇所と似たクラス値) • 何かしらの別構成 ◦ OSやバージョン、プロセッサのタイプを変えたら?
ガチガチにやるのなら ブラックボックステストにおける様々な方法の例 • デシジョンテーブル • 状態遷移表 • 直交表 • 仕様書の点検(文言に嘘はないか?)
超面倒なので頑張って取り組む必要はないと思うが、 組合せテストのテスト手法を引き出しに持っている だけでも見えてくるものもある 画像出典: https://shiftasia.com/ja/column/%E3%83%87%E3%82%B7%E3%82%B8%E3%83%A7%E3%83%B3%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%EF%BC%88%E 6%B1%BA%E5%AE%9A%E8%A1%A8%EF%BC%89%E3%81%A8%E3%81%AF/
単体テストは積み上げられる 安定依存の原則(SDP)を達成すればするほど、テストの労力を 下げつつ、安全なソフトウェアを作成しやすくなる なぜなら、 安定に向いたパッケージの境界値テストが厳密に行われている のなら、それに依存したパッケージのテストは境界値の定義をよ りゆるやかに出来る(手抜きできる)為
バグリポートについて • 「なんか変です」みたいな抽象的な報告をしない • それは明らかな仕様相違ですか?疑問・疑念ですか?あなたの個人的願 望ですか? • 何をどうしたらそうなるのですか?(とにかく再現手順) ◦ 唐突に気付くこともあるが、「記憶・記録」が大事
◦ スナップショットしつつ、ロールバックして差異を確認できる ような環境があると 良い(コードベースなら、だからgitがある) ◦ 手っ取り早く再現できる方法・ツールがあるのは超重要 ◦ カメラ撮影など、ベタなアナログでも有効な方法・証拠になりうる ◦ 自動化は環境構築頑張ったわ~、な満足感は注意報かも。 古典的でダサく 単純な方法で良い場合もある。全員にとって楽でシンプルが正義
あるべきバグリポートの方法 (1) • バグの再現方法(できるだけ詳しく)と発生頻度 • 本来の仕様(バグがない場合の望ましい動作。こうあるべき、という 自分の意見でかまわない) • 実際の動作(完全でなくても、自分の記録した範囲で詳しく書く) 出典:
プログラマが知るべき97のこと: バグレポートの使い方 https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/%E3%83%90%E3%82%B 0%E3%83%AC%E3%83%9D%E3%83%BC%E3%83%88%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9/ GitHubなら.github/ISSUE_TEMPLATEを活用
あるべきバグリポートの方法 (2) • 問題点をハッキリ報告し、解決策は書かない ◦ 解決方針はまた別に決めるから ◦ 正直組織開発だと、だからトホホな部分もあるけれど • 再現性なきバグはない
• ツールや環境関連バグへの感度を上げる ◦ OSSだったら、他のリポジトリのissueとかもちゃんと調べたか、み たいな話。本当にそのアプリのバグですか? 出典: ソフトウェアテスト293の鉄則
OSSの良い例も参考にする - Mozillaの例 - 参照: https://bugzilla.mozilla.org/page.cgi?id=bug-writing.html 分類と環境 再現手順 実際の結果 期待結果
解決策ではなく、問題を説明してください
バグ修正について(プログラマの立場から) • 何をどう変えて解決したか、明確にしているか? ◦ ログがないのに「修正しました」で終わらせない • 原因は明確か? ◦ なぜそうなったのかは理解したのか? •
場当たり修正になってないか? ◦ 役所対応で「言われたからしました」が新たなバグを呼び 起こす。全体を見て他の可能性は考えた?
自分への課題 実務に慣れてくると、QA・プログラマ双方で本音は「 誘導したい自分(達)」がいることに気付く • QA:「このチケットとかにも影響が出るから、 この報告は◦◦という方向で修正してくれないかな 」(そう思っ てリポートの文章を仕込む) • プログラマ:「事情も知らずめんどくせえ、
こうしとけば黙ってくれるかな 」(そう思って変更のコードを仕込 む) 「隠れた本音」が生まれる頻度が増えるが、 ほぼほぼ悪い結果を生む よりスマートな問題解決のプロセスでは、(ストレスフルな)「感情」の介入は不要のはず … (片方の立場にしかないって人が結構いる事情は大きい。特に PGが傲慢になりやすい傾向がある) お互いのリスペクトと問題を解決していこうというポジティブな価値観 を理解し、 事実をありのままに見る目線でいることがエンジニアには必要!!
欠陥(Detect)とは何か? ~品質は誰かにとっての価値である (G.M.Weinberg)~ • 「バグ」という言葉で抽象化されがちだが、 QA用語では正確には「欠陥」 • 「欠陥」が発見されると「故障」の状態(結果)が成立する可能性がある 仕様相違とかコードミスとか色々あるけど、、私個人の価値観では エンドユーザにとって納得感がある仕様か
が最も大事だと思う。かなり違和感のある状況があれば、 それは欠陥かもしれません。 直せるチャンスが今あるなら、そこは追求したい。自分は。 …色々難しかったけどね。。
ありがとうございました!