Unit - 1
Unit - 1
Unit - 1
Reality: Quality is everyone's job. Testers and developers should work together.
The team does not only consist of examiners, but each of its members should also consider every
detail closely. The best software development teams are like the best football teams.
They work together towards a common goal. If the quality of the final product can be discussed,
don’t blame the QA team for it, everyone should take responsibility.
One of the reasons for becoming junior-mid-senior developers is that they acquire knowledge and
make fewer mistakes. However, even the most skilled programmers make mistakes, sometimes
changing software because one thing affects another.
Reality: Some processes are repetitive and should be automated. Manual testing
is best for research tests and it is low-cost.
There are all kinds of tests and work best in each specific case. While some projects may have room
for manual and automated testing, such a combination will bring the most value.
Manual API testing techniques will help the team find bugs that can affect the user experience, and
the team can fix them to improve the overall quality.
The misconception that it is easy to be a software tester breaks down a business. From the outside,
everything seems simple, but once you get on the API testing facts and myths, you will see that it is
much more than just pressing a button.
Reality: Testers are mostly creative people who see the world from a certain
point of view. They come in the role of user and create different scenarios.
Examiners are among the most creative people in IT. The accurate API testing techniques have a
huge impact on the whole development process because they see what others are not doing. One
thing is not so easy to see from a different point of view.
If you test an app, you cannot follow the “ideal” user journey. They are the ones who create new
landscapes, they are fully committed to providing the highest value to the customer, and they are the
inconsistent heroes of every project.
QA expert. What is saved can be used for later maintenance or marketing. The project will be a big
success.
Launching a product that is not fully tested can have a huge impact on its popularity. It can crash,
freeze. Some functions may stop working, all kinds of possible problems.
But more importantly, if you find errors after the project is finished, you will need to re-deploy the
developers to correct them.
Testing takes a lot of time:
It is often a talk around that testing consumes a lot of time but the fact is that testing
is not a time-consuming process. Although debugging takes more time as fixing the
bugs are complicated.
Perfect Testing is possible:
Often a client thinks that if the software application is tested then it a perfect product
but the fact is something else. There might exist some vulnerabilities that can’t be
executed during the testing process and it creates problems once the product is
launched.
Only completely developed products are tested:
It is always a consideration that once the software product is fully developed only
then it is tested. But the fact is that after each functionality addition or removal
software product is tested. If testing is carried out only after full development it
might create chaos and may take a lot of effort to fix it.
Tested software defects less:
Software can’t be 100% defect less even after thousands of testing processes. Often
the clients and also developers think that if the software is tested in multiple levels
then it has zero bugs but it is only a myth while the fact is a software can’t be 100%
defectless.
Automation testing consumes less time:
It is true that automation testing consumes less time but automation testing can’t be
performed at every stage of the software development and also automation testing is
only performed after the manual testing. There are also some testing which is only
performed only in a manual way.
Software testing is a cakewalk:
Often people outside the testing team think that testing can be done by a person with
less experience and less knowledge. The reality is that testing is done by testing
experts that are experienced and knowledge full personnel in order to get productive
software.
Testing is all about finding bugs:
It is true that finding bugs is one of the prominent objectives of the testing but it is
not the only objective. Besides finding bugs there are several areas that are checked
during the testing process. Software functional and non-functional requirements are
checked during the testing process.
As testing can be a destructive activity, it is important for software testers to report defects and
failures as objectively and politely as possible to avoid hurting and upsetting other members
related to the project. So as testers, there are many ways to communicate collaboratively with
developers.
Software testing is the process of evaluating and verifying that a software product or
application does what it is supposed to do. The benefits of testing include preventing bugs,
reducing development costs and improving performance.
of various activities, which are performed by different individuals using their expertise
software, people with different skill and mindset are required. From coding to software
implementation, engineers with different skill set are required to perform tasks, in which
they are certified. As testing and analyzing the software is much different than
developing or programming it, it is quite clear that to develop a software with unique
features and superior quality, developers and testers of different mindset are required.
achieve their goals and aims. Communication, if done in an polite and courteous manner
can help build a strong and reliable relationship between team members and help them
avoid any misunderstanding. Similarly, during the process of testing also, the requirement
for finding bugs and reporting them, it becomes vital for them to communicate it in a
courteous, polite, and suitable way to avoid hurting and disappointing someone. Finding
and reporting defects can be an achievement for the tester but is merely an inconvenience
for programmers, designers, developers, and other stakeholders of the project. As testing
can be a destructive activity, it is important for software testers to report defects and
failures as objectively and politely as possible to avoid hurting and upsetting other
higher than self testing or group testing, as the former helps avoid author bias and often is
more effective in finding and detecting bugs and defects. This type of testing is mainly
performed by individuals who are not related to the project directly or are from different
organization and are hired mainly to test the quality as well as the effectiveness of the
developed product. Test independence, therefore, helps developers and other stakeholders
get more accurate test results, which helps them build a better software product, with
o V Model
o Agile Model
o Spiral Model
o Iterative Model
Waterfall Model
This is the most basic software development life cycle process which is followed broadly in the
industry. In this model, the developers follow a sequence of processes downwards towards the
ultimate goal. It is like a waterfall where there are various phases involved.
The
different phases in the waterfall model are:
Requirement Analysis
Analysis phase
Software design
Programmed implementation
Testing
Maintenance
Advantages
The requirement of resources is minimal and testing is done after each phase has been completed.
Disadvantages
You cannot start the next phase until the previous phase is completed.
V Model
The V Model is considered superior to the waterfall model. In this model, the development and
test execution activities are carried out side by side in the downhill and uphill shape. Also,
testing starts at the unit level and spreads towards the integration of the entire system.
Advantages
It is easy to use since testing activities like planning and test designing are done before coding.
This model enhances the chances of success and saves time.
Defects are mostly found at an early stage and downward flow of defects is generally avoided.
Disadvantages
It is a rigid model.
The software is developed during the implementation phase so early prototypes of the product are
not available.
If there are changes in the midway, you need to update the test document.
Agile Model
In the Agile model, requirements and solutions evolve through collaboration between various
cross-functional teams. It is also known as an iterative and incremental model. The agile
software testing model focus on process adaptability and customer satisfaction by rapid delivery
of working software product and by breaking the product into small incremental builds.
Advantages
You can develop the working software quickly and adapt to changing requirements regularly.
Disadvantages
It is difficult to assess the effort required at the beginning of the cycle for large and complex
software development cases.
Due to continuous interaction with the customer, the project can go off track if the customer is
not clear about the goals.
Spiral Model
This software testing model is similar to the Agile model, but with more emphasis on risk
analysis. The different phases of the spiral model include planning, risk analysis, engineering,
and evaluation. In this case, you need to gather the requirements and perform the risk assessment
at the base level and every upper spiral builds on it.
Advantages
Disadvantages
Iterative Model
The Iterative model does not need a full list of requirements before beginning the project. The
development process starts with the requirements of the functional part, which can be expanded
later. The process is repetitive and allows new versions of the product for every cycle. Every
iteration includes the development of a separate component of the system which is added to the
functional developed earlier.
Advantages
Problems and risks defined within one iteration can be prevented in the next sprints.
Disadvantages
The risks may not be completely determined even at the final stage of the project.
These are the different software testing models involved in the software development life cycle. I
hope you understood how each of these models is used in software testing.
Effective testing emphasizes efficient Exhaustive or complete testing means that energy
1 techniques to test the s/w�/� so that statement in the program of every possible path
important features will be tested within the combination with every possible combination of
constrained resources. data must be executed.
3 It is feasible because: a) It checks for s/w It is not feasible because: a) Achieving deadlines
reliability and no Bugs in the final product b) Various possible outputs c) Timing constraints
b) It tests in each phase c) It uses d) No. of possible test environments.
constrained resources
5 It is less complex and less time consuming It is complex and time consuming
Software Testing Important Terminology
1. SDLC (Software Design Life Cycle)
2. Test Level
There are mainly four Levels of Testing in software testing, Unit Testing, Integration
Testing, System Testing, and Acceptance Testing.
3. Test Type
Test Type: A Test type is a group of test activities aimed at testing specific
characteristics of a software system or a part of a system.
Software testing life cycle contains various phases, which are Requirement Analysis,
Test Planning, Test Case development, Test Environment Setup, Test Execution, and
Test Cycle Closure.
6. Informal Testing
7. Test Planning
Test planning is a phase in STLC, the main objective of this phase is to prepare a Test
Plan document. It includes three major aspects – Scope of Deliverables, Effort
estimation, and Resource Plan.
8. Test Documentation
Test documentation is documentation of artifacts created before, during, and after the
testing of software.
Test Policy, Test Strategy, RTM, Test Plan, Test Case, Defect Report, Test Metrics
Report, and Test Summary Reports are the important Test Documents.
Test Deliverables refer to a list of documents, tools, and other equipment that must be
created, provided, and maintained to support testing activities in a project.
Test closure is a set of activities that are performed at the end of the testing process.
These are usually performed after the product is delivered, like generating a test
report, etc.
Once a system is deployed it is in service for years and decades. During this time the
system and its operational environment is often corrected, changed or extended.
Testing that is provided during this phase is called Maintenance Testing.
Phases of STLC:
1. Requirement Analysis:
The activities that take place during the Requirement Analysis stage include:
Reviewing the software requirements document (SRD) and other related
documents
Interviewing stakeholders to gather additional information
Identifying any ambiguities or inconsistencies in the requirements
Identifying any missing or incomplete requirements
dentifying any potential risks or issues that may impact the testing process
Creating a requirement traceability matrix (RTM) to map requirements to test cases
At the end of this stage, the testing team should have a clear understanding of the
software requirements and should have identified any potential issues that may impact
the testing process. This will help to ensure that the testing process is focused on the
most important areas of the software and that the testing team is able to deliver high-
quality results.
2. Test Planning:
Test Planning is most efficient phase of software testing life cycle where all
testing plans are defined. In this phase manager of the testing team
calculates estimated effort and cost for the testing work. This phase gets
started once the requirement gathering phase is completed.
The activities that take place during the Test Planning stage include:
Identifying the testing objectives and scope
Developing a test strategy: selecting the testing methods and techniques that will
be used
Identifying the testing environment and resources needed
Identifying the test cases that will be executed and the test data that will be used
Estimating the time and cost required for testing
Identifying the test deliverables and milestones
Assigning roles and responsibilities to the testing team
Reviewing and approving the test plan
At the end of this stage, the testing team should have a detailed plan for the testing
activities that will be performed, and a clear understanding of the testing objectives,
scope, and deliverables. This will help to ensure that the testing process is well-
organized and that the testing team is able to deliver high-quality results.
3. Test Case Development:
The test case development phase gets started once the test planning phase is
completed. In this phase testing team note down the detailed test cases.
Testing team also prepare the required test data for the testing. When the
test cases are prepared then they are reviewed by quality assurance team.
The activities that take place during the Test Case Development stage include:
Identifying the test cases that will be developed
Writing test cases that are clear, concise, and easy to understand
Creating test data and test scenarios that will be used in the test cases
Identifying the expected results for each test case
Reviewing and validating the test cases
Updating the requirement traceability matrix (RTM) to map requirements to test
cases
At the end of this stage, the testing team should have a set of comprehensive and
accurate test cases that provide adequate coverage of the software or application. This
will help to ensure that the testing process is thorough and that any potential issues are
identified and addressed before the software is released.
4. Test Environment Setup :
Test environment setup is the vital part of the STLC. Basically 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.
The activities that take place during the test execution stage of the Software
Testing Life Cycle (STLC) include:
Test execution: The test cases and scripts created in the test design stage are run
against the software application to identify any defects or issues.
Defect logging: Any defects or issues that are found during test execution are
logged in a defect tracking system, along with details such as the severity, priority,
and a description of the issue.
Test data preparation: Test data is prepared and loaded into the system for test
execution
Test environment setup: The necessary hardware, software, and network
configurations are set up for test execution
Test execution: The test cases and scripts are run, and the results are collected
and analyzed.
Test result analysis: The results of the test execution are analyzed to determine
the software’s performance and identify any defects or issues.
Defect retesting: Any defects that are identified during test execution are
retested to ensure that they have been fixed correctly.
Test Reporting: Test results are documented and reported to the relevant
stakeholders.
It is important to note that test execution is an iterative process and may need to be
repeated multiple times until all identified defects are fixed and the software is deemed
fit for release.
5. Test Execution:
After the test case development and test environment setup test execution
phase gets started. In this phase testing team start executing test cases based
on prepared test cases in the earlier step.
The activities that take place during the test execution stage of the Software
Testing Life Cycle (STLC) include:
Test execution: The test cases and scripts created in the test design stage are run
against the software application to identify any defects or issues.
Defect logging: Any defects or issues that are found during test execution are
logged in a defect tracking system, along with details such as the severity, priority,
and a description of the issue.
Test data preparation: Test data is prepared and loaded into the system for test
execution
Test environment setup: The necessary hardware, software, and network
configurations are set up for test execution
Test execution: The test cases and scripts are run, and the results are collected
and analyzed.
Test result analysis: The results of the test execution are analyzed to determine
the software’s performance and identify any defects or issues.
Defect retesting: Any defects that are identified during test execution are
retested to ensure that they have been fixed correctly.
Test Reporting: Test results are documented and reported to the relevant
stakeholders.
It is important to note that test execution is an iterative process and may need to be
repeated multiple times until all identified defects are fixed and the software is deemed
fit for release.
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.
At the end of the test closure stage, the testing team should have a clear understanding
of the software’s quality and reliability, and any defects or issues that were identified
during testing should have been resolved. The test closure stage also includes
documenting the testing process and any lessons learned, so that they can be used to
improve future testing processes
Test closure is the final stage of the Software Testing Life Cycle (STLC) where all
testing-related activities are completed and documented. The main activities that
take place during the test closure stage include:
Test summary report: A report is created that summarizes the overall testing
process, including the number of test cases executed, the number of defects found,
and the overall pass/fail rate.
Defect tracking: All defects that were identified during testing are tracked and
managed until they are resolved.
Test environment clean-up: The test environment is cleaned up, and all test
data and test artifacts are archived.
Test closure report: A report is created that documents all the testing-related
activities that took place, including the testing objectives, scope, schedule, and
resources used.
Knowledge transfer: Knowledge about the software and testing process is
shared with the rest of the team and any stakeholders who may need to maintain or
support the software in the future.
Feedback and improvements : Feedback from the testing process is collected
and used to improve future testing processes
It is important to note that test closure is not just about documenting the testing process,
but also about ensuring that all relevant information is shared and any lessons learned
are captured for future reference. The goal of test closure is to ensure that the software
is ready for release and that the testing process has been conducted in an organized and
efficient manner.
Unit testing
Integration testing
System testing
Acceptance testing
Non-functional testing methods incorporate all test types focused on the operational aspects of a
piece of software. These include:
Performance testing
Security testing
Usability testing
Compatibility testing
Unit Testing
Unit testing is the first level of testing and is often performed by the developers themselves. It is
the process of ensuring individual components of a piece of software at the code level are
functional and work as they were designed to. Developers in a test-driven environment will
typically write and run the tests prior to the software or feature being passed over to the test
team. Unit testing can be conducted manually, but automating the process will speed up delivery
cycles and expand test coverage. Unit testing will also make debugging easier because finding
issues earlier means they take less time to fix than if they were discovered later in the testing
process. TestLeft is a tool that allows advanced testers and developers to shift left with the fastest
test automation tool embedded in any IDE.
Integration Testing
After each unit is thoroughly tested, it is integrated with other units to create modules or
components that are designed to perform specific tasks or activities. These are then tested as
group through integration testing to ensure whole segments of an application behave as expected
(i.e, the interactions between units are seamless). These tests are often framed by user scenarios,
such as logging into an application or opening files. Integrated tests can be conducted by either
developers or independent testers and are usually comprised of a combination of automated
functional and manual tests.
System Testing
System testing is a black box testing method used to evaluate the completed and integrated
system, as a whole, to ensure it meets specified requirements. The functionality of the software is
tested from end-to-end and is typically conducted by a separate testing team than the
development team before the product is pushed into production.
Acceptance Testing
Acceptance testing is the last phase of functional testing and is used to assess whether or not the
final piece of software is ready for delivery. It involves ensuring that the product is in
compliance with all of the original business criteria and that it meets the end user’s needs. This
requires the product be tested both internally and externally, meaning you’ll need to get it into
the hands of your end users for beta testing along with those of your QA team. Beta testing is key
to getting real feedback from potential customers and can address any final usability concerns.
Performance Testing
Performance testing is a non-functional testing technique used to determine how an application
will behave under various conditions. The goal is to test its responsiveness and stability in real
user situations. Performance testing can be broken down into four types:
Load testing is the process of putting increasing amounts of simulated demand on your
software, application, or website to verify whether or not it can handle what it’s designed to
handle.
Stress testing takes this a step further and is used to gauge how your software will
respond at or beyond its peak load. The goal of stress testing is to overload the application on
purpose until it breaks by applying both realistic and unrealistic load scenarios. With stress
testing, you’ll be able to find the failure point of your piece of software.
Endurance testing, also known as soak testing, is used to analyze the behavior of an
application under a specific amount of simulated load over longer amounts of time. The goal
is to understand how your system will behave under sustained use, making it a longer process
than load or stress testing (which are designed to end after a few hours). A critical piece of
endurance testing is that it helps uncover memory leaks.
Spike testing is a type of load test used to determine how your software will respond to
substantially larger bursts of concurrent user or system activity over varying amounts of time.
Ideally, this will help you understand what will happen when the load is suddenly and
drastically increased.
Security Testing
With the rise of cloud-based testing platforms and cyber attacks, there is a growing concern and
need for the security of data being used and stored in software. Security testing is a non-
functional software testing technique used to determine if the information and data in a system is
protected. The goal is to purposefully find loopholes and security risks in the system that could
result in unauthorized access to or the loss of information by probing the application for
weaknesses. There are multiple types of this testing method, each of which aimed at verifying six
basic principles of security:
1. Integrity
2. Confidentiality
3. Authentication
4. Authorization
5. Availability
6. Non-repudiation
Usability Testing
Usability testing is a testing method that measures an application’s ease-of-use from the end-user
perspective and is often performed during the system or acceptance testing stages. The goal is to
determine whether or not the visible design and aesthetics of an application meet the intended
workflow for various processes, such as logging into an application. Usability testing is a great
way for teams to review separate functions, or the system as a whole, is intuitive to use.
Compatibility Testing
Compatibility testing is used to gauge how an application or piece of software will work in
different environments. It is used to check that your product is compatible with multiple
operating systems, platforms, browsers, or resolution configurations. The goal is to ensure that
your software’s functionality is consistently supported across any environment you expect your
end users to be using.
Static testing is about the prevention of defects whereas Dynamic testing is about finding
and fixing the defects. Static testing does the verification process while Dynamic testing does
the validation process. Static testing is performed before compilation whereas Dynamic testing is
performed after compilation.
Static Testing is a type of software testing in which software application is tested
without code execution. Manual or automated reviews of code, requirement
documents and document design are done in order to find the errors. The main
objective of static testing is to improve the quality of software applications by finding
errors in early stages of software development process.
Static testing involves manual or automated reviews of the documents. This review is
done during an initial phase of testing to catch Defect early in STLC. It examines
work documents and provides review comments. It is also called Non-execution
testing or verification testing.
Dynamic Testing?
Under Dynamic Testing, a code is executed. It checks for functional behavior of
software system, memory/cpu usage and overall performance of the system. Hence
the name “Dynamic”
The main objective of this testing is to confirm that the software product works in
conformance with the business requirements. This testing is also called an Execution
technique or validation testing.
Dynamic testing executes the software and validates the output with the expected
outcome. Dynamic testing is performed at all levels of testing and it can be either
black or white box testing.
Verification is the process of checking that a software achieves its goal without any
bugs. It is the process to ensure whether the product that is developed is right or not. It
verifies whether the developed product fulfills the requirements that we have.
Verification is static testing.
Verification means Are we building the product right?
Validation is the process of checking whether the software product is up to the mark or
in other words product has high level requirements. It is the process of checking the
validation of product i.e. it checks what we are developing is the right product. it is
validation of actual and expected product. Validation is the dynamic testing.
Validation means Are we building the right product?
Verification Validation
It includes checking documents, design, It includes testing and validating the actual
codes and programs. product.
Verification Validation
Methods used in verification are reviews, Methods used in validation are Black Box
walkthroughs, inspections and desk- Testing, White Box Testing and non-
checking. functional testing.
It can find the bugs in the early stage of the It can only find the bugs that could not be
development. found by the verification process.