Modeling
Definition:
The ability to create a representation of another thing
A context where I used this skill:
Test modeling has been used in almost situation of software and system, including:
- GUI modeling of a game app landing page
- Logic control flow of car engine controller
- Signature page (user and password) of a banking app for security testing
- Data input space of a numeric calculator program using combinatorial data test model (link to combinatorial skills?)
- Tester mental models
- System transaction flows
and many others at both high (system) and low (code) levels. Do not use partial models if you are doing checking of requirements for verification.
The ability to use models in support of testing. Models can be mental, logical, pictures, language based, etc… Modeling can be used to restrict the combination explosion of states and data that software can suffer which impacts the ability to test. Often the test will use this skill abstract aspects of the system or software into a simpler concept which is testable. This is done by selecting some aspect of the software such as the data inputs, logic, options, actions, risk, error, or some other element of the software. These become “abstract” representations of the concept, item, or software. This allows testers to better understand and reason about the model abstraction.
Models can be mental (in the testers head) or real (some representation expression). Mental models are perhaps of the context testers best friend. Mental models can be developed by exploratory actions, adhoc testing, history (testing of past systems or being a help desk person) or research (reading things such as user guides or talking with users). Mental models can be capture into lists, spreadsheets, or mind maps, but as these “tools” are used the mental model moves from purely mental to something more physical (real).
Real or physical models can be captured by many techniques. A few of these technique skills are captured in the following pages/links. A key concepts for this skill the using groupings, arrangements, layers, and/or abstraction to restrict the model and avoid state space expansion (explode). Real modeling skills use techniques to capture the interesting aspect of software into a notation that other people can understand and or use. In some cases the uses can include: test data generation, test case generation, coverage measurement, oracle generation, risk classification, test management, test planning, and other useful testing concepts.
In no case should a model used to support testing be assumed to be complete or correct. Remember G. Box “All models are wrong, some models are useful”.
How I’d recommend someone learn this skill:
This skill area is arranged in a tree hierarchy. Modeling is a general skill made up of sub skills and in some cases sub—sub skills with supporting techniques. The reader should follow the links below for the details of these skills, support context stories, and references/learning materials. There are also general references to modeling provided in this document:
- Approximation models — math based
- State Model
- User Behavior Modeling (models for testing)
- System Dynamics Modeling (models for testing)
- Social System Dynamics (models for testing)
- Visual Models of Risk (for risk based testing)
- Black box and white box modeling (based in techniques to support testing)
- Test Process Modeling
- Test Mind Mapping
- Expressive representation languages: SysML and UML
- Modeling Tools Usage
Additional resources:
- The Art of Software Testing, Glendford Myers - this is a general book on software testing (the grandfather). It contains modeling concepts that every tester should know
- Black Box Software Testing, Boris Beizer - this books is a collection of state modeling concepts applied to specific black box problems areas
- Anne-Marie Charrett’s blog on modeling in software testing
- Practical Model Based Testing: A Tools Approach
By: Jon Hagar