Task 1: Testing methodologies and SDLC

Jameel MJameel M
12 min read

Q1. What are different types of testing?

Testing: Testing is the process of executing a program to find errors. To make our software perform well it should be error-free Different Types of Software Testing

  1. Manual Testing

  2. Automation Testing

    Manual Testing

    Manual testing is a technique to test the software that is carried out using the functions and features of an application. In manual software testing, a tester carries out tests on the software by following a set of predefined test cases.

    Types of Manual Testing

    • White Box Testing • Black Box Testing • Gray Box Testing

    White Box Testing

    It is the techniques analyze the internal structures the used data structures, internal design, code structure, and the working of the software rather than just the functionality as in black box testing. It is also called glass box testing clear box testing or structural testing. White Box Testing is also known as transparent testing or open box testing.

    Black Box Testing

    Black-box testing is a type of software testing in which the tester is not concerned with the internal knowledge or implementation details of the software but rather focuses on validating the functionality based on the provided specifications or requirements.

    Gray Box Testing

    Gray Box Testing is a software testing technique that is a combination of the Black Box Testing technique and the White Box Testing technique.

    In the Black Box Testing technique, the tester is unaware of the internal structure of the item being tested and in White Box Testing the internal structure is known to the tester. The internal structure is partially known in Gray Box Testing. This includes access to internal data structures and algorithms to design the test cases.

    Types of Black Box Testing

    • Functional Testing • Non-Functional Testing

    Functional Testing

    Functional Testing is a type of Software Testing in which the system is tested against the functional requirements and specifications. Functional testing ensures that the requirements or specifications are properly satisfied by the application.

    Non-Functional Testing

    Non-functional Testing is a type of Software Testing that is performed to verify the non-functional requirements of the application. It verifies whether the behaviour of the system is as per the requirement or not. It tests all the aspects that are not tested in functional testing.

Types of Functional Testing

• Unit Testing • Integration Testing • System Testing

  1. Unit Testing is a method of testing individual units or components of a software application. It is typically done by developers and is used to ensure that the individual units of the software are working as intended.

  2. Integration Testing is a method of testing how different units or components of a software application interact with each other. It is used to identify and resolve any issues that may arise when different units of the software are combined. Integration testing is typically done after unit testing and before functional testing and is used to verify that the different units of the software work together as intended.

Different Ways of Performing Integration Testing:

Top-down integration testing: It starts with the highest-level modules and differentiates them from lower-level modules.

Bottom-up integration testing: It starts with the lowest-level modules and integrates them with higher-level modules.

Big-Bang integration testing: It combines all the modules and integrates them all at once. Incremental integration testing: It integrates the modules in small groups, testing each group as it is added.

Types of Non-functional Testing

  1. Performance Testing

  2. Usability Testing

  3. Compatibility Testing

    Performance Testing is a type of software testing that ensures software applications perform properly under their expected workload. It is a testing technique carried out to determine system performance in terms of sensitivity, reactivity, and stability under a particular workload.

    Usability Testing is a type of testing that is done from an end user’s perspective to determine if the system is easily usable.

    Compatibility Testing is software testing that comes under the non-functional testing category, and it is performed on an application to check its compatibility (running capability) on different platforms/environments. This testing is done only when the application becomes stable. This means simply this compatibility test aims to check the developed software application functionality on various software, hardware platforms, networks browser etc.

There are 4 Types of Performance Testing

  1. Load Testing

  2. Stress Testing

  3. Scalability Testing

  4. Stability Testing

    Load Testing determines the behaviour of the application when multiple users use it at the same time. It is the response of the system measured under varying load conditions

    Stress Testing is to give unfavorable conditions to the system and check how it performs in those conditions.

    Scalability Testing is to test the performance of a software application, system, network, or process is tested in terms of its capability to scale up or scale down the number of user request load or other such performance attributes. It can be carried out at a hardware, software or database level.

    Stability Testing is a type of Software Testing to checks the quality and behavior of the software under different environmental parameters. It is defined as the ability of the product to continue to function over time without failure.

    Smoke Testing is also known as “Build Verification Testing” or “Build Acceptance Testing,” is a type of software testing that is typically performed at the beginning of the development process. Its purpose is to ensure that the most critical functions of a software application are working correctly.

    Sanity Testing is a subset of regression testing. Sanity testing is performed the software is ready for more extensive rounds of testing after minor code changes or bug fixes.

    Regression Testing is the process of testing the modified parts of the code and the parts that might get affected due to the modifications ensures that no new errors have been introduced in the software after the modifications have been made. Regression means the return of something and in the software field, it refers to the return of a bug.

    Acceptance Testing is done by the customers to check whether the delivered products perform the desired tasks or not, as stated in the requirements. We use Object-Oriented Testing for discussing test plans and for executing the projects.

    User Acceptance Testing is a testing methodology where clients/end users participate in product testing to validate the product against their requirements. It is done at the client’s site on the developer’s site. For industries such as medicine or aerospace, contractual and regulatory compliance testing, and operational acceptance tests are also performed as part of user acceptance tests.

    Exploratory Testing is a type of software testing in which the tester is free to select any possible methodology to test the software. It is an unscripted approach to software testing. In exploratory testing, software developers use their learning, knowledge, skills, and abilities to test the software developed by themselves.

    Ad hoc Testing is a type of software testing that is performed informally and randomly after the formal testing is completed to find any loophole in the system. For this reason, it is also known as Random or Monkey testing.

    Security Testing is a type of Software Testing that uncovers vulnerabilities in the system and determines that the data and resources of the system are protected from possible intruders. It ensures that the software system and application are free from any threats or risks that can cause a loss. Security testing of any system is focused on finding all possible loopholes and weaknesses of the system that might result in the loss of information or repute of the organization.

    Retesting is a process of validating a specific feature whose function failed during the previous test. It is done to verify whether the test cases reported with some bugs during the execution time are fixed or not

    Alpha testing is a type of validation testing. It is a type of acceptance testing that is done before the product is released to customers. It is typically done by QA people. Example: When software testing is performed internally within the organization.

    Beta Testing is conducted at one or more customer sites by the end-user of the software. This version is released for a limited number of users for testing in a real-time environment. Example: When software testing is performed for the limited number of people.

2.What are the different STLC phases?

STLC

Software Testing Life Cycle (STLC) is defined as a sequence of activities conducted to perform Software Testing

6 major phases of STLC –

• Requirement Analysis

• Test Planning

• Test Case Development

• Test Environment Setup

• Test Execution

• Test Closure

  1. Requirement Analysis: Requirement Analysis is the first step of the Software Testing Life Cycle (STLC). In this phase quality assurance team understands the requirements like what is to be tested. If anything is missing or not understandable then the quality assurance team meets with the stakeholders to better understand the detailed knowledge of requirements.

  2. Test Planning: Test Planning is the most efficient phase of the software testing life cycle where all testing plans are defined. In this phase manager of the testing, team calculates the estimated effort and cost for the testing work. This phase gets started once the requirement-gathering phase is completed.

  3. Test Case Development: The test case development phase gets started once the test planning phase is completed. In this phase testing team notes down the detailed test cases. The testing team also prepares the required test data for the testing. When the test cases are prepared then they are reviewed by the quality assurance team.

  4. Test Environment Setup: Test environment setup is a vital part of the STLC. Basically, the test environment decides the conditions on which software is tested. This is independent activity and can be started along with test case development. In this process, the testing team is not involved. either the developer or the customer creates the testing environment.

  5. Test Execution: After the test case development and test environment setup test execution phase gets started. In this phase testing team starts executing test cases based on prepared test cases in the earlier step.

  6. Test Closure: Test closure is the final stage of the Software Testing Life Cycle (STLC) where all testing-related activities are completed and documented. The main objective of the test closure stage is to ensure that all testing-related activities have been completed and that the software is ready for release.

    3.As a manual Tester what qualities do you possess? Illustrate with example

    Attention to Detail: Manual testers need to pay close attention to every aspect of the software being tested to identify even the smallest defects or deviations from expected behavior. For example, when testing a web application, a manual tester might meticulously check each form field to ensure that input validation is working correctly and that error messages are displayed accurately for invalid inputs.

    Analytical Skills: Testers must be able to analyze requirements documents, user stories, and other project artifacts to understand the intended functionality of the software and devise test scenarios accordingly. For instance, a manual tester might analyze a new feature requirement and identify various user workflows to test comprehensively.

    Communication Skills: Effective communication is essential for manual testers to collaborate with developers, product managers, and other stakeholders. Testers need to clearly articulate defects they find, provide detailed steps to reproduce issues, and communicate testing progress and status. For example, a manual tester might write clear and concise defect reports, including screenshots and detailed descriptions, to convey issues to the development team.

    Critical Thinking: Manual testers should be able to think critically to assess risks, prioritize testing activities, and determine the most appropriate test approaches. For instance, when faced with tight deadlines, a manual tester might prioritize testing efforts based on the most critical functionalities or areas of the application that are likely to have the highest impact if they fail.

    Problem-Solving Skills: Testers often encounter complex issues and unexpected scenarios during testing. Being able to think creatively and devise solutions to testing challenges is important. For example, if a manual tester encounters a situation where automated tests cannot be used, they may devise alternative testing strategies such as exploratory testing to uncover defects.

    Persistence and Patience: Testing can be repetitive and sometimes tedious, especially when executing large sets of test cases or performing regression testing. Manual testers need to exhibit patience and persistence to execute tests diligently and thoroughly, ensuring that all possible scenarios are covered.

    Domain Knowledge: Depending on the industry or domain of the software being tested, manual testers may need to possess domain-specific knowledge to understand user needs and behaviors better. For example, a manual tester working on healthcare software should have an understanding of medical terminology and workflows to effectively test the application's functionality.

4.What is the difference between Agile and Waterfall methodologies in SDLC?

Waterfall and Agile methodologies are two different approaches to software development, each with its own set of principles, practices, and characteristics. Here are the key differences between the two:

Sequential vs. Iterative Approach:

• Waterfall: In the Waterfall model, the software development process follows a linear and sequential approach, with distinct phases such as requirements gathering, design, implementation, testing, and deployment. Each phase must be completed before moving on to the next.

• Agile: Agile methodologies, on the other hand, follow an iterative and incremental approach. Development work is divided into small, manageable iterations or sprints, typically lasting a few weeks. At the end of each iteration, a potentially shippable product increment is produced, allowing for continuous feedback and adaptation.

Flexibility and Adaptability:

• Waterfall: Waterfall is less flexible and adaptable to changing requirements once the project has started. Changes to requirements often require going back to earlier phases, which can be time-consuming and costly.

• Agile: Agile methodologies embrace change and prioritize responding to customer feedback and evolving requirements. Agile teams can adapt to changing priorities and requirements more easily, incorporating feedback into future iterations.

Customer Involvement:

• Waterfall: Customer involvement typically occurs primarily at the beginning and end of the project, with limited opportunities for feedback and collaboration during the development process.

• Agile: Agile methodologies emphasize frequent collaboration and communication with customers and stakeholders throughout the development process. Customers are involved in providing feedback, prioritizing features, and validating incremental deliverables.

Risk Management:

• Waterfall: Waterfall projects carry higher inherent risks, as potential issues may not be discovered until late in the development cycle. This can lead to delays and budget overruns if significant changes are required.

• Agile: Agile methodologies mitigate risks through early and continuous delivery of working software. By delivering increments of functionality iteratively, risks are identified and addressed earlier in the development process.

Documentation:

• Waterfall: Waterfall projects typically require extensive documentation upfront, including detailed requirements specifications, design documents, and test plans.

• Agile: Agile methodologies prioritize working software over comprehensive documentation. While documentation is still important, Agile teams focus more on collaboration and delivering value to customers through working software.

Team Structure and Roles:

• Waterfall: Waterfall projects often have predefined roles and responsibilities, with distinct teams for each phase of the project (e.g., requirements analysts, developers, testers).

• Agile: Agile teams are cross-functional, with members from different disciplines (e.g., development, testing, design) working together collaboratively. Team members may take on multiple roles and responsibilities to achieve the project's goals.

Overall, while Waterfall is characterized by its structured and sequential approach, Agile methodologies offer greater flexibility, adaptability, and customer collaboration, making them particularly well-suited for projects with evolving requirements and dynamic environments.

0
Subscribe to my newsletter

Read articles from Jameel M directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Jameel M
Jameel M