If you aspire to be or you already are a Senior in Software Industry you must understand the language used in all the development cycles of the project, and testing its one of the most important, because its about quality to the end user (at least). Besides this, sometimes its necessary to develop the project thinking about the kind of tests that will be done in the product, for instance, if there will be an automated test in your product maybe you have to prepare the architecture and code to facilitate the implementation of this kind of test (without compromising the core behavior of the application). One example of this is the use of the inversion of control and dependency injection patterns, they facilitate a lot the using of Mocks, which are very used in unit testing and other types of testing. So now you have a software decision in the architecture because of the way you will want to test your application.
Usually the first tests after each release before the application goes to the “real” testing. It tests major behavior of the application to see if it is minimally stable before it can go to regression and functional testing. Just tests major functionality, like open windows, see if buttons are working, grids are displaying results. It tries to detect major problems in the application before going to test.
The name Smoke Test comes form the way some hardware was tested, you switch on the hardware and observe if there is smoke arising. Other examples are from plumbing, where artificially smoke is injected in the pipes to see if there are leaks.
As the name says the objective is to test the functionality of the application against the functional specification document. One of the most important tests because it tests the purpose/conformity of the application.
Non Functional Testing
If functional testing tests the functional requirements, the non functional testing tests the non functional requirements, like performance, compatibilities, ergonomics, security, stress, reliability, scalability, etc. Depending of the application, these tests are so important as the functional tests. If you consider a commercial web site, it can have a great design and almost 100% bug free, but if it is slow for the end user is a question of time until no one visit it anymore.
This test is used to ensure that changes made to the application in fixes or enhancements are not impacting the functionality that was already working. Usually the execution of unit tests are included here.
There are a lot of people thinking that this test it’s the same as Smoke Tests. But are subtle differences between them:
- Usually scripted
- Ensure that the major and crucial functions of the application are working
- Applied before going to functional and regression testing
- It’s a kind of small regression test narrowed to a small set of functional areas
- Usually is unscripted
- Is used to find potential problems after changes in a specific area of the application
Similar to Smoke Tests but the main idea is to test only the changes, not run all the major tests.
This test is sometimes not understood by many people because the idea is to explore the product. In this test, the tester will use his knowledge and experience to explore the product with the objective to find problems, develop new tests, to know better the product, etc., just like the name indicates, exploring.
This test is conducted when the tester doesn’t have yet the requirements document, the time available to test is short or the application is still in early stages of development.
“It takes only five users to uncover 80 percent of high-level usability problems” Jakob Nielsen
This is a black-box testing technique where the aim is to observe end users using the product to discover errors or areas of improvement. You can see this kind of testing in beta products deployed to end users and even in final products where you find an option to send information (usually anonymous) regarding your behavior using the product.
This is the test of the product as a whole. This test tests the functional requirements but at the end user perspective, where the functionality and the architecture are included, because you are testing the whole product. This tests is executed in an environment similar to the production environment.
User Acceptance Testing
This is the test to be done, before the application is accepted and go to live production. Usually is realized after the system testing. Sometimes is called Customer Acceptance Testing.
This test its the final one, where the process of the installation of the software is analyzed, considering space in the storages, permissions and other factors related with the production environment.
There are a lot to talk about each of these types of testing and if you want to know more you can find great sites and books with lots of information about it. I think that a superficial knowledge of all this kind of tests is a requirement to any project manager, team leader or senior developer, so they can know how to talk to the test teams and to the customer (ex:User Acceptance Testing). A junior developer should know too some of them, at least, regression testing for instance.
As a developer you probably are questioning, “what about unit testing?”. Unit tests are developed by the developers to ensure the quality of internal code, and usually are integrated in Regression Testing.