CTPS - Unit 4 Notes
CTPS - Unit 4 Notes
Automated Testing is a technique where the Tester writes scripts on their own and uses
suitable Software or Automation Tool to test the software.
It is an Automation Process of a Manual Process. It allows for executing repetitive tasks without
the intervention of a Manual Tester.
• It is used to automate testing tasks that are difficult to perform manually.
• Automation tests can be run at any time of the day as they use scripted sequences
to examine the software.
• Automation tests can also enter test data compare the expected result with the actual
result and generate detailed test reports.
• The goal of automation tests is to reduce the number of test cases to be executed
manually but not to eliminate manual testing.
• It is possible to record the test suit and replay it when required.
It is also used to ensure that the API is compatible with different platforms and operating
systems and can be integrated with other systems and applications.
API testing is important because it helps ensure that the different systems that make up
an application are working together correctly, and that the data being exchanged is accurate and
secure.
It is also important because it helps identify and fix issues before the application is
deployed to production.
Below list represents some of the tools which are used for API Testing:
1. Postman 2. Katalon Studio 3. Parasoft
4. Soap UI 5. REST assured. 6. Tricentis Tosca
7. Ping API 8. Assertible
GUI testing is different from the API testing as GUI testing is present at Presentation layer where
the API testing is present at Business layer. If we take an example of a typical app then API is
the middle layer in between UI layer and Data base layer and due to this API communication and
data exchange between the applications occur. The below figure represents the layer at which
API testing is performed:
Integration testing
• Integration testing is the process of testing the interface between two software units or
modules.
• It focuses on determining the correctness of the interface.
• The purpose of integration testing is to expose faults in the interaction between
integrated units.
• Once all the modules have been unit-tested, integration testing is performed.
• Integration testing is a software testing technique that focuses on verifying the
interactions and data exchange between different components or modules of a software
application.
• The goal of integration testing is to identify any problems or bugs that arise when
different components are combined and interact with each other.
• Integration testing is typically performed after unit testing and before system testing.
• It helps to identify and resolve integration issues early in the development cycle,
reducing the risk of more severe and costly problems later.
• Integration testing can be done by picking module by module.
• Exposing the defects is the major focus of the integration testing and the time of
interaction between the integrated units.
Integration test approaches – There are four types of integration testing approaches. Those
approaches are the following:
1. Big-Bang Integration Testing –
• It is the simplest integration testing approach, where all the modules are combined,
and the functionality is verified after the completion of individual module testing. In
simple words, all the modules of the system are simply put together and tested.
• This approach is practicable only for very small systems. If an error is found during
the integration testing, it is very difficult to localize the error as the error may
potentially belong to any of the modules being integrated.
• So, debugging errors reported during Big Bang integration testing is very expensive
to fix.
• This approach is typically used when the software components have a low degree
of interdependence or when there are constraints in the development environment
that prevent testing individual components.
• The goal of big-bang integration testing is to verify the overall functionality of the
system and to identify any integration problems that arise when the components are
combined.
Advantages:
1. It is convenient for small systems.
2. Simple and straightforward approach.
3. Can be completed quickly.
4. Does not require a lot of planning or coordination.
5. May be suitable for small systems or projects with a low degree of interdependence
between components.
Disadvantages:
1. There will be quite a lot of delay because you would have to wait for all the modules
to be integrated.
2. High-risk critical modules are not isolated and tested on priority since all modules
are tested at once.
3. Not Good for long projects.
4. High risk of integration problems that are difficult to identify and diagnose.
5. This can result in long and complex debugging and troubleshooting efforts.
6. This can lead to system downtime and increased development costs.
7. May not provide enough visibility into the interactions and data exchange between
components.
8. This can result in a lack of confidence in the system’s stability and reliability.
9. This can lead to decreased efficiency and productivity.
10. This may result in a lack of confidence in the development team.
11. This can lead to system failure and decreased user satisfaction.
Applications:
1. Identify the components: Identify the individual components of your application
that need to be integrated. This could include the frontend, backend, database, and
any third-party services.
2. Create a test plan: Develop a test plan that outlines the scenarios and test cases
that need to be executed to validate the integration points between the different
components. This could include testing data flow, communication protocols, and error
handling.
3. Set up test environment: Set up a test environment that mirrors the production
environment as closely as possible. This will help ensure that the results of your
integration tests are accurate and reliable.
4. Execute the tests: Execute the tests outlined in your test plan, starting with the
most critical and complex scenarios. Be sure to log any defects or issues that you
encounter during testing.
5. Analyze the results: Analyze the results of your integration tests to identify any
defects or issues that need to be addressed. This may involve working with
developers to fix bugs or make changes to the application architecture.
6. Repeat testing: Once defects have been fixed, repeat the integration testing
process to ensure that the changes have been successful, and that the application
still works as expected.
Regression Testing
• It is the process of testing the modified parts of the code and the parts that might get
affected due to the modifications to ensure 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.
When to do regression testing?
• When a new functionality is added to the system and the code has been modified to
absorb and integrate that functionality with the existing code.
• When some defect has been identified in the software and the code is debugged to
fix it.
• When the code is modified to optimize it’s working.
Smoke Testing
• Smoke Testing is a software testing method that determines whether the employed
build is stable or not.
• It is used to quickly identify and fix any major issues with the software before more
detailed testing is performed.
• The goal of smoke testing is to determine whether the build is stable enough to
proceed with further testing.
• It acts as confirmation of whether the quality assurance team can proceed with further
testing.
• Smoke tests are a minimum set of tests run on each build.
• Smoke testing is a process where the software build is deployed to a quality assurance
environment and is verified to ensure the stability of the application.
• Smoke Testing is also known as Confidence Testing or Build Verification Testing.
In other words, we verify whether the important features are working and there are no
showstoppers in the build that are under testing. It is a mini and quick regression test of major
functionality.
Smoke testing shows that the product is ready for testing. This helps in determining if
the build is flawed to make any further testing a waste of time and resources.
Smoke Testing
Characteristics of Smoke Testing:
Unit Testing
• Unit testing is a type of software testing that focuses on individual units or components
of a software system.
• The purpose of unit testing is to validate that each unit of the software works as
intended and meets the requirements.
• Unit testing is typically performed by developers, and it is performed early in the
development process before the code is integrated and tested as a whole system.
• Unit tests are automated and are run each time the code is changed to ensure that new
code does not break existing functionality.
• Unit tests are designed to validate the smallest possible unit of code, such as a
function or a method, and test it in isolation from the rest of the system.
• This allows developers to quickly identify and fix any issues early in the development
process, improving the overall quality of the software and reducing the time required for
later testing.
• It is a testing method using which every independent module is tested to determine if
there is an issue by the developer himself.
• Unit Testing of the software product is carried out during the development of an
application. An individual component may be either an individual function or a procedure.
Thus, Unit Testing is defined as a type of software testing where individual components
of a software are tested.
Objective of Unit Testing:
The objective of Unit Testing is:
1. To isolate a section of code.
2. To verify the correctness of the code.
3. To test every function and procedure.
4. To fix bugs early in the development cycle and to save costs.
5. To help the developers understand the code base and enable them to make
changes quickly.
6. To help with code reuse.
System Testing
• System testing is a type of software testing that evaluates the overall functionality and
performance of a complete and fully integrated software solution.
• It tests if the system meets the specified requirements and if it is suitable for delivery to
the end-users.
• This type of testing is performed after the integration testing and before the acceptance
testing.
• System Testing is a type of software testing that is performed on a complete
integrated system to evaluate the compliance of the system with the corresponding
requirements.
• In system testing, integration testing passed components are taken as input. The goal of
integration testing is to detect any irregularity between the units that are integrated
together.
• System testing detects defects within both the integrated units and the whole system.
• The result of system testing is the observed behavior of a component or a system when
it is tested.
• System Testing is carried out on the whole system in the context of either system
requirement specifications or functional requirement specifications or in the context of
both.
• System testing tests the design and behavior of the system and also the expectations of
the customer.
• It is performed to test the system beyond the bounds mentioned in the software
requirements specification (SRS).
• System Testing is basically performed by a testing team that is independent of the
development team that helps to test the quality of the system impartial.
• It has both functional and non-functional testing. System Testing is a black-box
testing. System Testing is performed after the integration testing and before the
acceptance testing.
GUI Testing
• Graphical User Interface Testing (GUI) Testing is the process for ensuring proper
functionality of the graphical user interface (GUI) for a specific application.
• GUI testing generally evaluates a design of elements such as layout, colors and also
fonts, font sizes, labels, text boxes, text formatting, captions, buttons, lists, icons, links,
and content.
• GUI testing processes may be either manual or automatic and are often performed by
third-party companies, rather than developers or end users.
Concurrent Activity
• Concurrent activities involve tasks that can be done at the same time.
• It refers to projects that can accommodate more than one activity to be completed at a
given point in time. In serial activities, the task commencement or completion depends on
others, while concurrent tasks can be done without depending on others.
• A concurrent activity in project management refers to overlapping or simultaneous tasks
that are independent of one another.
• It is different from using dependencies in the project schedule, and it doesn’t require team
members to focus on many things at once.
• Concurrent project management is the effective integration of all functions and processes
that are needed during the implementation of a project plan.
• It often focuses on the objective of transferring technology to market faster and more
predictably.
When are Overlapping Tasks Used in Project Management?
There are many reasons why project managers resort to this kind of scheduling.
• When detailed resource schedules are required. Especially in industries such as
engineering, construction, production, and design.
• Sometimes in the inverse of the above situation – when a high-level overview of the work
breakdown structure (WBS) is all that it necessary.
• Maybe the overlapping tasks don’t require the same amount of effort. And they can both
easily be achieved in the same time period.
• Perhaps one is a longer, ongoing task that doesn’t require constant involvement.
• Or one task has experienced a bottleneck in the process, opening up the opportunity to
schedule something else in the meantime.
• However, if one of those tasks requires less effort or you want to prioritize it, then you can
manually change the utilization by clicking on the task. Adjust the utilization based upon
the effort needed for each task, for example one task could be 20% while the other is at
60%. Click “save” and that’s that.
Manually adjust the resource’s utilization to get them down to 100%.
• Once you adjust the utilization, you’ll also notice that the bar chart above changes to
correspond with the update, both in color and percentage-wise. This can be seen below.
• You can also determine the actual “busy time” required to perform the task and schedule
that way. Or better yet, use a combination of the two methods.
Parallel development
Parallel development involves working on multiple projects or features simultaneously. Let’s
break it down:
Pros:
● Simultaneous Work: Teams can work concurrently, accelerating development.
● Building on Each Other’s Work: Teams can build upon one another’s progress, leveraging
shared components and features.
Cons:
● Integration Challenges: Managing and tracking all active branches can be complex.
● Late-Stage Defects: Waiting until the end for integration often leads to late-stage defects
and quality issues.
1. Branching and Testing: Proper branching and testing are critical. Automated branching
helps teams work independently without overwriting each other’s changes. It ensures early
and frequent integration.
2. Version Control Solution: To achieve parallel development at scale, use a robust version
control solution with advanced branching capabilities Helix Core from Perforce offers
Perforce Streams for efficient branching1.
Continuous Integration
● Reduce Manual Tasks: CI helps in reducing the manual tasks involved in the software
development process. By reducing the manual activities in the projects save lot of time
and efforts.
● Code Integrations and Improvements: Help to improve code quality by automating
the testing of code changes and by providing developers with feedback on their
changes.
● Collaboration with Team members: If you are in a team working together with your
team members then this CI will help your developers team to share and integrate their
work. This will improve communication and reduce conflicts in the code.
● Visibility and Transparency: CI provides developers with visibility of code change.
This helps developers to quickly identify the changes and to fix problems asap.
● Faster Release: When you set up continuous integration with continuous deployment,
your changes will be live whenever you make changes to your code and push it to the
release branch.
Simultaneous Testing Phases
● To identify the effect of accessing the same code in application at the same time by
multi-user.
● To detect the defects in software system or application while multiple users are logged
in.
● To improve the reliability of concurrent programming.
● To improve the robustness of the concurrent programming.
● Single Time Test Execution: This is considered not the effective technique for
concurrent testing. Especially in non-deterministic systems this technique is ineffective
and is just like testing a non-concurrent program.
● Multi-time Test Execution: It is effective in finding the defects in non-deterministic
systems.
● Deterministic Technique: This technique is used to test the system in a special state so
that code can be executed easily. It is different from above two techniques.
● Reachability Technique: This technique is used to test synchronized combinations of
sequences for a specified input, and it is basically for non-deterministic systems.
● Structured Technique: This is a structural technique for code analysis, and this is
different from above mentioned techniques.
● Multi-user Technique: This technique is used to test the concurrent program by
checking the multiple user login serving different or same tasks simultaneously.
What is a Bug/Defect?
• A defect is an error or bug in an application that is created during the building or designing
of software and due to which software starts to show abnormal behaviors during its use.
• So, it is one of the important responsibilities of the tester to find as much as defect possible
to ensure the quality of the product is not affected and the end product is fulfilling all
requirements perfectly for which it has been designed and provide required services to the
end-user.
• Because as much as defects will be identified and resolved then the software will behave
perfectly as per expectation.
Fixing a bug
• Now when we have our bug spotted, reported, and reproduced we must fix it.
• That's the part when you modify your codebase to remove the unexpected behavior. That
should not be that hard after all!
• After you fixed your code and submitted your code, CI build must pass. If so, the bug is
fixed. But there's one more thing to do.
there's one more thing that most developers tend not to do: writing a postmortem.
• Some bugs are easy and do not require this step, but some bugs cost us a lot of time and
money.
• We should take extra care about them.
• Postmortem is a non-technical story of what had happened that you can show to your
management (and the one they will understand). What should be included in a
postmortem?
• Why did the bug happen? This must be a non-technical summary of all actions that lead
to this problem. And it must contain a link to the original bug report.
• What have we done to fix the bug? Again, keep it simple, do not go deep into technical
details. Just make sure that your commit is linked to this document.
• What impact it had on our product/users/clients? It needs to be calculated or intelligently
guessed.
• What was the timeline? Remember when you saved all links to the logs/monitoring/ etc?
It will be useful to build a timeline. How long we had suffered from this bug? When did it
get solved?
A short guide to fixing bugs in software.
1. Understand the problem.
2. Consider any integration/end-to-end tests.
3. Nail down where the change needs to be made.
4. Unit tests.
5. Make your changes.
6. Consider the impact.
7. Review your changes.
8. Commit and communicate.