The software is used as intended in the intended environment. Validation shows whether the software meets the user's expectations with respect to its function.
Validation should be "structured", i.e. planned according to previously defined criteria, e.g.:
Verification checks whether the software fulfills the defined requirements correctly and completely.
Verification should be "structured", i.e. planned with previously defined criteria, e.g.:
Tests alone are not sufficient to ensure good software quality. Software is generally too complex for all errors to be found using testing. Therefore, the structured, correct creation of the software must be ensured as well. This happens among other things by reviews or analyses during design and implementation of the software.
Note: Guidelines for design and implementation are also important. However, these are not part of verification or validation and are therefore outside the scope of this article.
There are different structured and formalized approaches for reviews:
No less important than the procedure is the structured control of the aspects to be inspected. This is done, for example, through:
The fact that software tests are necessary to ensure quality is probably obvious for everyone. But on which levels of software development such tests are useful or even necessary often leads to lengthy discussions.
Unit tests check the smallest parts of the software individually. Thus it is typically possible that all code parts are executed at least once during the tests (see also below: Code Coverage). Typically, unit testing is understood to be the testing of individual functions.
Depending on the number of hierarchal levels on which tests are performed, a different approach can be useful: instead of a single function, a test case covers several functions including their interaction. In this way, initial integration problems can already be detected at the lowest test level.
Unit tests should usually be performed with tools specially developed for this purpose. The reasons for this are:
For embedded software it is generally useful if software tests are performed on the target hardware. This is particularly important for integration and software tests (see the following chapters). Depending on the required quality, unit testing on the development system (PC) may be sufficient.
A part of the software, several integrated units, are tested. The correct cooperation of the units at their interfaces is verified.
The software is tested as a whole. I.e. we check whether the software shows the correct behavior with defined inputs, e.g. makes the correct outputs.
The definition of the test cases of software-, integration- or unit-tests is not trivial. In the end, the quality of a test does heavily dependent on the "engineering judgment" of the author.
However, there are methods that allow a structured, repeatable creation and assessment of the quality of tests:
Structured Definition of Test Cases based on Guidelines/ Check Lists
The tests are defined based on guidelines. These specify, for example, the aspects to be tested. Examples are:
Analysis of Requirements Coverage
Establish traceability of test cases to requirements to analyze the coverage of requirements by tests in a structured way.
Analysis of Code Coverage
Modern test tools allow to capture the code coverage during test execution. This analysis is used to check whether the defined test cases will test the entire implemented functionality or not.
Depending on the type of tests and the desired quality, different metrics can be used., e.g.:
Basically, it must be assumed that errors will happen when creating software and that errors will also be overlooked when implementing a verification method.
Therefore, it makes sense to apply multiple verification methods at different levels (e.g. unit-level
software) in order to have a "safety net" that can detect potential errors. Depending on the required quality, this "safety net" can be coarse- or fine-meshed.
Quality standards (e.g. CMMI) or safety and security standards provide information about which methods are useful for which quality requirements.
Depending on the required software quality, a suitable set of verification methods is selected based on their cost-benefit ratio.
The following list shows established principles sorted by typical cost-benefit ratio:
Projects? Ideas? Questions? Let's do a free initial workshop!
No Comments