Whether we are college students sitting in a university lecture on software testing and design, or we are real software production professionals, the testing and analysis of computer software programs has become a critical part of the expertise required to work in the field of computer science. There are two main ways to test software: functional (white box) and non-functional (black box). The first one focuses on checking the functional requirements of the application and is usually performed by testers and programmers. The second is not based on internal knowledge of the design or the programming code, but instead, focuses on various aspects of end-user requirements. In contrast, white box testing is based on internal logical connections of the application code, and has to cover syntax analysis, branches, and conditions.
The first level of functional testing is represented by unit testing which is normally conducted by the programmer. Here, testing of functions and code modules is performed. The second level is integration testing, also very important, which performs an analysis of larger portions of software functionality to see if it works cohesively. The third level is system testing (black box type) based on specifications that cover the entire system. After those three levels are completed, the end user determines if the application is satisfactory for his needs. Other steps of the testing process are covered by install/uninstall operations (very necessary on client machines or for future upgrades) and end-to-end testing (at macro level, being similar to system testing). Normally it takes place in the client environment where it will be used. Here is where "crash testing" is performed to see if the application is performing well under stressed conditions. In case the program is modified, regression testing must be performed using specific tools. Again, the client for which the software has been developed has the final word when acceptance testing is made on his specific network environment.
Regarding non-functional testing, it has several scenarios: performance testing (this is usually done by QA persons), stress testing (large queries to the system database, big numeric inputs, increased software load data), recovery (backup testing and recovery techniques) and security testing (system protection against unauthorized attacks or threats). These are not the only testing possibilities – there is also exploratory testing (testers learn the application progressively as they use it), context-driven testing (depends on the area where it is used), comparison analysis (with competitive products), alpha-beta testing (done when the program is almost ready and final bugs are corrected), and mutation testing (some bugs are deliberately introduced to see how the application reacts and if it detects them). Besides software testing, product life-cycle development needs to follow similar processes in order to adapt the software to customer needs. This cycle is continuous and never stops until the product is no longer in use.
For all who work in this area of computer science, and for college students who want to progress beyond homework assignments, the International Journal of Software Engineering is a good companion. The International Journal of Software Engineering and Its Applications will certainly help you stay ahead of your online tutor - and if you need one, you've come to the right place.
To fulfil our mission of educating students, our homework help center is standing by 24/7, ready to assist students who need study help with software testing and analysis.