Why do we test?
- To make informed decisions about expected quality when releasing software
- To guide requirements elicitation, by identifying (simple to understand) execution scenarios. 3. To guide the design of the software that we create.
How we test our software?
Test Execution
- In modern software development, we release often
- Releasing often implies testing often, Automate test execution as much as possible
- Build a testing system aimed at exercising the system under test and verifying the observed behavior.
Test Design
- Test design begins at the start of your project
- Decide which (of the infinitely many possible) test cases to create
- Maximize information gain
- Minimize cost
Test strategy
- A systematic approach to arrive at test cases
- Targeting specific types of faults
- Until a given adequacy criterion is achieved.
What do we test?
- Different levels of granularity
- Unit testing ,Integration testing , System testing
- Functionality (old / new), Security and Performance
Software testing is all about making trade-offs. It becomes easier with experience, for instance strategies, patterns and processes are codified experience. It helps in analyzing successes/failures and report on those, propose implement and evaluate novel testing strategies. To be a successful software QA engineer, one should be able to reproduce hundreds and even thousands of users in terms of different interactions as well as developers weakest points. Ensuring the quality is a norm for any organization which is willing to scale up and build reputation. This can be attained by understanding different methodologies of software testing approaches and types. The main strategies that software testing build on top of can be understood from Figure 1.
Figure 1 QA Engineering Roadmap
The aforementioned strategies should be used by software tester and developer to ensure the proper workflow for a product. Moreover, this provides an overview of the role of QA engineer in software development lifecycle. Now let’s focus on Testing aspect!
The very first layer of testing which is manual testing effort is depicted below.
Figure 2 Manual Testing Roadmap
is an essential aspect, more of a skill that one need to develop, grow and pay attention to. Troubleshooting Determining the exact root cause for the problem will solve multiple issues as well as saving development time.
So what’s all about automation testing?
Automation Testing is the latest and modern way of testing to get rid of duplicated workload. The automation testing roadmap in Figure 3 provides a complete overview.
Figure 3 Automation Testing Roadmap
There is a shift towards automated testing, for example Mercury Interactive a significant player in automated testing announced partnership with major security testing companies, assisting them by supplying app vulnerability detection tools. Does this denote QA specialists will become security pros? Rather the contrary. We anticipate to view more integrated methods allowing QA testers to remain with automatic testing, without the need to understand the underlying security technologies. we shall probably notice that a shift towards some kind of workflow in which the owners of security procedures make the ideal tests and also the QA professionals execute and measure towards those tests.
We also ought to expect you’ll watch QA teams proceed in technical testing into areas of compliance testing as well. For instance, for compliance with assorted state and national privacy legislation, QA teams could determine which web pages do not reference a solitude policy or that pages leak sensitive information in the URL of a form entry.
More theory!
Developers need to have a good testing strategy and be confident in the code they ship. Ideally QA testers should be either optional or working on developing, running and maintaining automated and integration testing. A good rule of thumb is when a QA tester finds a bug, developer should write a unit test before fixing the bug and then make it pass with the fix. Let’s try to understand the common types of defects in software.
Common Bugs:
Business Logic, Security bugs, regression bugs, performance and accessibility bugs, UI and integration bugs.
As seen earlier in the roadmap, two common ways to approach testing as a user and developer are white box and black box testing.
White box testing is when we inspect the source code and verify whether it works according to the specifications. Blackbox testing is done when we don’t have access to the source code and only external interface produced by the code.
Test Pyramid
The usage of test pyramid is to illustrate that unit tests are easy to write. Integration tests that are expensive, to reduce this end to end tests are employed. If an end to end test catches a bug then it denotes something is wrong in unit or integration test.
Figure 4 Test Pyramid
Test Levels and Types
Unit Testing : Fast, low-level tests with small footprint written by developers to test stability of isolated units of code.
Integration Testing: Verifying if how two or more components of modules integrate
System Testing: Known as end to end testing, where unit and integration tests are testing parts of the system, while this one is targeting the system as a whole.
Acceptance Testing: System is tested for acceptability. Evaluate the system compliance with business requirements and assess if it is acceptable for delivery
Test types
Functional testing is using software to check if its behavior matches the expectations. Nonfunctional testing focuses on usability, reliability, maintainability and other attributes. It answers the “how” question, for example function’s performance when it returns a specific value.
Performance testing is self explanatory. It checks how fast the application loads, how responsive it is, and its reliability under high load. Security testing should be done by security specialists. It can also be performed as an audit. It’s highly likely for e-commerce websites to undergo security testing on the regular basis and have random audits. Regression testing checks if new changes to the system have not broken existing functionality or caused old bugs to reappear. It’s done by re-running all tests on the system. Smoke testing focuses only on the most important functions work. This testing is performed to make sure the system is stable enough for users to do basic actions (like search for hotels or log in with email/password). It’s usually done right after production deploy to check if the server is running and everything looks okay. Smoke testing can be part of continuous deploy cycle.
In a nutshell the role requirements of a QA engineer includes, the first step is to analyse bugs in the software with a aim of determining the source. Analyze why and how did a defect find a way into the software. The second step is to define a set of actions and procedures to avoid appearance of same bugs in the future. In this regard, define a set of guidelines and standards to prevent this type of failure in future, improve the quality of requirements by creating a checklist of what good requirements should cover. Understand the processes and structure in order to analyse and improve software quality.
Conclusion:
Software development is a cumbersome process which involves specialists from various arenas. Quality Assurance is an arena which shadows software development, starting with collection of information, requirements and ending with testing rollback scenarios. So the ultimate aim has to be able to detect errors as soon as possible, analyse them, create a process to reduce or eliminate the bugs. In turn, this helps in reducing costs, and supports quality. Hence it is a smart business decision to invest in effective QA software and ideal to have a team of reliable QA engineers.