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
55
テストについて考えていること
2024.04.13
「テストについて」というお題についてある場所で話した際のLT資料です
自分はどういうことを考えてきたのか?を振り返るような内容になりました
shimarisu_121
April 23, 2024
Tweet
Share
More Decks by shimarisu_121
See All by shimarisu_121
私のVSCodeの設定
kawana77b
0
36
喫煙のこと
kawana77b
0
43
Other Decks in Technology
See All in Technology
freeeのアクセシビリティの現在地 / freee's Current Position on Accessibility
ymrl
2
200
LangSmith×Webhook連携で実現するプロンプトドリブンCI/CD
sergicalsix
1
230
OPENLOGI Company Profile
hr01
0
67k
DatabricksにOLTPデータベース『Lakebase』がやってきた!
inoutk
0
110
敢えて生成AIを使わないマネジメント業務
kzkmaeda
2
440
AWS Organizations 新機能!マルチパーティ承認の紹介
yhana
1
280
無意味な開発生産性の議論から抜け出すための予兆検知とお金とAI
i35_267
4
13k
NewSQLや分散データベースを支えるRaftの仕組み - 仕組みを理解して知る得意不得意
hacomono
PRO
2
160
Operating Operator
shhnjk
1
590
Backlog ユーザー棚卸しRTA、多分これが一番早いと思います
__allllllllez__
1
150
第4回Snowflake 金融ユーザー会 Snowflake summit recap
tamaoki
1
280
Getting to Know Your Legacy (System) with AI-Driven Software Archeology (WeAreDevelopers World Congress 2025)
feststelltaste
1
130
Featured
See All Featured
Thoughts on Productivity
jonyablonski
69
4.7k
Become a Pro
speakerdeck
PRO
29
5.4k
4 Signs Your Business is Dying
shpigford
184
22k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
6
300
Navigating Team Friction
lara
187
15k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
30
2.1k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
18
970
Measuring & Analyzing Core Web Vitals
bluesmoon
7
510
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
10
950
Fireside Chat
paigeccino
37
3.5k
Practical Orchestrator
shlominoach
189
11k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
45
7.5k
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用語では正確には「欠陥」 • 「欠陥」が発見されると「故障」の状態(結果)が成立する可能性がある 仕様相違とかコードミスとか色々あるけど、、私個人の価値観では エンドユーザにとって納得感がある仕様か
が最も大事だと思う。かなり違和感のある状況があれば、 それは欠陥かもしれません。 直せるチャンスが今あるなら、そこは追求したい。自分は。 …色々難しかったけどね。。
ありがとうございました!