@shaykec/bridge 0.4.24 → 0.4.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/journeys/ai-engineer.yaml +34 -0
- package/journeys/backend-developer.yaml +36 -0
- package/journeys/business-analyst.yaml +37 -0
- package/journeys/devops-engineer.yaml +37 -0
- package/journeys/engineering-manager.yaml +44 -0
- package/journeys/frontend-developer.yaml +41 -0
- package/journeys/fullstack-developer.yaml +49 -0
- package/journeys/mobile-developer.yaml +42 -0
- package/journeys/product-manager.yaml +35 -0
- package/journeys/qa-engineer.yaml +37 -0
- package/journeys/ux-designer.yaml +43 -0
- package/modules/README.md +52 -0
- package/modules/accessibility-fundamentals/content.md +126 -0
- package/modules/accessibility-fundamentals/exercises.md +88 -0
- package/modules/accessibility-fundamentals/module.yaml +43 -0
- package/modules/accessibility-fundamentals/quick-ref.md +71 -0
- package/modules/accessibility-fundamentals/quiz.md +100 -0
- package/modules/accessibility-fundamentals/resources.md +29 -0
- package/modules/accessibility-fundamentals/walkthrough.md +80 -0
- package/modules/adr-writing/content.md +121 -0
- package/modules/adr-writing/exercises.md +81 -0
- package/modules/adr-writing/module.yaml +41 -0
- package/modules/adr-writing/quick-ref.md +57 -0
- package/modules/adr-writing/quiz.md +73 -0
- package/modules/adr-writing/resources.md +29 -0
- package/modules/adr-writing/walkthrough.md +64 -0
- package/modules/ai-agents/content.md +120 -0
- package/modules/ai-agents/exercises.md +82 -0
- package/modules/ai-agents/module.yaml +42 -0
- package/modules/ai-agents/quick-ref.md +60 -0
- package/modules/ai-agents/quiz.md +103 -0
- package/modules/ai-agents/resources.md +30 -0
- package/modules/ai-agents/walkthrough.md +85 -0
- package/modules/ai-assisted-research/content.md +136 -0
- package/modules/ai-assisted-research/exercises.md +80 -0
- package/modules/ai-assisted-research/module.yaml +42 -0
- package/modules/ai-assisted-research/quick-ref.md +67 -0
- package/modules/ai-assisted-research/quiz.md +73 -0
- package/modules/ai-assisted-research/resources.md +33 -0
- package/modules/ai-assisted-research/walkthrough.md +85 -0
- package/modules/ai-pair-programming/content.md +105 -0
- package/modules/ai-pair-programming/exercises.md +98 -0
- package/modules/ai-pair-programming/module.yaml +39 -0
- package/modules/ai-pair-programming/quick-ref.md +58 -0
- package/modules/ai-pair-programming/quiz.md +73 -0
- package/modules/ai-pair-programming/resources.md +34 -0
- package/modules/ai-pair-programming/walkthrough.md +117 -0
- package/modules/ai-test-generation/content.md +125 -0
- package/modules/ai-test-generation/exercises.md +98 -0
- package/modules/ai-test-generation/module.yaml +39 -0
- package/modules/ai-test-generation/quick-ref.md +65 -0
- package/modules/ai-test-generation/quiz.md +74 -0
- package/modules/ai-test-generation/resources.md +41 -0
- package/modules/ai-test-generation/walkthrough.md +100 -0
- package/modules/api-design/content.md +189 -0
- package/modules/api-design/exercises.md +84 -0
- package/modules/api-design/game.yaml +113 -0
- package/modules/api-design/module.yaml +45 -0
- package/modules/api-design/quick-ref.md +73 -0
- package/modules/api-design/quiz.md +100 -0
- package/modules/api-design/resources.md +55 -0
- package/modules/api-design/walkthrough.md +88 -0
- package/modules/clean-code/content.md +136 -0
- package/modules/clean-code/exercises.md +137 -0
- package/modules/clean-code/game.yaml +172 -0
- package/modules/clean-code/module.yaml +44 -0
- package/modules/clean-code/quick-ref.md +44 -0
- package/modules/clean-code/quiz.md +105 -0
- package/modules/clean-code/resources.md +40 -0
- package/modules/clean-code/walkthrough.md +78 -0
- package/modules/clean-code/workshop.yaml +149 -0
- package/modules/code-review/content.md +130 -0
- package/modules/code-review/exercises.md +95 -0
- package/modules/code-review/game.yaml +83 -0
- package/modules/code-review/module.yaml +42 -0
- package/modules/code-review/quick-ref.md +77 -0
- package/modules/code-review/quiz.md +105 -0
- package/modules/code-review/resources.md +40 -0
- package/modules/code-review/walkthrough.md +106 -0
- package/modules/daily-workflow/content.md +81 -0
- package/modules/daily-workflow/exercises.md +50 -0
- package/modules/daily-workflow/module.yaml +33 -0
- package/modules/daily-workflow/quick-ref.md +37 -0
- package/modules/daily-workflow/quiz.md +65 -0
- package/modules/daily-workflow/resources.md +38 -0
- package/modules/daily-workflow/walkthrough.md +83 -0
- package/modules/debugging-systematically/content.md +139 -0
- package/modules/debugging-systematically/exercises.md +91 -0
- package/modules/debugging-systematically/module.yaml +46 -0
- package/modules/debugging-systematically/quick-ref.md +59 -0
- package/modules/debugging-systematically/quiz.md +105 -0
- package/modules/debugging-systematically/resources.md +42 -0
- package/modules/debugging-systematically/walkthrough.md +84 -0
- package/modules/debugging-systematically/workshop.yaml +127 -0
- package/modules/demo-test/content.md +68 -0
- package/modules/demo-test/exercises.md +28 -0
- package/modules/demo-test/game.yaml +171 -0
- package/modules/demo-test/module.yaml +41 -0
- package/modules/demo-test/quick-ref.md +54 -0
- package/modules/demo-test/quiz.md +74 -0
- package/modules/demo-test/resources.md +21 -0
- package/modules/demo-test/walkthrough.md +122 -0
- package/modules/demo-test/workshop.yaml +31 -0
- package/modules/design-critique/content.md +93 -0
- package/modules/design-critique/exercises.md +71 -0
- package/modules/design-critique/module.yaml +41 -0
- package/modules/design-critique/quick-ref.md +63 -0
- package/modules/design-critique/quiz.md +73 -0
- package/modules/design-critique/resources.md +27 -0
- package/modules/design-critique/walkthrough.md +68 -0
- package/modules/design-patterns/content.md +335 -0
- package/modules/design-patterns/exercises.md +82 -0
- package/modules/design-patterns/game.yaml +55 -0
- package/modules/design-patterns/module.yaml +45 -0
- package/modules/design-patterns/quick-ref.md +44 -0
- package/modules/design-patterns/quiz.md +101 -0
- package/modules/design-patterns/resources.md +40 -0
- package/modules/design-patterns/walkthrough.md +64 -0
- package/modules/exploratory-testing/content.md +133 -0
- package/modules/exploratory-testing/exercises.md +88 -0
- package/modules/exploratory-testing/module.yaml +41 -0
- package/modules/exploratory-testing/quick-ref.md +68 -0
- package/modules/exploratory-testing/quiz.md +75 -0
- package/modules/exploratory-testing/resources.md +39 -0
- package/modules/exploratory-testing/walkthrough.md +87 -0
- package/modules/git/content.md +128 -0
- package/modules/git/exercises.md +53 -0
- package/modules/git/game.yaml +190 -0
- package/modules/git/module.yaml +44 -0
- package/modules/git/quick-ref.md +67 -0
- package/modules/git/quiz.md +89 -0
- package/modules/git/resources.md +49 -0
- package/modules/git/walkthrough.md +92 -0
- package/modules/git/workshop.yaml +145 -0
- package/modules/hiring-interviews/content.md +130 -0
- package/modules/hiring-interviews/exercises.md +88 -0
- package/modules/hiring-interviews/module.yaml +41 -0
- package/modules/hiring-interviews/quick-ref.md +68 -0
- package/modules/hiring-interviews/quiz.md +73 -0
- package/modules/hiring-interviews/resources.md +36 -0
- package/modules/hiring-interviews/walkthrough.md +75 -0
- package/modules/hooks/content.md +97 -0
- package/modules/hooks/exercises.md +69 -0
- package/modules/hooks/module.yaml +39 -0
- package/modules/hooks/quick-ref.md +93 -0
- package/modules/hooks/quiz.md +81 -0
- package/modules/hooks/resources.md +34 -0
- package/modules/hooks/walkthrough.md +105 -0
- package/modules/hooks/workshop.yaml +64 -0
- package/modules/incident-response/content.md +124 -0
- package/modules/incident-response/exercises.md +82 -0
- package/modules/incident-response/game.yaml +132 -0
- package/modules/incident-response/module.yaml +45 -0
- package/modules/incident-response/quick-ref.md +53 -0
- package/modules/incident-response/quiz.md +103 -0
- package/modules/incident-response/resources.md +40 -0
- package/modules/incident-response/walkthrough.md +82 -0
- package/modules/llm-fundamentals/content.md +114 -0
- package/modules/llm-fundamentals/exercises.md +83 -0
- package/modules/llm-fundamentals/module.yaml +42 -0
- package/modules/llm-fundamentals/quick-ref.md +64 -0
- package/modules/llm-fundamentals/quiz.md +103 -0
- package/modules/llm-fundamentals/resources.md +30 -0
- package/modules/llm-fundamentals/walkthrough.md +91 -0
- package/modules/one-on-ones/content.md +133 -0
- package/modules/one-on-ones/exercises.md +81 -0
- package/modules/one-on-ones/module.yaml +44 -0
- package/modules/one-on-ones/quick-ref.md +67 -0
- package/modules/one-on-ones/quiz.md +73 -0
- package/modules/one-on-ones/resources.md +37 -0
- package/modules/one-on-ones/walkthrough.md +69 -0
- package/modules/package.json +9 -0
- package/modules/prioritization-frameworks/content.md +130 -0
- package/modules/prioritization-frameworks/exercises.md +93 -0
- package/modules/prioritization-frameworks/module.yaml +41 -0
- package/modules/prioritization-frameworks/quick-ref.md +77 -0
- package/modules/prioritization-frameworks/quiz.md +73 -0
- package/modules/prioritization-frameworks/resources.md +32 -0
- package/modules/prioritization-frameworks/walkthrough.md +69 -0
- package/modules/prompt-engineering/content.md +123 -0
- package/modules/prompt-engineering/exercises.md +82 -0
- package/modules/prompt-engineering/game.yaml +101 -0
- package/modules/prompt-engineering/module.yaml +45 -0
- package/modules/prompt-engineering/quick-ref.md +65 -0
- package/modules/prompt-engineering/quiz.md +105 -0
- package/modules/prompt-engineering/resources.md +36 -0
- package/modules/prompt-engineering/walkthrough.md +81 -0
- package/modules/rag-fundamentals/content.md +111 -0
- package/modules/rag-fundamentals/exercises.md +80 -0
- package/modules/rag-fundamentals/module.yaml +45 -0
- package/modules/rag-fundamentals/quick-ref.md +58 -0
- package/modules/rag-fundamentals/quiz.md +75 -0
- package/modules/rag-fundamentals/resources.md +34 -0
- package/modules/rag-fundamentals/walkthrough.md +75 -0
- package/modules/react-fundamentals/content.md +140 -0
- package/modules/react-fundamentals/exercises.md +81 -0
- package/modules/react-fundamentals/game.yaml +145 -0
- package/modules/react-fundamentals/module.yaml +45 -0
- package/modules/react-fundamentals/quick-ref.md +62 -0
- package/modules/react-fundamentals/quiz.md +106 -0
- package/modules/react-fundamentals/resources.md +42 -0
- package/modules/react-fundamentals/walkthrough.md +89 -0
- package/modules/react-fundamentals/workshop.yaml +112 -0
- package/modules/react-native-fundamentals/content.md +141 -0
- package/modules/react-native-fundamentals/exercises.md +79 -0
- package/modules/react-native-fundamentals/module.yaml +42 -0
- package/modules/react-native-fundamentals/quick-ref.md +60 -0
- package/modules/react-native-fundamentals/quiz.md +61 -0
- package/modules/react-native-fundamentals/resources.md +24 -0
- package/modules/react-native-fundamentals/walkthrough.md +84 -0
- package/modules/registry.yaml +1650 -0
- package/modules/risk-management/content.md +162 -0
- package/modules/risk-management/exercises.md +86 -0
- package/modules/risk-management/module.yaml +41 -0
- package/modules/risk-management/quick-ref.md +82 -0
- package/modules/risk-management/quiz.md +73 -0
- package/modules/risk-management/resources.md +40 -0
- package/modules/risk-management/walkthrough.md +67 -0
- package/modules/running-effective-standups/content.md +119 -0
- package/modules/running-effective-standups/exercises.md +79 -0
- package/modules/running-effective-standups/module.yaml +40 -0
- package/modules/running-effective-standups/quick-ref.md +61 -0
- package/modules/running-effective-standups/quiz.md +73 -0
- package/modules/running-effective-standups/resources.md +36 -0
- package/modules/running-effective-standups/walkthrough.md +76 -0
- package/modules/solid-principles/content.md +154 -0
- package/modules/solid-principles/exercises.md +107 -0
- package/modules/solid-principles/module.yaml +42 -0
- package/modules/solid-principles/quick-ref.md +50 -0
- package/modules/solid-principles/quiz.md +102 -0
- package/modules/solid-principles/resources.md +39 -0
- package/modules/solid-principles/walkthrough.md +84 -0
- package/modules/sprint-planning/content.md +142 -0
- package/modules/sprint-planning/exercises.md +79 -0
- package/modules/sprint-planning/game.yaml +84 -0
- package/modules/sprint-planning/module.yaml +44 -0
- package/modules/sprint-planning/quick-ref.md +76 -0
- package/modules/sprint-planning/quiz.md +102 -0
- package/modules/sprint-planning/resources.md +39 -0
- package/modules/sprint-planning/walkthrough.md +75 -0
- package/modules/sql-fundamentals/content.md +160 -0
- package/modules/sql-fundamentals/exercises.md +87 -0
- package/modules/sql-fundamentals/game.yaml +105 -0
- package/modules/sql-fundamentals/module.yaml +45 -0
- package/modules/sql-fundamentals/quick-ref.md +53 -0
- package/modules/sql-fundamentals/quiz.md +103 -0
- package/modules/sql-fundamentals/resources.md +42 -0
- package/modules/sql-fundamentals/walkthrough.md +92 -0
- package/modules/sql-fundamentals/workshop.yaml +109 -0
- package/modules/stakeholder-communication/content.md +186 -0
- package/modules/stakeholder-communication/exercises.md +87 -0
- package/modules/stakeholder-communication/module.yaml +38 -0
- package/modules/stakeholder-communication/quick-ref.md +89 -0
- package/modules/stakeholder-communication/quiz.md +73 -0
- package/modules/stakeholder-communication/resources.md +41 -0
- package/modules/stakeholder-communication/walkthrough.md +74 -0
- package/modules/system-design/content.md +149 -0
- package/modules/system-design/exercises.md +83 -0
- package/modules/system-design/game.yaml +95 -0
- package/modules/system-design/module.yaml +46 -0
- package/modules/system-design/quick-ref.md +59 -0
- package/modules/system-design/quiz.md +102 -0
- package/modules/system-design/resources.md +46 -0
- package/modules/system-design/walkthrough.md +90 -0
- package/modules/team-topologies/content.md +166 -0
- package/modules/team-topologies/exercises.md +85 -0
- package/modules/team-topologies/module.yaml +41 -0
- package/modules/team-topologies/quick-ref.md +61 -0
- package/modules/team-topologies/quiz.md +101 -0
- package/modules/team-topologies/resources.md +37 -0
- package/modules/team-topologies/walkthrough.md +76 -0
- package/modules/technical-debt/content.md +111 -0
- package/modules/technical-debt/exercises.md +92 -0
- package/modules/technical-debt/module.yaml +39 -0
- package/modules/technical-debt/quick-ref.md +60 -0
- package/modules/technical-debt/quiz.md +73 -0
- package/modules/technical-debt/resources.md +25 -0
- package/modules/technical-debt/walkthrough.md +94 -0
- package/modules/technical-mentoring/content.md +128 -0
- package/modules/technical-mentoring/exercises.md +84 -0
- package/modules/technical-mentoring/module.yaml +41 -0
- package/modules/technical-mentoring/quick-ref.md +74 -0
- package/modules/technical-mentoring/quiz.md +73 -0
- package/modules/technical-mentoring/resources.md +33 -0
- package/modules/technical-mentoring/walkthrough.md +65 -0
- package/modules/test-strategy/content.md +136 -0
- package/modules/test-strategy/exercises.md +84 -0
- package/modules/test-strategy/game.yaml +99 -0
- package/modules/test-strategy/module.yaml +45 -0
- package/modules/test-strategy/quick-ref.md +66 -0
- package/modules/test-strategy/quiz.md +99 -0
- package/modules/test-strategy/resources.md +60 -0
- package/modules/test-strategy/walkthrough.md +97 -0
- package/modules/test-strategy/workshop.yaml +96 -0
- package/modules/typescript-fundamentals/content.md +127 -0
- package/modules/typescript-fundamentals/exercises.md +79 -0
- package/modules/typescript-fundamentals/game.yaml +111 -0
- package/modules/typescript-fundamentals/module.yaml +45 -0
- package/modules/typescript-fundamentals/quick-ref.md +55 -0
- package/modules/typescript-fundamentals/quiz.md +104 -0
- package/modules/typescript-fundamentals/resources.md +42 -0
- package/modules/typescript-fundamentals/walkthrough.md +71 -0
- package/modules/typescript-fundamentals/workshop.yaml +146 -0
- package/modules/user-story-mapping/content.md +123 -0
- package/modules/user-story-mapping/exercises.md +87 -0
- package/modules/user-story-mapping/module.yaml +41 -0
- package/modules/user-story-mapping/quick-ref.md +64 -0
- package/modules/user-story-mapping/quiz.md +73 -0
- package/modules/user-story-mapping/resources.md +29 -0
- package/modules/user-story-mapping/walkthrough.md +86 -0
- package/modules/writing-prds/content.md +133 -0
- package/modules/writing-prds/exercises.md +93 -0
- package/modules/writing-prds/game.yaml +83 -0
- package/modules/writing-prds/module.yaml +44 -0
- package/modules/writing-prds/quick-ref.md +77 -0
- package/modules/writing-prds/quiz.md +103 -0
- package/modules/writing-prds/resources.md +30 -0
- package/modules/writing-prds/walkthrough.md +87 -0
- package/package.json +5 -3
- package/src/server.js +17 -7
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# Design Patterns Walkthrough — Learn by Doing
|
|
2
|
+
|
|
3
|
+
## Step 1: Strategy in Practice
|
|
4
|
+
|
|
5
|
+
**Task:** Implement a `PaymentProcessor` that can use different payment strategies (CreditCard, PayPal, Crypto). The processor should accept a strategy and delegate the `pay(amount)` call.
|
|
6
|
+
|
|
7
|
+
**Question:** What would you need to change to add Apple Pay? Would you edit the processor or add a new strategy class?
|
|
8
|
+
|
|
9
|
+
**Checkpoint:** The user has a working strategy setup and understands open/closed extension.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Step 2: Factory for Object Creation
|
|
14
|
+
|
|
15
|
+
**Task:** Create a `NotificationFactory` that returns the right notification type (Email, SMS, Push) based on a string or enum. The factory encapsulates the `if/switch` logic.
|
|
16
|
+
|
|
17
|
+
**Question:** Where should configuration (e.g., API keys for each channel) live — inside the factory, or passed in? What are the tradeoffs?
|
|
18
|
+
|
|
19
|
+
**Checkpoint:** The user has a factory that returns typed instances based on input.
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Step 3: Observer for Event Handling
|
|
24
|
+
|
|
25
|
+
**Task:** Build a simple `Subject` class: `subscribe(callback)`, `unsubscribe(callback)`, `notify(data)`. Use it to let a "form" notify "validators" and "analytics" when the user submits.
|
|
26
|
+
|
|
27
|
+
**Question:** What happens if a subscriber throws? How might you make the observer more robust?
|
|
28
|
+
|
|
29
|
+
**Checkpoint:** The user has a working pub-sub and multiple subscribers.
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## Step 4: Decorator for Layered Behavior
|
|
34
|
+
|
|
35
|
+
<!-- hint:code language="javascript" highlight="1,3" -->
|
|
36
|
+
|
|
37
|
+
**Task:** Create a `Logger` interface with `log(msg)`. Implement `ConsoleLogger`. Then create `TimestampDecorator` and `LevelDecorator` that wrap a logger and add behavior. Compose them: `TimestampDecorator(LevelDecorator(ConsoleLogger))`.
|
|
38
|
+
|
|
39
|
+
**Question:** What order should decorators be applied? Does it matter?
|
|
40
|
+
|
|
41
|
+
**Checkpoint:** The user can stack decorators and explain composition order.
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## Step 5: Adapter for Legacy Code
|
|
46
|
+
|
|
47
|
+
**Task:** You have a function `fetchData(callback)` that uses callbacks. Create an adapter so it can be used with `async/await` or returns a Promise.
|
|
48
|
+
|
|
49
|
+
**Question:** Does the adapter change the behavior of the legacy code, or just its interface?
|
|
50
|
+
|
|
51
|
+
**Checkpoint:** The user can wrap a callback API in a Promise-based interface.
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## Step 6: When *Not* to Use a Pattern
|
|
56
|
+
|
|
57
|
+
<!-- hint:buttons type="single" prompt="For a simple utility function, which applies?" options="Singleton,Factory,Strategy,No pattern" -->
|
|
58
|
+
<!-- hint:card type="concept" title="YAGNI: You Aren't Gonna Need It" -->
|
|
59
|
+
|
|
60
|
+
**Task:** Consider a small feature (e.g., a utility function). Would Singleton, Factory, or Strategy apply? If not, explain why. "No pattern" is a valid answer.
|
|
61
|
+
|
|
62
|
+
**Question:** What's the cost of over-applying patterns? When does YAGNI trump pattern elegance?
|
|
63
|
+
|
|
64
|
+
**Checkpoint:** The user can articulate when patterns add value vs unnecessary complexity.
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
# Exploratory Testing — Structured Discovery of Bugs
|
|
2
|
+
|
|
3
|
+
<!-- hint:slides topic="Exploratory testing: exploratory vs scripted, session-based test management, charters, SFDPOT heuristic, and note-taking" slides="5" -->
|
|
4
|
+
|
|
5
|
+
## Exploratory vs Scripted Testing
|
|
6
|
+
|
|
7
|
+
**Scripted testing**: Follow predefined steps. Repeatable, good for regressions.
|
|
8
|
+
**Exploratory testing**: Simultaneous learning, test design, and execution. You explore based on what you discover. Ideal for finding unknown unknowns.
|
|
9
|
+
|
|
10
|
+
They complement each other. Use scripted tests for known risks; use exploratory for discovery.
|
|
11
|
+
|
|
12
|
+
## Session-Based Test Management (SBTM)
|
|
13
|
+
|
|
14
|
+
James Bach's framework structures exploratory testing into **time-boxed sessions** with clear charters and debriefs.
|
|
15
|
+
|
|
16
|
+
### Session Structure
|
|
17
|
+
|
|
18
|
+
- **Charter**: What to explore (1–2 sentences).
|
|
19
|
+
- **Time box**: 60–90 minutes typical.
|
|
20
|
+
- **Uninterrupted focus**: No meetings, minimal context switching.
|
|
21
|
+
- **Notes**: Log what you tried, found, and questions.
|
|
22
|
+
- **Debrief**: Summary for the team.
|
|
23
|
+
|
|
24
|
+
```mermaid
|
|
25
|
+
flowchart TD
|
|
26
|
+
A[Define charter] --> B[Start timer]
|
|
27
|
+
B --> C[Explore: try, observe, note]
|
|
28
|
+
C --> D{Time up or scope done?}
|
|
29
|
+
D -->|No| C
|
|
30
|
+
D -->|Yes| E[End session]
|
|
31
|
+
E --> F[Debrief: findings, risks, bugs]
|
|
32
|
+
F --> G[Create bug reports]
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Test Charters
|
|
36
|
+
|
|
37
|
+
A charter guides exploration without prescribing steps. Format:
|
|
38
|
+
|
|
39
|
+
> **Explore** [target] **with** [resources/tools] **to discover** [information].
|
|
40
|
+
|
|
41
|
+
### Examples
|
|
42
|
+
|
|
43
|
+
- Explore the checkout flow with a test credit card to discover payment failure handling.
|
|
44
|
+
- Explore the search feature with various input lengths to discover how results are truncated.
|
|
45
|
+
- Explore the profile page with different user roles to discover permission gaps.
|
|
46
|
+
|
|
47
|
+
Charters give direction but not instructions. You decide *how* to explore.
|
|
48
|
+
|
|
49
|
+
## SFDPOT — A Heuristic for Coverage
|
|
50
|
+
|
|
51
|
+
Elisabeth Hendrickson's **SFDPOT** helps ensure you don't miss areas:
|
|
52
|
+
|
|
53
|
+
| Letter | Area | Questions |
|
|
54
|
+
|--------|------|-----------|
|
|
55
|
+
| **S** | Structure | UI layout, navigation, menus, links |
|
|
56
|
+
| **F** | Function | Features work as stated? |
|
|
57
|
+
| **D** | Data | Valid, invalid, boundary, empty, special chars |
|
|
58
|
+
| **P** | Platform | Browsers, OS, devices, screen sizes |
|
|
59
|
+
| **O** | Operations | Install, upgrade, backup, config |
|
|
60
|
+
| **T** | Time | Delays, timeouts, dates, concurrent users |
|
|
61
|
+
|
|
62
|
+
Use SFDPOT to generate charter ideas: "Explore [Structure] of the dashboard to discover layout bugs on narrow viewports."
|
|
63
|
+
|
|
64
|
+
## Note-Taking During Sessions
|
|
65
|
+
|
|
66
|
+
Capture:
|
|
67
|
+
|
|
68
|
+
- **What you did**: Steps, inputs, paths.
|
|
69
|
+
- **What you observed**: Bugs, odd behavior, questions.
|
|
70
|
+
- **Ideas**: New charters, areas to revisit.
|
|
71
|
+
|
|
72
|
+
Keep notes lightweight: bullet points, timestamps, screenshots. A session report template:
|
|
73
|
+
|
|
74
|
+
```
|
|
75
|
+
Charter: Explore X with Y to discover Z
|
|
76
|
+
Time: 14:00–15:30
|
|
77
|
+
Tester: [name]
|
|
78
|
+
|
|
79
|
+
Exploration notes:
|
|
80
|
+
- Tried A → observed B
|
|
81
|
+
- Bug: [brief description]
|
|
82
|
+
- Question: [unresolved]
|
|
83
|
+
|
|
84
|
+
Bugs found: 2
|
|
85
|
+
Risks: [areas of concern]
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## Bug Reporting
|
|
89
|
+
|
|
90
|
+
Good bug reports have:
|
|
91
|
+
|
|
92
|
+
- **Title**: One-line summary.
|
|
93
|
+
- **Steps to reproduce**: Numbered, precise.
|
|
94
|
+
- **Expected vs actual**: What should happen vs what did.
|
|
95
|
+
- **Environment**: Browser, OS, version.
|
|
96
|
+
- **Screenshots/videos**: When helpful.
|
|
97
|
+
- **Severity**: Impact and frequency.
|
|
98
|
+
|
|
99
|
+
```
|
|
100
|
+
Title: Search returns no results when query contains &
|
|
101
|
+
Steps: 1. Go to /search. 2. Enter "A&B Corp". 3. Click Search.
|
|
102
|
+
Expected: Results for "A&B Corp"
|
|
103
|
+
Actual: "No results found"
|
|
104
|
+
Env: Chrome 120, MacOS
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## Debrief Sessions
|
|
108
|
+
|
|
109
|
+
After exploration, share:
|
|
110
|
+
|
|
111
|
+
- **Findings**: Bugs, risks, positive discoveries.
|
|
112
|
+
- **Coverage**: What you did and didn't cover.
|
|
113
|
+
- **Charters for next time**: Unfinished areas.
|
|
114
|
+
- **Blockers**: What stopped you (e.g., missing access).
|
|
115
|
+
|
|
116
|
+
Debriefs turn individual exploration into team learning.
|
|
117
|
+
|
|
118
|
+
## Combining Exploratory with Automated Testing
|
|
119
|
+
|
|
120
|
+
- **Before release**: Exploratory sessions on new features.
|
|
121
|
+
- **After automation**: Exploratory to find what automation misses (UX, edge cases, integration quirks).
|
|
122
|
+
- **Charters from automation gaps**: "Explore areas with low e2e coverage to discover risks."
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
## Key Takeaways
|
|
127
|
+
|
|
128
|
+
1. **Exploratory = learning + designing + executing** — not ad-hoc clicking.
|
|
129
|
+
2. **SBTM** — time-boxed sessions with charters and debriefs.
|
|
130
|
+
3. **Charters** — "Explore X with Y to discover Z" — guide without scripting.
|
|
131
|
+
4. **SFDPOT** — heuristic for broad coverage.
|
|
132
|
+
5. **Notes and debriefs** — make exploration visible and actionable.
|
|
133
|
+
6. **Combine** exploratory with automated tests for balanced quality.
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# Exploratory Testing Exercises
|
|
2
|
+
|
|
3
|
+
## Exercise 1: Charter Writing Practice
|
|
4
|
+
|
|
5
|
+
**Task:** Write 3 test charters for a "User Profile" page that allows editing name, avatar, and notification preferences. Use the format: Explore [target] with [resources] to discover [information]. Make each charter focus on a different aspect (e.g., Structure, Data, Function).
|
|
6
|
+
|
|
7
|
+
**Validation:**
|
|
8
|
+
- [ ] Each charter has target, resources, and discovery goal
|
|
9
|
+
- [ ] Charters are distinct (not redundant)
|
|
10
|
+
- [ ] Charters are specific enough to guide a 30–60 min session
|
|
11
|
+
|
|
12
|
+
**Hints:**
|
|
13
|
+
1. Vary the "with" — different data, different roles, different devices
|
|
14
|
+
2. Vary the "discover" — bugs, UX, performance, accessibility
|
|
15
|
+
3. One charter per SFDPOT area is a good spread
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Exercise 2: SFDPOT Coverage Analysis
|
|
20
|
+
|
|
21
|
+
**Task:** For an app you've tested (or a hypothetical one), list which SFDPOT areas you typically cover and which you skip. For one skipped area, write a charter that would address it.
|
|
22
|
+
|
|
23
|
+
**Validation:**
|
|
24
|
+
- [ ] Identifies at least 2 often-skipped areas
|
|
25
|
+
- [ ] Explains why they're skipped (time, habit, tooling)
|
|
26
|
+
- [ ] One charter targets a gap
|
|
27
|
+
|
|
28
|
+
**Hints:**
|
|
29
|
+
1. Platform (P) and Time (T) are commonly skipped
|
|
30
|
+
2. Operations (O) — install, upgrade, config — often forgotten
|
|
31
|
+
3. "We never test on Safari" → Platform charter
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## Exercise 3: Session Notes to Bug Report
|
|
36
|
+
|
|
37
|
+
**Task:** You have these raw session notes:
|
|
38
|
+
|
|
39
|
+
- Clicked "Add to cart" 3 times quickly → cart showed 1 item
|
|
40
|
+
- Tried empty search → spinner forever
|
|
41
|
+
- Pasted 5000 chars in "Notes" → UI froze for 2 sec
|
|
42
|
+
|
|
43
|
+
Convert one of these into a proper bug report (title, steps, expected, actual, environment).
|
|
44
|
+
|
|
45
|
+
**Validation:**
|
|
46
|
+
- [ ] Title is concise and descriptive
|
|
47
|
+
- [ ] Steps are reproducible (someone else could follow them)
|
|
48
|
+
- [ ] Expected vs actual is clear
|
|
49
|
+
- [ ] Environment is specified
|
|
50
|
+
|
|
51
|
+
**Hints:**
|
|
52
|
+
1. "3 times quickly" — how quick? Add timing if relevant
|
|
53
|
+
2. "5000 chars" — exact count or range helps
|
|
54
|
+
3. Include browser/OS if it might matter
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## Exercise 4: Debrief Summary
|
|
59
|
+
|
|
60
|
+
**Task:** After a hypothetical session on a "Password reset" flow, you found: (1) Email validation allows "test@"; (2) Reset link expires after 5 min but error says "invalid"; (3) Success message appears before email is actually sent. Write a 5-bullet debrief summary for your team.
|
|
61
|
+
|
|
62
|
+
**Validation:**
|
|
63
|
+
- [ ] Bugs are listed clearly
|
|
64
|
+
- [ ] Risks or patterns are noted (e.g., "validation inconsistent")
|
|
65
|
+
- [ ] Next steps or charters suggested
|
|
66
|
+
- [ ] Tone is factual, not blaming
|
|
67
|
+
|
|
68
|
+
**Hints:**
|
|
69
|
+
1. Group related issues (e.g., "error messaging")
|
|
70
|
+
2. Prioritize: what's critical vs nice-to-fix
|
|
71
|
+
3. Suggest: "Charter for email delivery and expiration edge cases"
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## Exercise 5: Exploratory + Automation Plan
|
|
76
|
+
|
|
77
|
+
**Task:** A "Drag-and-drop file upload" feature is new. You have 2 hours. Propose a plan: how much time for exploratory vs writing/reviewing automated tests? What charters? What would you automate?
|
|
78
|
+
|
|
79
|
+
**Validation:**
|
|
80
|
+
- [ ] Exploratory time is allocated first (discovery before automation)
|
|
81
|
+
- [ ] At least 2 charters for exploratory
|
|
82
|
+
- [ ] Automation targets are clear (e.g., "happy path upload")
|
|
83
|
+
- [ ] Rationale for the split
|
|
84
|
+
|
|
85
|
+
**Hints:**
|
|
86
|
+
1. Exploratory finds edge cases; automate the obvious happy path
|
|
87
|
+
2. File types, sizes, network failures — exploratory
|
|
88
|
+
3. "Upload valid file, see in list" — automate
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
slug: exploratory-testing
|
|
2
|
+
title: "Exploratory Testing — Structured Discovery of Bugs"
|
|
3
|
+
version: 1.0.0
|
|
4
|
+
description: "Learn session-based exploratory testing, test charters, and heuristics to find bugs systematically."
|
|
5
|
+
category: quality-assurance
|
|
6
|
+
tags: [exploratory-testing, manual-testing, bug-hunting, quality, test-charters]
|
|
7
|
+
difficulty: intermediate
|
|
8
|
+
|
|
9
|
+
xp:
|
|
10
|
+
read: 15
|
|
11
|
+
walkthrough: 40
|
|
12
|
+
exercise: 25
|
|
13
|
+
quiz: 20
|
|
14
|
+
quiz-perfect-bonus: 10
|
|
15
|
+
|
|
16
|
+
time:
|
|
17
|
+
quick: 5
|
|
18
|
+
read: 20
|
|
19
|
+
guided: 50
|
|
20
|
+
|
|
21
|
+
prerequisites: [test-strategy]
|
|
22
|
+
related: [debugging-systematically, accessibility-fundamentals]
|
|
23
|
+
|
|
24
|
+
triggers:
|
|
25
|
+
- "What is exploratory testing?"
|
|
26
|
+
- "How do I find bugs without a test plan?"
|
|
27
|
+
- "What are test charters?"
|
|
28
|
+
- "How do I do structured manual testing?"
|
|
29
|
+
|
|
30
|
+
visuals:
|
|
31
|
+
diagrams: [diagram-flow, diagram-mermaid]
|
|
32
|
+
quiz-types: [quiz-drag-order, quiz-timed-choice]
|
|
33
|
+
slides: true
|
|
34
|
+
|
|
35
|
+
sources:
|
|
36
|
+
- url: "https://www.amazon.com/Explore-It-Reduce-Risk-Exploratory/dp/1937785025"
|
|
37
|
+
label: "Explore It! by Elisabeth Hendrickson (book)"
|
|
38
|
+
type: book
|
|
39
|
+
- url: "https://www.satisfice.com/download/session-based-test-management"
|
|
40
|
+
label: "Session-Based Test Management (James Bach)"
|
|
41
|
+
type: docs
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# Exploratory Testing Quick Reference
|
|
2
|
+
|
|
3
|
+
## Charter Format
|
|
4
|
+
|
|
5
|
+
```
|
|
6
|
+
Explore [target] with [resources] to discover [information]
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
## SFDPOT Heuristic
|
|
10
|
+
|
|
11
|
+
| Letter | Area | Example Focus |
|
|
12
|
+
|--------|------|---------------|
|
|
13
|
+
| S | Structure | UI, navigation, layout |
|
|
14
|
+
| F | Function | Features, behavior |
|
|
15
|
+
| D | Data | Valid, invalid, bounds, empty |
|
|
16
|
+
| P | Platform | Browsers, OS, devices |
|
|
17
|
+
| O | Operations | Install, upgrade, config |
|
|
18
|
+
| T | Time | Delays, timeouts, concurrency |
|
|
19
|
+
|
|
20
|
+
## SBTM Session Flow
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
Charter → Timer → Explore (try, observe, note) → End → Debrief
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Session Notes Template
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
Charter: ...
|
|
30
|
+
Time: ...
|
|
31
|
+
Tester: ...
|
|
32
|
+
|
|
33
|
+
Exploration: [what you did, what you saw]
|
|
34
|
+
Bugs: [list]
|
|
35
|
+
Risks: [concerns]
|
|
36
|
+
Next charters: [ideas]
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Bug Report Checklist
|
|
40
|
+
|
|
41
|
+
- [ ] Title (one line)
|
|
42
|
+
- [ ] Steps to reproduce (numbered)
|
|
43
|
+
- [ ] Expected vs actual
|
|
44
|
+
- [ ] Environment (browser, OS)
|
|
45
|
+
- [ ] Screenshots/video (when helpful)
|
|
46
|
+
|
|
47
|
+
## Debrief Outline
|
|
48
|
+
|
|
49
|
+
- Findings (bugs, risks)
|
|
50
|
+
- Coverage (what was/wasn't tested)
|
|
51
|
+
- Next charters
|
|
52
|
+
- Blockers
|
|
53
|
+
|
|
54
|
+
## Exploratory vs Scripted
|
|
55
|
+
|
|
56
|
+
| Exploratory | Scripted |
|
|
57
|
+
|-------------|----------|
|
|
58
|
+
| Learn + design + execute | Follow predefined steps |
|
|
59
|
+
| Discovery, unknowns | Regression, known risks |
|
|
60
|
+
| Charters guide | Test cases define |
|
|
61
|
+
| Debrief shares learning | Results are pass/fail |
|
|
62
|
+
|
|
63
|
+
## One-Liners
|
|
64
|
+
|
|
65
|
+
- **Charter**: Guide, don't prescribe.
|
|
66
|
+
- **SFDPOT**: Don't skip Platform, Time, or Operations.
|
|
67
|
+
- **Debrief**: Turn exploration into team learning.
|
|
68
|
+
- **Combine**: Exploratory finds gaps; automation locks in coverage.
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# Exploratory Testing Quiz
|
|
2
|
+
|
|
3
|
+
## Question 1
|
|
4
|
+
|
|
5
|
+
What is the main difference between exploratory and scripted testing?
|
|
6
|
+
|
|
7
|
+
A) Exploratory is faster; scripted is more thorough
|
|
8
|
+
B) Exploratory combines learning, design, and execution; scripted follows predefined steps
|
|
9
|
+
C) Exploratory is only for manual testers; scripted is for automation
|
|
10
|
+
D) There is no real difference
|
|
11
|
+
|
|
12
|
+
<!-- ANSWER: B -->
|
|
13
|
+
<!-- EXPLANATION: Exploratory testing involves simultaneous learning about the product, designing tests on the fly, and executing them. Scripted testing follows a predefined test plan with fixed steps. Both can be manual or involve tools. -->
|
|
14
|
+
|
|
15
|
+
## Question 2
|
|
16
|
+
|
|
17
|
+
What is a test charter?
|
|
18
|
+
|
|
19
|
+
A) A formal test plan with detailed steps
|
|
20
|
+
B) A short directive that guides exploration: Explore X with Y to discover Z
|
|
21
|
+
C) A list of all bugs found in a session
|
|
22
|
+
D) A tool used for automation
|
|
23
|
+
|
|
24
|
+
<!-- ANSWER: B -->
|
|
25
|
+
<!-- EXPLANATION: A test charter is a brief mission statement that gives direction without prescribing exact steps. It guides what to explore, with what resources, and what information to discover. -->
|
|
26
|
+
|
|
27
|
+
## Question 3
|
|
28
|
+
|
|
29
|
+
What does SFDPOT stand for?
|
|
30
|
+
|
|
31
|
+
A) A test automation framework
|
|
32
|
+
B) A heuristic for test coverage: Structure, Function, Data, Platform, Operations, Time
|
|
33
|
+
C) A bug severity classification
|
|
34
|
+
D) A type of test charter
|
|
35
|
+
|
|
36
|
+
<!-- ANSWER: B -->
|
|
37
|
+
<!-- EXPLANATION: SFDPOT is a heuristic by Elisabeth Hendrickson to ensure broad coverage across structure, function, data, platform, operations, and time—areas that are easy to overlook. -->
|
|
38
|
+
|
|
39
|
+
## Question 4
|
|
40
|
+
|
|
41
|
+
Why is a debrief valuable after an exploratory session?
|
|
42
|
+
|
|
43
|
+
A) It's required by process
|
|
44
|
+
B) It turns individual findings into shared learning, context, and next steps
|
|
45
|
+
C) It replaces bug reports
|
|
46
|
+
D) It's only for managers
|
|
47
|
+
|
|
48
|
+
<!-- ANSWER: B -->
|
|
49
|
+
<!-- EXPLANATION: Debriefs summarize findings, risks, coverage, and ideas for future charters. They add context and priorities that raw bug reports don't capture, and help the team decide what to do next. -->
|
|
50
|
+
|
|
51
|
+
## Question 5
|
|
52
|
+
|
|
53
|
+
What should a good bug report include?
|
|
54
|
+
|
|
55
|
+
A) Only a title and severity
|
|
56
|
+
B) Steps to reproduce, expected vs actual, environment, and screenshots when helpful
|
|
57
|
+
C) Opinions about the developer's code
|
|
58
|
+
D) Only the actual behavior
|
|
59
|
+
|
|
60
|
+
<!-- ANSWER: B -->
|
|
61
|
+
<!-- EXPLANATION: A good bug report enables someone else to reproduce the issue. It needs clear steps, expected vs actual behavior, environment details, and visual evidence when useful. -->
|
|
62
|
+
|
|
63
|
+
## Question 6
|
|
64
|
+
|
|
65
|
+
Drag these SBTM session steps into the correct order:
|
|
66
|
+
|
|
67
|
+
<!-- VISUAL: quiz-drag-order -->
|
|
68
|
+
|
|
69
|
+
A) Define charter → Start timer → Explore → End session → Debrief
|
|
70
|
+
B) Explore → Debrief → Define charter → Start timer
|
|
71
|
+
C) Start timer → Explore → Define charter → Debrief
|
|
72
|
+
D) Debrief → Explore → Define charter → End session
|
|
73
|
+
|
|
74
|
+
<!-- ANSWER: A -->
|
|
75
|
+
<!-- EXPLANATION: In Session-Based Test Management, you first define a charter, then start the time box, explore, end when time is up or scope is done, and finally debrief to share findings. -->
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Exploratory Testing — Resources
|
|
2
|
+
|
|
3
|
+
## Books
|
|
4
|
+
|
|
5
|
+
- **Explore It! Reduce Risk and Increase Confidence with Exploratory Testing** by Elisabeth Hendrickson — Charters, heuristics, and practical techniques. The go-to book on exploratory testing.
|
|
6
|
+
- **Session-Based Test Management** (PDF) by Jonathan Bach & James Bach — The original SBTM paper. Time-boxed sessions, charters, debriefs.
|
|
7
|
+
- **Lessons Learned in Software Testing** by Cem Kaner, James Bach, Bret Pettichord — Context-driven testing, exploratory mindset.
|
|
8
|
+
|
|
9
|
+
## Articles
|
|
10
|
+
|
|
11
|
+
- [Session-Based Test Management](https://www.satisfice.com/download/session-based-test-management) — James Bach. Original SBTM methodology.
|
|
12
|
+
- [Exploratory Testing Explained](https://www.ministryoftesting.com/articles/exploratory-testing-explained) — Ministry of Testing. Clear introduction.
|
|
13
|
+
- [How to Use SFDPOT Heuristic](https://www.developsense.com/blog/2010/02/sfdpot/) — Michael Bolton. Applying SFDPOT in practice.
|
|
14
|
+
- [Heuristic Test Strategy Model](https://www.satisfice.com/download/heuristic-test-strategy-model) — James Bach. Broader model for test design.
|
|
15
|
+
|
|
16
|
+
## Videos
|
|
17
|
+
|
|
18
|
+
- [Exploratory Testing — Elisabeth Hendrickson](https://www.youtube.com/watch?v=7LsS9Yl0NDg) — Keynote on exploration and charters.
|
|
19
|
+
- [Session-Based Testing — James Bach](https://www.youtube.com/watch?v=4QdR0Mdt-cs) — SBTM in practice.
|
|
20
|
+
- [Ministry of Testing — Exploratory Testing](https://www.youtube.com/results?search_query=ministry+of+testing+exploratory) — Various talks and workshops.
|
|
21
|
+
|
|
22
|
+
## Communities
|
|
23
|
+
|
|
24
|
+
- [Ministry of Testing](https://www.ministryoftesting.com/) — Community, articles, TestBash conferences.
|
|
25
|
+
- [Software Testing Stack Exchange](https://sqa.stackexchange.com/) — Q&A on testing topics.
|
|
26
|
+
- [Association for Software Testing](https://www.associationforsoftwaretesting.org/) — Conferences, workshops, BBST courses.
|
|
27
|
+
|
|
28
|
+
## Tools
|
|
29
|
+
|
|
30
|
+
- [Session Tester](https://www.sessiontester.com/) — Session tracking and charter management.
|
|
31
|
+
- [Rapid Reporter](https://www.theconnective.co.uk/rapid-reporter/) — Lightweight note-taking during sessions.
|
|
32
|
+
- [Azure DevOps / Jira](https://www.atlassian.com/software/jira) — Bug tracking integrated with charters and sessions.
|
|
33
|
+
- [OBS Studio](https://obsproject.com/) — Screen recording for bug reports and session evidence.
|
|
34
|
+
|
|
35
|
+
## Quick References
|
|
36
|
+
|
|
37
|
+
- [SFDPOT Cheat Sheet](https://www.developsense.com/blog/2010/02/sfdpot/) — One-page SFDPOT reminder.
|
|
38
|
+
- [Charter Template](https://www.ministryoftesting.com/articles/writing-exploratory-testing-charters) — Examples and templates.
|
|
39
|
+
- [Bug Report Template](https://www.atlassian.com/software/jira/guides/getting-started/best-practices) — Jira best practices for bug reports.
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# Exploratory Testing Walkthrough — Learn by Doing
|
|
2
|
+
|
|
3
|
+
## Before We Begin
|
|
4
|
+
|
|
5
|
+
**Diagnostic Question:** What's the difference between "running tests" and "exploratory testing"? When would you choose one over the other?
|
|
6
|
+
|
|
7
|
+
**Checkpoint:** You recognize that scripted tests verify known behavior, while exploratory testing discovers what you don't yet know. Both matter; they serve different purposes.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Step 1: Write a Test Charter
|
|
12
|
+
|
|
13
|
+
<!-- hint:list style="checklist" -->
|
|
14
|
+
|
|
15
|
+
You're about to explore a new "Export to CSV" feature. The feature lets users export a filtered list of orders.
|
|
16
|
+
|
|
17
|
+
**Task:** Write a test charter for this feature using the format: "Explore [target] with [resources] to discover [information]."
|
|
18
|
+
|
|
19
|
+
**Question:** What makes a charter too narrow vs too broad? How would you know when you're "done" with this charter?
|
|
20
|
+
|
|
21
|
+
**Checkpoint:** User writes a charter like "Explore the Export to CSV feature with various filter combinations to discover data accuracy and format issues." They understand narrow = prescriptive; broad = vague. Done when time box ends or key areas covered.
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## Step 2: Use SFDPOT to Generate Charters
|
|
26
|
+
|
|
27
|
+
<!-- hint:card type="concept" title="SFDPOT" -->
|
|
28
|
+
|
|
29
|
+
Pick a feature you know: e.g., a login form, a search bar, or a settings page.
|
|
30
|
+
|
|
31
|
+
**Task:** For each letter of SFDPOT, write one charter idea. You don't have to execute them—just generate possibilities. (Example for F: "Explore the Function of the login form with invalid credentials to discover error messages.")
|
|
32
|
+
|
|
33
|
+
**Question:** Which SFDPOT areas do you usually skip when testing? Why might that hide bugs?
|
|
34
|
+
|
|
35
|
+
**Checkpoint:** User produces 6 charter ideas. They reflect on often-skipped areas (often Platform, Time, Operations) and recognize these can hide real issues.
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## Step 3: Conduct a Mini Session
|
|
40
|
+
|
|
41
|
+
<!-- hint:buttons type="single" prompt="How did having a charter change your exploration?" options="Focused my attention,Made it rigid,No difference" -->
|
|
42
|
+
|
|
43
|
+
Pick any web app or tool you can access (e.g., a todo app, a calculator). Set a 10-minute timer.
|
|
44
|
+
|
|
45
|
+
**Task:** Run a mini exploratory session. Charter: "Explore [pick one area] with [a constraint] to discover [something]." Take notes as you go: what you tried, what you saw, any bugs or questions.
|
|
46
|
+
|
|
47
|
+
**Question:** How did having a charter change your exploration compared to "just clicking around"?
|
|
48
|
+
|
|
49
|
+
**Checkpoint:** User completes a short session with notes. They notice the charter focused their attention; they found at least one observation (bug or quirk) they might have missed without structure.
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## Step 4: Write a Bug Report
|
|
54
|
+
|
|
55
|
+
Suppose during exploration you found: When you paste a long URL into a "Share link" field, the Save button does nothing and no error appears.
|
|
56
|
+
|
|
57
|
+
**Task:** Write a bug report with: title, steps to reproduce, expected vs actual, and environment. Aim for clarity so a developer can reproduce it without talking to you.
|
|
58
|
+
|
|
59
|
+
**Question:** What's the risk of writing "sometimes it doesn't work" without clear steps?
|
|
60
|
+
|
|
61
|
+
**Checkpoint:** User writes numbered steps, clear expected/actual, and environment. They understand vague reports waste time and block fixes.
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## Step 5: Plan a Debrief
|
|
66
|
+
|
|
67
|
+
You've just finished a 90-minute session on a checkout flow. You found 2 bugs and noticed the "Apply coupon" field behaves oddly with special characters.
|
|
68
|
+
|
|
69
|
+
**Task:** Outline what you'd cover in a 10-minute debrief. What would you tell the team? What would you ask for?
|
|
70
|
+
|
|
71
|
+
**Question:** Why is a debrief valuable even if you've already filed bug reports?
|
|
72
|
+
|
|
73
|
+
**Checkpoint:** User lists: bugs found, risks (coupon field), coverage (what was/wasn't tested), suggested next charters, blockers. They see debrief adds context, priorities, and ideas for follow-up that raw bug reports don't.
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## Step 6: Combine Exploratory with Automation
|
|
78
|
+
|
|
79
|
+
<!-- hint:diagram mermaid-type="flowchart" topic="exploratory and automation workflow" -->
|
|
80
|
+
|
|
81
|
+
Your team has good e2e coverage for happy paths. A new "Bulk actions" feature was just added.
|
|
82
|
+
|
|
83
|
+
**Task:** Propose how exploratory and automated testing could work together. When would you run exploratory? What charters might fill gaps that automation won't cover?
|
|
84
|
+
|
|
85
|
+
**Question:** What kinds of bugs does automation typically miss that exploratory can find?
|
|
86
|
+
|
|
87
|
+
**Checkpoint:** User suggests: exploratory first on new feature to find risks, then automate critical paths. Automation misses UX quirks, odd input combinations, cross-browser issues, performance under load—exploratory can target those with charters.
|