Software is an intangible product, the only observable representations of software are the source code, the user interface and documentation (specification). The amount of source code (number of lines) is rarely known, which often leads to an underestimation of the complexity of the software.
For each module of the software, there are many conditions. The combination of different conditions of the various modules of software leads to a combinatorial explosion. During its construction, software is never tested in all conditions it encounters under full operation.
Another reason is that there is no link between minor and major defects and minor or major modification. Effort deterioration is not proportional to the development effort.
A minor fault can cause a major incident and require correction. In the event of flight 501 Ariane, a minor correction would have sufficed to prevent the destruction of the rocket. Even a minor modification of a software can render it useless.
To be considered as a quality product by the user, software must meet the needs expressed explicitly by the user as well as implied needs. But implicit wishes evolve with the market, and it often happens that the implicit wishes of users are not known by engineers.
In software development NZ, the factorization of data and code are the universal means of obtaining quality. Factorization of data leads to the object model, the corresponding systematic relationship is ideal when standard.
When the data structures are well standardized, they become non-redundant, so minimal in size. This work in the data itself allows the reduction of processing code exploiting this data. Performance does not suffer if the queries are well organized.
Regarding the code, its factorization can only write once similar instructions through rational use of intermediaries and local variables, loops, functions and procedures. This allows minimizing the size of the source code (normally without loss of legibility), and the changes are as local as possible (therefore faster and more reliable in terms of regression).
Factorizations identify good abstractions, structure and allow the best possible control of data integrity. In addition to good execution of processes whose functions require several points of the source code to be reused.
This work allows an application to be modular. These modules are the services. Their interface is clear and without side effects, the processing they realize becomes hidden (black box) for the client modules. The coupling between a module and its calling modules becomes as small as possible because only the parameter values vary from one call to another are passed as parameters.