Learn The Product: SFDIPOT
Overview
You're new to a project. You must learn the product or the SUT (System Under Test). It's great if the documentation is reasonably complete and accurate, but even if it is poor and outdated, your approach to discovering the SUT does not have to be random or scattered.
SFDIPOT (previously SFDPO), pronounced as "San Francisco Depot", is a mnemonic created by James Bach and is part of his Heuristic Test Strategy Model (HTSM).
SFDIPOT serves as a systematic SUT exploration framework, a checklist, and later a generator for test ideas.
Below is a partial recreation of Bach's HTSM. Access the content in its entirety here for free.
Structure
Everything that constitutes the physical product: Code, hardware, service (supporting server or process)
Function
Everything that the product does: Business rules: constraints on input fields, conditional behavior, boundaries Multi-user: concurrent actions Calculations Security-related: rights, privileges, data protection, encryption State Transitions Error Handling
Data
Everything that the product processes and produces: Input/Output data Preset: e.g. default data Persistent Interdependent: any data that influences or is influenced by the state or other data Sequences/Combinations Invalid/Noise: corruption, out of bounds Lifecycle: transformations over data lifetime
Interfaces
Every conduit by which the product is accessed or expressed: UI, Web API, System (disk, network, DB), other
Platform
Everything on which the product depends (and that is outside your project): External hardware and software: whatever is not part of the product but is required for it to work (drivers, certificates, keys, etc.) Product footprint: resources used or consumed (memory, filehandles, etc.)
Operations
Everything on which the product depends (and that is outside your project): Users: normal, admin, developers Common use: typical user behavior Uncommon use: periodic expected activity (backup, updates, downtime for maintenance) Disfavored use: ignorant, mistaken, careless, malicious
Time
Any relationship between the product and time: Time-related data: time-out settings; time zones; holidays; terms and warranty periods Pacing: testing with fast or slow input; variations of fast and slow (spikes, bursts, hangs, bottlenecks); interrupting or letting it sit
Applying the Mnemonic: an Example
Let's apply SFDIPOT to a variant of a classic testing exercise, the triangle software, to demonstrate the mnemonic's usefulness.
Problem statement: You are given a CLI tool. The program reads three integer values from an input dialog. The three values represent the lengths of the sides of a triangle. The program displays a message that states whether the triangle is scalene (no 2 sides are equal), isosceles (2 sides equal), or equilateral (all 3 sides are equal).
Example: > triangle 1,1,1 Output: Equilateral
The usual focus of this exercise is to test one's knowledge of EP & BVA, perhaps also Elementary Comparison, as well as the ability to construct a structured test suite. This is where testers usually think of valid combinations as well as invalid values (zero, negative, non-number, number with decimals, Max_Integer + 1, missing values, etc.). INSTEAD, use SFDIPOT to explore the software deeply and thoroughly. Exploration means asking useful, meaningful questions about it that might lead you to write additional tests. Do NOT ASSUME that the program is a single file with everything hard-coded in it.
As inspiration, here are two questions that one can come up with:
F - Function. Error Handling - if the user provides invalid values, is "Output: Invalid" really enough? Should we improve the program to output the reason why the triangle is invalid?
P - Platform. Is the program written in Java? If so - is the machine expected to have a JRE (Java Runtime Environment) installed to run the program?
Try and think of as many questions as you can. Once done, check the non-exhaustive example below. Admittedly, a lot of it is applicable to software in general.
Last updated