This is an old revision of the document!
Testability, Testable, Testing and Test are not synonyms for each other. Just because a system or program is undergoing testing using various tests does not necessarily mean that the system or program is actually Testable. The following table provides definitions for each of these four terms, associates each with the appropriate Structured Assurance Case, as well as, level in the Cognitive Model's Science and Knowledge Management DIKW (Data, Information, Knowledge and Wisdom) pyramid.
| DIKW pyramid level | Structured Assurance Case | Term | Description |
|---|---|---|---|
| Understanding | Software Assurance (SwA) | Testability | Testability is about documenting the functionality and requirements for a system or program and verifying that these requirements will be or have been met. Functional requirements are generally not a problem since most of these are directly measurable or observable. Functional requirements are often directly measured or observed: a data field needing to be provided, a relationship existing between two pieces of data, or a relationship that is one-to-many or a many-to-many. For example, every person must have a unique company ID number but they may have multiple phone numbers and also belong to multiple organizations. Other functional requirements are not so definite, but expressed in terms of a range of acceptable values. For example, a Graphical User Interface (GUI) will respond in less than 5 seconds or the heart pulse rate is between 35 to 200 beats per minute. In contrast, non-functional requirements are generally more abstract: they relate to the quality of the system or program being delivered (i.e., portable, reliable, maintainable, secureable, scalable, et.) and are usually are not directly measurable or observable but must be inferred from characteristics found in the delivered system's or product's architecture, design and implementation. These kinds of requirements require ways to characterize assurance and are specified as claims (i.e., the system has a High Availability ) which require sub-claims, arguments (i.e., Availability can be predicted by using the Mean Time To Repair (MTTR)) of 5 minutes, 15 seconds or less of downtime in a year for all components. These kinds of requirements are generally specified in a Performance or Functional Specifications and their is tendency to only describe hardware specifications, but the performance specification can also capture non-functional metrics as well.
Another problem when reviewing requirements and trying to determine if they are actually “testable”. Here is a list of some common “mistakes” found in requirement documents1):
|
| Knowledge | Claim | Testable |
A Testable attribute of a system or program is a functional or nonfunctional requirement is testable or not. All requirements can not be tested. Some requirements can be directly tested for by running specific tests (i.e., Unit Testing, integration testing, etc.) using test plans that exercise the portion of the system or program software responsible for providing the functionality. For example, the system is suppose to offer the choice of Other requirements are not directly testable by design and therefore are untestable. Often, these requirements are met through the use of mathematical proofs or demonstrations. For example, the generation of a Universally Unique IDentifier (UUID) can not be tested directly, but the algorithm must provide an explanation and a proof that no two sets of conditions can produce the same UUID. Often there is a risk of generating the same UUID, but the chances of the UUID being used in identical is even smaller. Another example would the reCAPTCHA which shows a series of photos and asks the user to identify the one with green peas in it. The order of the photos and the thing it is asking you to identify are randomly assigned. |
| Information | Argument | Testing | Testing is a process that generally involves the execution of the system or program under scripted, controlled situations. The scripts can be human instructions in documents or they can be captured in text files that a testing engine uses to drive the software. Sometimes, a Unit Test is used to test the individual modules before they are integrated into the system or program. There are various requirement conformity checks that can be done to verify functional requirements: |
| Data | Evidence | Test | Is about collecting the evidence used to support arguments, sub-claims and claims made about the system or program. There is not a one-to-one relationship between a Test, an Argument, Sub-Claim or a Claim. Instead, one piece of data can support multiple Arguments, an Argument can support multiple Sub-Claims or Claims. That is why it is so important to have a Structured Assurance Case Model. |
TBD - to be added/expanded in future revisions of the DIDO RA