This time were talking about software testing, one of the most important processes in software quality assurance, which I might say a lot, but NOW I’m really meaning it (Not that I didn´t meant it before, it just really important this time). The definition of software quality is “an investigation done with the purpose of informing stakeholders about the software’s quality of the service or product. It pretty much means that the tester checks that the product is behaving as it should, and if they find errors, they solve them. Software testing has a defined process which is divided in 5 steps:
1. Planning
In this step we determine the scope of the test and the risks of it, we also define the materials to be used, the sources the test needs and we give an estimate of the test dates.
2. Creation of scenarios
In this step we define the expected outputs of our test, and the scenarios of the test are written. The scenarios of the test should range between simple and diverse, so that the test itself can achieve a validity.
3. Preparation of test environment and data creation
In this step the preparation of the test are administered, the project should be installed in the test environment, the data to be used in the project should also be provided and prepared with accordance of the project reach.
And the test environment itself is tested so it doesn’t generate a problem during the test itself.
4. Run the Scenarios.
Simplest step, the scenarios previously created are applied and the tests are run. All the scenarios should be applied successfully but time constrains may make this a little too tough.
5 Report the results
A report of the result is created so that the stakeholders concerned are communicated, it should be noted that this report should use a basic language as possible, and it can present some videos or photo to help illustrate the results.
After all this explaining it should be clear what the general process of software testing is, but this process is applied even further as there are different types of software testing:
- Unit Testing
- Integration testing
- System Testing
- Acceptance testing
Unit testing, which is usually done by developers test whether a piece or block of code is doing its purpose. In this case we want to test a piece of code that calls another one and to isolate that piece so that we can verify its functionality.
Integration testing is done by testers, this one checks the combination of various parts in conjunction and their functionality as a whole. For example, if in a user interface test a button isn’t working, all the part that compose that user interface are considered as faulty. So, in integration testing we test the operation of two or more code blocks.
System testing is a test of the system as a whole (Shocking I know). If the previous tests are done in one or a group of code block, this test is done on the whole system, and it’s performed by QA testers. For example, testing an application and making sure that all of the functions are being processed as it was designed, if a bug is found during this test it usually means that the previous test were incomplete.
Acceptance tests are performed by end users, and its purpose is to confirm that the product is considered successful by a group of users.
Now in every software quality test there is usually a team or group of persons behind it, and these people have defined tasks and roles, so let’s do a breakdown of these. A group of quality testers is made up of, usually these roles:
· Software tester:
o Responsible for designing testing scenarios for usability testing.
o Responsible for conducting the testing, thereafter, analyze the results and then submit his observations to the development team.
o He may have to interact with the clients to better understand the product requirements or in case the design requires any kind of modifications.
o Software Testers are often responsible for creating test-product documentation and must participate in testing related walk through.
· Software test manager:
o Responsible for all interdepartmental meetings.
o Interaction with the customers whenever required.
o Responsible for recruiting software testing staff.
o Schedule testing activities create budget for testing and prepare test effort estimations.
o Carry out continuous test process improvement with the help of metrics.
o Check the quality of requirements, how well they are defined.
o Trace test procedures with the help of test traceability matrix.
· Software test Automator:
o Be able to understand the requirement and design test procedures and test cases for automated software testing.
o Design automated test scripts that are reusable.
o Ensure that all automated testing related activities are carried out as per the standards defined by the company.
Another important aspect of software testing is the environment of your tests, while you could have all your tests in one environment it is recommended that for some types of tests your environment is prepared for the specific situation. We have four different types of testing environments, which are:
Integration Testing Environment
For this type of environment you don’t need a specific need of your environment, given that the tests that are applied are integration test, with an environment that can support these and has access to the basics and has the configuration and management of application servers, web servers, databases, and all the infrastructure needs of the application, you’re good.
Performance testing environment
Int this case the tests that is going to be applied is the system test, but you’re probably want to check how your product performs, so in this case you’re going to need multiple environments that has different kinds of configuration and characteristics, like: number of CPU cores, size of RAM, concurrent users, Volume of data, etc.
Security Testing Environment
For this case of testing we need an environment which is devoid of security flaws (kind of impossible, I know) because these test are the ones with online services integrated, so when you’re running your system test you need to do a security test. Some of the rules for these tests are:
- Have an isolated test environment.
- Have non-disclosure agreements in place.
- Don’t leave the system in a worse state.
- Don’t touch production data
Chaos Testing Environment
This is one is a bit complicates, so according to chaos theory: “Chaos engineering is the discipline of experimenting on a system to build confidence in the system’s capability to withstand turbulent conditions in production.” So, we need an environment that has the ability to test the high-availability, disaster recovery, and business continuity provisions configured in each service crucial to improving the reliability of your whole system.
The next part to discuss is the test case design techniques, but this part is so long that it would take a dedicate blog entry for me to finish explaining all of them so we will just catalog them:
We can group the techniques depending on the test case itself, for the techniques that derive from a requirement specification or a black box test design are:
- Boundary Value Analysis (BVA)
- Equivalence Partitioning (EP)
- Decision Table Testing
- State Transition Diagrams
- Use Case Testing
The next set of techniques derivates directly from the structure of a system:
- Statement Coverage
- Branch Coverage
- Path Coverage
- LCSAJ Testing
And the last set derivates from the developer previous experience:
- Error Guessing
- Exploratory Testing
And that’s all for today, writing this blog has been a bit tougher than expected, but it has been more fun too, the next blog might be the last one, so see you then!