Software verification is a broad and complex discipline of software engineering whose goal is to assure that a software fully satisfies all the expected requirements.
There are two fundamental approaches to verification:
Dynamic verification , also known as Test or Experimentation
Static verification , also known as Analysis
= Dynamic verification (Test, Experimentation) =
Dynamic verification is performed during the execution of a software, and dynamically checks its behaviour; it is commonly known as Test phase.
Depending on the scope of tests, we can categorize them in three families:
Test in the small : a test that check a single funtion or class (Unit test)
Test in the large : a test that check a group of classes, such as
Module test (a single module)
Integration test (more than one module)
System test (the entire system)
Acceptance test : a formal test defined to check acceptance criteria for a software
Functional test
Non functional test (performance, stress test)
Software verification is often confused with software validation. The difference between verification and validation :
Software verification asks the question, Are we building the product right ; that is, does the software conform to its specification.
Software validation asks the question, Are we building the right product ; that is, is the software doing what the user really requires.
= Static verification (Analysis) =
Static verification is a process to check some requirements of a software doing a physical inspection of it. For example:
Code conventions verification
Bad practices detection
Software metrics calculation
Formal verification
= References =
Carlo Ghezzi, Mehdi Jazayeri, Dino Mandrioli: Fundamentals of Software Engineering , Prentice Hall, ISBN 013099183X
= See also =
*[
http://why.lri.fr/index.en.html Why: a software verification tool]