After having established the requirements, a software architecture is made, reviewed and approved. It contains a system context diagram, system interfaces (towards hardware or other software systems), architectural layout, division into units and inter-unit interfaces. For a complex software system, also detailed designs are made to allow correct implementation.
Implemented software code must be subjected to debugging, code reviews (by peer developers), coding standards, memory leakage and test coverage tools dependent on the risk level (A, B, C). Software code is unit tested resulting in a test report per unit. Acceptance criteria defining when a test passed or fails must be defined.