warehouseLearn 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)arrow-up-right.

circle-check

Below is a partial recreation of Bach's HTSM. Access the content in its entirety here for freearrow-up-right.

What
What to consider

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.

chevron-rightSFDIPOT applied to the triangle softwarehashtag

Structure

  • How is the product distributed and how is it installed (single binary, script, package)?

  • Is there accompanying documentation or "help" manual? Is it complete, accurate, and written in a way that is clear to the end user?

Function

  • Business rules: valid triangle constraints (sum of 2 side lengths > length of 3rd side, valid and invalid inputs, etc.)

  • Multi-user: how will it behave when run by many users from many shells? What if it's invoked by other programs making many simultaneous calls?

  • 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?

  • Any way to exit the app without force-closing it?

Data

  • Does the product output data to the terminal only? Or can it take extra arguments and save to a file or other? If so, all the usual file handling questions arise.

Interfaces

  • Are the triangle formulas hard-coded into code, or are they pulled from disk or network? If so, this leads to many corresponding questions - what if the file is not there, what if the file is locked, what if the remote request fails, etc.

Platform

  • What OS can the software run on? Windows, MacOs, Linux? What versions are supported?

  • What is the tech stack of the product?

    • Java? What version? What is the minimum JRE (Java Runtime Environment) version that the client machine must have? Do we assume the client machine has it already?

    • Similar questions if the software is written in C#(.NET), Python, or other languages

  • Does it work consistently across all supported shells (Bash, PowerShell, zsh) ?

  • Could the product be blocked during or after installation by an antivirus or another process?

Operations

  • Can the product itself, or some of its operations, be restricted to a user role (admin, guest, other)?

Time

  • How fast is the response? What is the slowest acceptable response time? How will it perform with 99% or 100% memory or disk usage?

  • What if you launch it and leave it for hours or days? Does it time out or leak resources?

Last updated