Software Testing
Quality control in software development projects
19 August, 2020 by
Software Testing
manaTec GmbH, Konrad Sawade
 

For us as an IT service provider with a high proportion of software development projects, software testing plays a crucial role. Here, we do not just aim to test our developments for completeness and functionality; rather, it is about precisely capturing our customers' requirements, meeting their needs, and thus achieving maximum customer satisfaction.

So, in today's blog, we're going to look at software testing and specifically what software testing is, why we should do software testing, and how we can do our software testing regarding our developments in the Odoo open source ERP system.

Software testing ensures the quality of software developments.
Software testing ensures the quality of software developments.

What is testing?

A software test is defined very differently. One definition is provided by Ernst Denert, according to which "testing [...] is the verifiable proof, repeatable at any time, of the correctness of a software module relative to previously defined requirements". Another, more comprehensive definition is provided by Martin Pol, Tim Koomen, Andreas Spillner: "Testing is the process of planning, preparation, and measurement, with the goal of determining the characteristics of an IT system and showing the difference between the actual and required state."

The categorization of software tests.
The categorization of software tests.

Software tests can be divided into four possible categories, unit tests, integration tests, system tests and acceptance tests. Within the four categories, we test at different levels.

Unit testing involves testing individual components, i.e. units, in a separate source code. This enables us to identify and eliminate errors during further development or when changes are made. At the next level, we perform the integration test. This involves testing not only individual components, but also the dependencies between different components. In this way, we can already run through individual process steps, test the interaction of the individual components and eliminate sources of error.

During system testing, we check all requirements in a defined test environment, i.e. a test system. Ideally, the test system is modeled on the production system. We test functional requirements, meaning the defined functions, and non-functional requirements, e.g. usability. The system test thus represents the immediate preparation for the acceptance test. This acceptance test is usually performed directly by the customer. During this test, the customer checks whether the development meets the previously defined requirements. We can then hand over the software development to the customer.

Why should we test?

It is recommended to test in the above or similar categories, because we can say that the later an error is discovered within a development, the greater the effort to fix it.

In theory, there is a type of factor rule for that. If the developer discovers an error himself, for example during a unit test or an integration test, he can fix the error directly. The factor for this is 1.

If a bug is discovered by a test person, the factor is already 10. The test person must document the error, communicate it to the developer and hand it over. The developer must then revise the development and update the test system before the tester can test again.

The factor for detecting an error in the production system is already at 100. In addition to the aforementioned scenario, the developer must also correct the development in the production system and update it. A very high communication effort as well as the increasing dissatisfaction of the customer can follow from this.

We can see, that the different test scenarios are important, in order to arrange the interaction between requirements, quality, speed and price of the conversion as well as the satisfaction of the customer in a balanced way. With the software testing we guarantee thus the delivery of a product, which fulfills not only the functional and qualitative requirements to us, but thus also the needs of our customers.

How can we perform our software development in the open source ERP system Odoo?

Basically, the topic of testing should play a role directly with the idea for an adaptation to Odoo. With the idea come the requirements and wishes, and with them the knowledge of what valid and expectable results, as well as invalid results are. These valid and invalid results should also be recorded for each requirement, because the later test cases can be derived from them.

If the requirements are specified, the kind of the software tests can be specified per requirement. For each requirement, the test cases are then specified per type. By default, we perform system and acceptance tests in each of our projects, while the use of unit and integration tests varies depending on requirements, customer needs and complexity. For example, these are not necessary for requirements that are fulfilled using Odoo's in-house methods.

We also carry out extensive software tests for our developments in Odoo.
We also carry out extensive software tests for our developments in Odoo.

If a development is necessary for a requirement and unit tests and/or integration tests have been specified for it, these are developed in parallel with the implementation of the requirement. Odoo relies on established frameworks here and does not reinvent the wheel. In the Python area, Odoo therefore relies on unittest and in the JavaScript area on QUnit. This means that the tests are regularly run during development in order to identify errors in the development or during customization.

If the development including tests is completed and there are no more open errors from the developer's point of view, the transition to the system tests takes place. If these are also successful, the acceptance tests take place and the development is handed over to the customer.

Similar to the tests in development (automated tests), the system and acceptance tests (manual tests) can also be performed several times. This depends, for example, on the result or whether the requirements change in the process. The most important point in the test execution is the comparison of the target state with the current actual state. The results are then documented and any errors communicated to the developers. If there are no more errors, the process can be continued. Otherwise, a loop is necessary.

Our conclusion

In any case, the software tests are an important instrument for quality control and assurance of our developments and help us to implement the requirements of our customers precisely and in the best possible way. With the help of the tests, we avoid errors in the development or further development of new functions. Nevertheless, the software tests represent an additional effort in the development process, which has a negative impact on the cost efficiency of the development projects.

However, both the client and the contractor should be aware of the advantages of software testing and make goof use of it. The resulting additional effort is likely to be significantly less than the rework that arises due to possible development errors or unforeseeable circumstances and must ultimately be implemented anyway with regard to a successful project completion.

Would you like to learn more about software testing or are you interested in introducing or further developing Odoo in your company? Contact us now and we will be at your side as a reliable IT service provider and Odoo partner!


Sources: www.wikipedia.org, www.t3n.de, SpringerLink - Testmanagement und Softwaretest, www.odoo.com

 
manaTec in the ERP Podcast Part 2
An interview with our managing director Robert Duckstein about the use of Open Source and Odoo as ERP system