Comprehensive Study of Software Testing Techniques and Strategies: A Review

— Software testing is a process used to identify the correctness, completeness and quality of developed software. It includes set of activities conducted with the intent of finding errors in software so that it could be corrected before the product is released to end user. It gives measures for finding efficiency and accuracy of the software. It mainly focuses on how to improve the functionality of the software and also on how to improve performance of the software. To test software fully, we need to do its validation and verification before handling it to the customer. So for this purpose, software techniques and software testing strategies are developed. Software testing techniques deal with how a specific part of the software would be tested, while Software testing strategies provides, well planned series of steps that result in successful testing. This paper describes about software testing and its aspects like software testing techniques and software testing strategies. Moreover it describes basic life cycles which are required for performing quality testing.


INTRODUCTION
Software testing is process carried out to find whether the actual results meets the expected results. It is the evaluation of the software. To find errors in the developed software and those errors should get resolved from software development team to improve the quality of the product. Quality engineers should create tasks according to the severity of error. Software testing is just not only for finding error or bugs in the software but also for improving the quality of the software. To all worries it provides cost effective solution. It provides enhanced product to customer in terms of functionality, accuracy, data security etc. It is an iterative process. It continues after the product is completed. The main objective of software testing is to verify and validate the completeness of product. The product should meet the technical requirement of the product. Technical bugs should get report properly by tester and also tester should ensure that software is glitch-free, before it releases to market. Testers have to generate high-quality test cases and issue correct problem report Software testing saves lot of effort, money and time of the organization that are developing and selling the product. Software testing offers business optimization. It confirms that an application or product is able to operate well and fine in all required conditions and on all different kinds of operating systems and on web browsers properly and correctly. Well this enhances user experience and customer satisfaction. All these above facts contributes to money so they bring profit organization. In simple terms in order to make sure that the release software is safe and it's functioning as expected. The concept of software testing was introduced. It is important because software bugs, errors and defects can potentially leads to expenses and dangerous consequences. Software testing is exceptionally imaginative intellectual task for testers to perform. There are principles that every testers should aware of while performing software testing. Different issues are involved in software testing like scalability, usability, security etc.

LITREATURE SURVEY
In 2019, Authors Azeem Uddin and Abhineet Anand, from Galgotias University,Greater Noida, Uttar Pradesh, India presented paper titled "Importance of Software Testing in the Process of Software Development". This paper is published in International Journal for Scientific Research Development| Vol. 6, Issue 12, 2019. Comparative study of present scenario of software testing with regard to testing in early days is done. Described about the objectives of software testing and also about different levels of software testing. Moreover, this paper focuses on Why to test. This paper presented a comprehensive account of all the terminologies that are related to software testing. [1]. In 2017, Authors Monika Thakur and Sanjay from Himachal Pradesh Technical University, Hamirpur, India presented paper titled "Reviewon Structural Software Testing Coverage Approaches". This paper is published in International Journal of Advance research, Ideas and Innovations in Technology, Volume3, Issue 3, 2017. In this paper different software testing approaches are reviewed. Testing techniques used are White-box testing and black box testing. Focuses on how to enable the business to acknowledge and comprehend the dangers of software usage the software testing can likewise give a target, the free perspective of the software. [2]. In 2017, Authors Ms Ankita sethi from IPEM Group of Institutions presented paper titled "A review paper on levels on levels, types and techniques in software testing". This paper is published in International Journal of Advanced Research in Computer Science, Volume 8, No. 7, July -August 2017. In this paper different types of testing are discussed. Different software testing techniques have mentioned. [3].  [4]. In 2014, Author K. Rajasri, and T. Godwin Selva Raja from Christ College of engineering and technology, Pondicherry University, Pondicherry, India, presented paper titled "An Evolution of Testing in Software Engineering" This paper is published in International Journal of Advanced Research in Computer Engineering Technology Volume 3, Issue 2. This paper addressed all major points of Software Testing Life Cycle (STLC) and the testing importance Bug Report. Detail information about bug reporting is explained. Bug reporting and importance and quality assurance for the applications is the main focus of the paper. [5]. In 2013, Author Shruti N. Pardeshi from Medicaps Institute of Science and Technology, Indore, India presented paper title "Study of Testing Strategies and available Tools". This paper is published in International Journal of Scientific and Research Publications, Volume 3, Issue 3, March 2013. In this paper various different strategies of testing is described. Available testing tools and there necessity is described. [6].

METHODOLOGY
Executing test cases in planned and a systematic manner is called testing life cycle. Life cycle in single terms can be stated as changes from one form to other. Every entity has its life cycle. Software is also an entity. There basics life cycles which is required while developing software are mentioned below.

Software Development Life Cycle
Software Development Life Cycle is used in software industries. It is used for designing, developing and for testing high quality software. The main aim of this life cycle is to produce high quality product or application. It should meets with requirements of customers, software should get develop within time and cost estimations is also very important in this life cycle. It works efficiently and effectively in the present information technology infrastructure available. Software Development Life Cycle is used to improve the development process. It shortens the time required for the production. It gives a structure to developers, which they can prefers while developing any product or application. Software Development Life Cycle provide basis to project. Gives us complete idea about product or application estimation, planning and scheduling. Gives framework to set of standards. In other words, we can say that it is one kind of mechanism for project tracking and its controlling. Software Development Life Cycle gives complete visibility to stakeholders who are involved in development team. This will leads to increase speed of development and also enhances development quality. Also it will reduces project risks.

Requirement analysis
Requirement analysis is the first phase of Software development life cycle. In this phase all the required or relevant information is get collected from costumer. Interaction is done with customer so as to develop the product as per customer expectations. Business analyst and project Manager interacts with customer that is they arrange meeting with customer and gathers all the required information like what is the purpose of product, who will be end user of this product etc. Before building a product having thorough knowledge of the product is very important. This will give us idea to find out scope of the product. After gathering all the information, analysis can be done on product to decide how much time will require to develop a product, how much resources will require, what are limitations, what is the benefits of the product and also some other item will be considered. From these analysis we will get know that how much is the feasibility of the product. In this phase requirement document should get finalised so that developers and also customer can refer that document in further.

Feasibility study
Feasibility phase document is prepared which is require for software development. Different checks are taken into consideration to prepare this specification document. This document should include points like, is the project can get completed within budget provided to us or not, whether the existing computer system can support the software or not, can we create different tasks or operations which is expected to our costumer or to client, In the given schedule is we can complete this project or not etc. Complete document in which various factors of product or application are added. Vol. 9 Issue 08, August-2020

Design
In this phase of development all features, architecture of the product, all the necessary specifications proposed system which will require are designed. Software can be designed in two ways. Those ways are high level design and low level design. In high level design brief description of architecture is specified, what functionality will be require for designing module is outlined, interface specification are discussed, architecture information and its diagram is prepared, identification of database, details of technology along with architectural diagram. In low level design structure of input and output items, how error message should appear, how should be the interface of the product, type and size of the database, dependencies issues should be mentioned all these point are specified. This information will help developers to understand overall architecture of the system.

Coding
This phase is the longest phase in Software Development Life Cycle process. Developers write code in this phase. By using chosen programming language code is written by developers.
In this phase tasks are divided in to sub tasks or in modules. Different tasks gets assigned to different developers. Developers need to write the code as per guidelines. Various functional conditions should be taken into consideration while writing code. Developers must follow the design document.

Testing
In this phase quality assurance team and testing team tests the functionality of the product. Once product is developed. Developers deploy it for testing purpose. QA and testing team test the product and verify that whether present results match with expected result as mentioned in requirement document. If the QA and testing team finds bug in product they can report bug. Testers will assignee bug to developers. Developers will fix the bug and assignee back for retesting bug. QA and testing team will retest the bug. If the bug is fixed QA and testing team will closed the bug. If the bug is not fixed QA and testing team will reopen that bug. This cycle will get continued until the product will becomes bugfree. Also, that product should meets with all conditions added in requirement document.

Installation/Deployment
In this phase once all bugs are marked as closed by QA and testing team that is when product reaches to the stage where there is no error in the system and when all actual result meets with expected results also depending on feedback of project manager decision of deployment of software will be taken. Manager releases the software for deployment.

Maintenance
Once the product is deployed successfully, then this product enters into maintenance phase. After product is deployed, customer starts using it. Customer gives reviews to the products from which team will gets idea which feature should we add. Testing of the products continues after deployment. There may be some scenarios which are not tested at all. Bug fixing is done at every stage. After fixing bugs, up-gradation of product is done. In maintenance phase production team may add new features also.

Software Testing Life Cycle
Software Testing Life Cycle consists different testing activities which should be conducted in the sequence while testing. The main aim of this life cycle is that it should meet quality goals. Software testing phase plays vital part in Software Development Life Cycle. Testing team needs to plan many activities. Every activity should be quality oriented. Every team needs to know its ultimate scope whenever they starts planning any follow. Similarly, at a very early stage testing should be able to analyse the scope of testing for the product. Each and every document prepared by testing team should be in a proper way and each step should be understandable. If all test scenarios are covered properly as per the requirement, then it will take less time to execute test suit. This will help to find bugs at early stage.

Requirement Analysis
In this phase testing team and Quality Assurance team study and analyse the requirement document properly. Testing team and QA team tries to understand requirement document thoroughly. If testing team and QA team unable to understand any point from requirement document then they can interact with stakeholders to solve there queries related requirement document in detail. Once testers and QA team understands requirement properly, it gives them clear idea about which type of testing will be required to test the product. Testing priorities can be set from this. Testers can set Environment for testing.

Test Planning
In this phase test plan and test strategies are determined. Testing manager calculates efforts and time required for testing. Also he finds outs the cost estimation required for testing. Testing team decides that which environment will require for testing and which types of testing will be done. Determines roles and responsibilities.  Every phase of Bug Life Cycle is explained below: New: While testing product, if testers finds any bug then tester can report new bug. Assignee: When testers creates new bug. According to the bug type, assignee's that bug to appropriate developer. Open: Whenever tester creates new bug, the status of that bug will be open. When developer starts working on that bug, he will change bug status according to the work process he is been performing. Fixed: When developer fixes the issue that is when he completes his work. He marks the status of bug as fixed. An assignee back this issue to tester. Retest: When developer assignee back the bug to the tester. Tester retest that bug. Verified: When tester retest that bug. He verifies all steps are working properly which are mentioned in bug. Closed: If the test case which is mentioned in the bug is working properly then tester marks bug status as closed. Reopen: If the test case which is mentioned in the bug is not working properly, that is if tester is not getting expected results then he marks bug status as reopen and assignee this bug again to appropriate. Duplicate: If tester reports the same bug. One of bug among two bugs can be marked as Duplicate. In progress: When developer starts his works. At this stage developer marks bug status as in progress. Deferred: When reported bug in not on high priority and when that bug can be fixed in next release. Status of those bugs are marked as deferred. Not a bug: If the reported bug is not correct or when the bug is not genuine. Then those bug are marked as not a bug

Software testing techniques
After the code is develop successfully, tester's needs to test the functionality of the system. Software testing techniques are broadly categorized into two parts. Those parts are static testing and dynamic testing.

Manual testing (Static testing)
Manual testing is primitive type of testing. In manual testing testers manually execute test cases. Any product should get tested manually first before performing automation testing. Manually testing helps in finding bugs in product. Manual testing can be chosen manual testing when project is in initial development phase. When testing user interface especially with visual aspects also when project is short term project. When there is a short term project and when writing a script becomes time consuming manual testing is prefer.

Steps of Manual testing
Step 1: In order to successfully conduct the manual testing you first need to understand requirement document. So by understanding requirements you will get to know that what needs to be tested and what classify as a defect or bug. This is the crucial part of testing.
Step 2: Writing the test cases. Once you understand the requirements you can write test cases. This test cases basically guide you through sequence of test, test function and different scenarios written within software product or application. Writing good test cases is very important as they are can help in executing each and every test case very smoothly and ensure good test coverage.
Step 3: Once you are done by writing test cases. Next step is conducting the tests. Once test cases are written and test environment are properly prepared it's time to begin testing. You can follow test cases and mark each test as pass or fail or skipped. While doing manual testing it is important to keep a notes. That's really important you can't ignore the fact just because your test fails. Steps 4: Next step is to log good bug report. In addition to actual testing as a tester you will be responsible for logging bugs as well. So as you find any bug, you need to inform log information for the development team about the defect. Writing good bug report will help you and your team later. You will save yourself time answering this questions about the bugs later. So basically you have a document you refer to. A good bug report should have title, steps how to overcome bugs, expected and actual results and any relevant attachments that will help development team to understand the bug like screenshot, recordings etc.
Step 5: You need to create detail test report. After running tests it is good to know the tests at very high level like how many tests got run successfully, how many tests got failed, how many tests got passed and how many test got skipped like that. This step is very straight forward.

Automation testing (Dynamic testing)
In automation testing, automated tools are used. Test suits are run on automation tool. Whereas in manual testing testers needs to sit and run test suits one by one. Testers needs to write test scripts. Automation testing is faster than manual testing. In automation testing random test are not allowed. Automation testing are done by using tools. Highly skilled testers are required in this field who is having full knowledge of that domain. Automation testing is known as validation testing. For modification purpose testers needs to modify the scripts. Testing can be performed on different operating platform which will help in reducing the time. For performing automation testing, testers should have proper knowledge of programming language. In automation testing other testing types are also get suited. Those are regression testing, load testing, performance testing. As this testing is done by tools this testing type is more accurate. Automation testing is cost effective. Automation testing is more reliable than manual testing. More investment are required for tools and for automation engineers. Automation testing require less complex testing setup or less complex environment setup to test scripts.

Steps of Automation testing
Step 1: Testers needs to find automation tools experts.
Step 2: Need to choose the correct tool for testing.
Step 3: Analysing various application and from that need to decide that which tool is best suited for automation.
Step 4: Training the other team mates.
Step 5: Creating framework for the automation.
Step 7: Write scripts Step 8: Reporting bugs Step 9: Maintenance of scripts

Software testing strategies
Software testing strategies are very important in order to construct software successfully. Software testing strategies combines test cases design methods. This will leads to planned systematic steps for carrying out successful testing of software. Software testing strategies are developed by software tester and project manager. Four types of testing strategies are there. Explaination of each strategies is given below.

Unit testing
Smallest testable part of software is called as unit. This testing type is performed by development team. As this testing type is performed by developer, respective developer needs to have proper knowledge about code designing. Unit testing is the simplest testing type. Quality assurance team member can also perform this type of testing. It is cost effective testing type and also it is not time consuming activity. Several other testing techniques get performed under unit testing effectively like functional testing, structural testing etc. Unit testing is not depended on whole system. Individual testing of small unit is carried out in this. Multiple engineers can perform this testing type at a time. This testing can also be performed while fixing issues in parallel. Unit testing comes under white box testing. This testing type is performed at lowest level.

Integration testing
On combining two or more tested units an integrated structure or group is formed. The main aim of integration testing is to combine these small units and test them together that is, to test them in form of group. Every time tester needs to perform each test after adding new unit in existing group. On performing this testing type continuously, less error may occurs at time of regression testing. If immediate bugs are reported while performing integration testing then may be less effort will require for regression testing. If new module gets added in structure then testers needs to verify each test case repeatedly from start to end. Integration testing is an upper level testing.

System testing
Validation of whole architecture is main aim of system testing. All unit are combined in this testing type. In this endto-end testing is performed. It tests that whether system meets specified requirement. Quality of software can be ensured by performing system testing. From specified requirement, all functional condition should get validate by system testing. This testing is performed on production environment. Some other types of testing are also performed while doing system testing those are security, recovery, user interface, compatibility etc. System testing falls under black box testing. Acceptance testing is called as final stage testing. It is very important type of testing. It is performed before delivering the system finally to end user. It tests that whether product which is developed by organisation meets all specified criteria and meets with specified requirements given by customer or client. Acceptance testing is known as Quality assurance testing, final testing, verification testing and validation testing. This testing type is performed at user location. The main aim of doing this testing is to check whether system functions properly as per specified requirement and no bugs should occur at this stage. 4. RESULTS AND DISCUSSION Software testing helps us to identify bugs/defects in the software. It's become easy to develop good software if bugs are detected in early stages. Software testing aims to make software stable. High quality product, can be produce by performing software testing. It focuses always on the expected result. Customer requirements must be high priority of testers. For performing a quality testing, tester should know testing strategies. Also method of reporting bugs is very important in software testing. Each and every scenario of software should get tested. By doing this practice, improvisation of software will happen at every stage. It is also very important to choose correct testing techniques. Tester should have the knowledge of what testing techniques should be used at different stages while building software.

CONCLUSION
Software testing strategies and software testing techniques are discussed in this paper. Moreover, it provides information on each phase of Software Development Life Cycle, Software Testing Life Cycle and Bug Life Cycle. These life cycles helps in improving the quality of software and in overall development process of software. By using these standard testing techniques and testing strategies a stable and robust product can get delivered to end user.
For testing software testers requires technology at each stack level to ensure that every part of system as well as entire software works properly without breaking down. Every testing level of software testing strategies has its own significance. Unit testing is performed for testing small modules or part of software, integration testing is performed to test integrated modules of software, system testing is performed to evaluate complete system or software and acceptance testing is performed to evaluate system's compliance requirement. Software testing techniques helps to develop test cases and test scripts for performing manual and automation testing respectively. These techniques provides the procedure for testing a specific part of the system and also for testing whole system. In manual testing test cases are executed by human tester whereas in automation testing automation tools are used to execute test cases. Automation testing is significantly faster than manual testing. Automation testing requires less complex testing setup than manual testing.