DEVOPS - Section One - Basics of Software Testing v2
DEVOPS - Section One - Basics of Software Testing v2
"If you don’t like testing your product, most likely your customers won’t like testing it either." –
Anonymous
Course Objectives:
• Understand and apply various software testing methodologies and best practices.
• Learn the principles, tools, and practices of DevOps.
• Bridge the gap between development, testing, and operations teams for continuous delivery and
integration.
• Apply automation in testing and DevOps pipelines to optimize the software development
lifecycle.
Course Modules Overview
1. What is DevOps?
o Overview and importance
o DevOps lifecycle: Continuous Development, Continuous Testing, Continuous Integration
(CI), Continuous Deployment (CD), and Continuous Monitoring
o DevOps vs Agile vs Waterfall
2. DevOps Culture and Practices:
o Collaboration between Development and Operations
o Infrastructure as Code (IaC)
o Microservices architecture
3. The CALMS Framework: Culture, Automation, Lean, Measurement, Sharing
1. CI/CD Principles
o Benefits and Challenges
o Automated builds and testing
o Deployment pipelines
2. CI/CD Tools:
o Jenkins, CircleCI, Travis CI
o GitLab CI/CD
o Azure DevOps
3. Version Control with Git:
o Branching strategies
o Git workflows for DevOps
1. Introduction to IaC:
o Automating infrastructure setup
o Provisioning and managing environments (dev, test, prod)
2. IaC Tools:
o Explore public cloud platforms (AWS, GCP and Azure)
o Terraform
o AWS CloudFormation
3. Configuration Management Tools:
o Ansible
o Chef
o Puppet
1. Introduction to Containers:
o What are containers and why use them?
o Benefits over virtual machines (VMs)
2. Docker:
o Basic Docker commands
o Writing Dockerfiles
o Docker Compose
3. Kubernetes:
o Introduction to Kubernetes (K8s)
o Kubernetes architecture (Pods, Services, Nodes)
o Helm charts for managing K8s configurations
Section 9: Monitoring, Logging, and Incident Management
1. Introduction to DevSecOps
o Shifting security to the left
o Principles of secure code and secure deployments
2. Security Tools:
o OWASP for application security
o SonarQube for static code analysis
o Snyk for dependency vulnerability checking
o Security in CI/CD pipelines
1. Case Studies:
o CI/CD implementation in enterprises
o Successful DevOps transformations
2. Final Project:
o Implement a full CI/CD pipeline for a sample application.
o Write automated tests for an application and integrate them into the pipeline.
o Set up infrastructure as code and container orchestration for deployment.
o Configure monitoring and alerting for the deployed application.
1.1 Definition
Software Testing is a method used to check whether the actual software product matches
expected requirements and to ensure that software product is defect free. It involves execution of
software/system components using manual or automated tools to evaluate one or more properties
of interest. The purpose of software testing is to identify errors, gaps or missing requirements in
contrast to actual requirements.
Some also define Software testing as a White Box and Black Box Testing. In simple terms,
Software Testing means the Verification of Application Under Test (AUT).
In section one of this course, you are going to dive deep into developing Software Tests and
understand importance of building tests.
Software Testing is Important because if there are any bugs or errors in the software, it can be
identified early and can be solved before delivery of the software product. Properly tested
software product ensures reliability, security and high performance which further results in time
saving, cost effectiveness and customer satisfaction.
Are there examples of where poor Testing resulted into trivial losses?
Testing is important because software bugs could be expensive or even dangerous. Software
bugs can potentially cause monetary and human loss, and history is full of such examples.
• Nissan cars recalled over 1 million cars from the market due to software failure in the
airbag sensory detectors. There has been reported two accident due to this software
failure.
• Starbucks was forced to close about 60 percent of stores in the U.S and Canada due to
software failure in its POS system. At one point, the store served coffee for free as they
were unable to process the transaction.
• Some of Amazon’s third-party retailers saw their product price is reduced to 1% due to a
software glitch. They were left with heavy losses.
• China Airlines Airbus A300 crashed due to a software bug on April 26, 1994, killing 264
innocents live
• In 1985, Canada’s Therac-25 radiation therapy machine malfunctioned due to software
bug and delivered lethal radiation doses to patients, leaving 3 people dead and critically
injuring 3 others.
• In April of 1999, a software bug caused the failure of a $1.2 billion military satellite
launch, the costliest accident in history
• In May of 1996, a software bug caused the bank accounts of 823 customers of a major
U.S. bank to be credited with 920 million US dollars.
Software testing is a critical phase in the Software Development Lifecycle (SDLC) that ensures
the quality, functionality, and reliability of a software product. It serves as the backbone for
delivering high-performance applications by detecting defects early, reducing costs, and
improving user satisfaction.
Objective: To validate that the software meets business requirements and customer expectations.
Impact: A well-tested product ensures high quality by eliminating bugs, improving performance,
and enhancing the overall user experience. Quality software builds trust with users and
minimizes risks.
2. Detects Bugs and Defects Early
Impact: Early bug detection significantly reduces the cost of fixing issues. The later a defect is
found in the SDLC, the more costly it becomes to address. By testing early (e.g., through unit
tests or integration tests), potential problems are caught before they propagate.
Impact: Fixing defects in production environments can be incredibly costly in terms of time,
money, and resources. Effective testing before deployment mitigates these risks, especially in
mission-critical systems, where failures could lead to significant losses.
Impact: Testing verifies whether the software behaves as expected and fulfills all specified
requirements (e.g., user authentication, data processing). This validation helps confirm that the
software aligns with customer needs and business objectives.
5. Improves Security
Impact: Testing helps safeguard against potential threats such as data breaches, unauthorized
access, and other cyberattacks. Incorporating security testing (e.g., penetration testing,
vulnerability scanning) is crucial for protecting sensitive data and maintaining trust in the
software.
Impact: Performance testing ensures that the software is scalable and can handle expected
workloads without performance degradation. Load testing and stress testing help uncover
performance bottlenecks and allow teams to optimize resource usage.
Impact: In Agile development, frequent testing is necessary to maintain the pace of iterative
development. Continuous Integration (CI) pipelines rely on automated testing to catch bugs with
every code commit, ensuring continuous delivery of high-quality software.
Impact: Usability testing ensures that the product is easy to use, intuitive, and delivers a smooth
user experience. Focusing on UX testing increases customer satisfaction, which can directly
influence product adoption and market success.
Objective: Ensure the software complies with legal and industry regulations.
Impact: Some industries (e.g., healthcare, finance) require strict adherence to regulations.
Testing helps verify that the product complies with legal standards like GDPR, HIPAA, and PCI-
DSS. Compliance testing is essential for avoiding legal penalties.
Testing and debugging are two essential but distinct processes in software development. While
they both aim to improve software quality, they serve different purposes and are used at different
stages of the software lifecycle.
1. Definition:
Testing:
• Purpose: Testing is the process of executing a program with the goal of finding defects
or validating that the software works as intended.
• Focus: It is primarily concerned with identifying bugs, validating features, and ensuring
that the software meets functional and non-functional requirements.
• Output: The output of testing is a report of any failures, defects, or inconsistencies
found.
Debugging:
• Purpose: Debugging is the process of identifying, isolating, and fixing the root cause of
defects or issues in the code.
• Focus: Debugging is about understanding why a program is not working as expected and
then resolving the underlying issue.
• Output: The output of debugging is the corrected code and confirmation that the issue
has been resolved.
2. Objectives:
Testing:
• Detect: Testing aims to detect bugs, errors, or unexpected behaviors.
• Verification: It verifies that the software functions correctly according to the specified
requirements.
• Validation: Ensures that the product meets the end user's needs (validation).
Debugging:
• Locate: Debugging is used to locate the specific part of the code responsible for the
failure or bug.
• Repair: It aims to fix the underlying code issues and remove errors from the system.
• Understand: The developer must understand why the error occurred and prevent it from
happening again.
3. Process:
Testing:
• Testing involves executing the software and observing its behavior to ensure it behaves
as expected.
• It can be done manually or automatically through different types of testing (unit,
integration, system, acceptance).
• Testing usually follows predefined test cases or scripts, covering various use cases and
edge cases.
Debugging:
• Debugging is more exploratory and is often triggered after a test fails or a bug is reported.
• The process typically involves using a debugger tool or logging mechanisms to trace the
execution flow, inspect variable values, and analyze system behavior.
• Once the issue is identified, the developer makes code modifications and retests the
affected areas.
Debugging:
Testing:
• Testing is a planned activity that happens throughout the SDLC (Software Development
Lifecycle).
• It can occur at multiple stages: unit testing during development, integration testing when
components interact, system testing before release, and regression testing after changes.
Debugging:
• Debugging is a reactive activity, typically performed after a failure or defect has been
detected.
• It is triggered by test failures, bug reports, or unexpected system behavior.
6. Tools Used:
Testing:
Debugging:
7. Level of Involvement:
Testing:
• Testing can be done without a deep understanding of the code’s internal logic.
• It is focused on functional verification, often using black-box testing where testers only
look at input/output.
Debugging:
• Debugging requires a deep knowledge of the codebase and how different components
interact.
• It involves code-level diagnosis to pinpoint and correct specific faults.
8. Outcomes:
Testing:
• The goal of testing is to produce a test report, highlighting defects, failed test cases, and
areas that require debugging.
• If the software passes all tests, it can proceed to the next phase of development or
deployment.
Debugging:
• The outcome of debugging is fixed code that resolves the specific issue that was causing
the test to fail or the system to malfunction.
• After debugging, the affected tests are re-run to verify that the issue is resolved.
Summary:
• Testing is about finding defects and validating functionality, while debugging is about
finding the root cause of defects and fixing them.
• Testing is proactive and structured, while debugging is reactive and exploratory.
• Both are essential in ensuring the delivery of high-quality software, with testing focusing
on ensuring the software behaves as expected and debugging addressing issues when
things go wrong.
CHAPTER TWO: TYPES OF SOFTWARE TESTING
The main categories are Functional Testing, Non-Functional Testing, Maintenance Testing, and testing
based on Automation and Manual methods. Below is a detailed breakdown of the types of software
testing within these categories
1. Functional Testing
Functional testing focuses on verifying that the software behaves as expected according to the
specified requirements. It tests the system's individual features and functions to ensure they work
correctly.
• Types: Unit testing, integration testing, system testing, and user acceptance testing (UAT).
• Goal: To ensure that each function of the software application operates in conformance with
the required specification.
• Example: Testing login functionality by entering valid and invalid credentials to check if the user
is authenticated properly.
2. Non-Functional Testing
Non-functional testing evaluates aspects of the software that do not relate to specific functions
but to overall quality attributes like performance, usability, security, and reliability.
• Types: Performance testing, load testing, stress testing, security testing, and usability testing.
• Goal: To ensure that the software meets certain criteria under load and in various
environments.
• Example: Running performance tests to check if the software can handle 1,000 simultaneous
users without crashing.
3. Maintenance Testing
Maintenance testing occurs after the software has been deployed and is in use. This type of
testing ensures that changes such as bug fixes or feature enhancements do not introduce new
issues.
Each of these testing types is important for different phases of the software lifecycle and helps ensure
that the final product is reliable and performs as intended.
Maintenance • Regression
• Maintenance
The list of software testing types is endless and not all types are possible to all projects, it
depends on each project. The Software testing types can also be further categorized based on
execution processes, ie Manual vs Automation as shown in figure 2.2
2. 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 behavior of the system is as
per the requirement or not. It tests all the aspects that are not tested in functional testing. Non-
functional testing is a software testing technique that checks the non-functional attributes of
the system. It is designed to test the readiness of a system as per non-functional parameters
which are never addressed by functional testing. Non-functional testing is as important as
functional testing.
Benefits of Non-functional Testing
• Improved performance: Non-functional testing checks the performance of the system and
determines the performance bottlenecks that can affect the performance.
• Less time-consuming: Non-functional testing is overall less time-consuming than the
other testing process.
• Improves user experience: Non-functional testing like Usability testing checks how easily
usable and user-friendly the software is for the users. Thus, focus on improving the overall
user experience for the application.
• More secure product: As non-functional testing specifically includes security testing that
checks the security bottlenecks of the application and how secure is the application against
attacks from internal and external sources.
Types of Functional Testing
1. Unit Testing
2. Integration Testing
3. System Testing
1. Unit Testing
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. Unit tests are usually automated and are designed to test specific parts of
the code, such as a particular function or method. Unit testing is done at the lowest level of
the software development process , where individual units of code are tested in isolation.
Note: Unit Testing basically Included in both White Box Testing and Black Box Testing.
Example:
1. In a program we are checking if the loop, method, or function is working fine.
2. Misunderstood or incorrect, arithmetic precedence.
3. Incorrect initialization.
2. Integration Testing
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:
Different ways of Integration Testing are discussed below.
• 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.
Advantages of Integrating Testing
• It helps to identify and resolve issues that may arise when different units of the software
are combined.
• It helps to ensure that the different units of the software work together as intended.
• It helps to improve the overall reliability and stability of the software.
• It’s important to keep in mind that Integration testing is essential for complex systems
where different components are integrated.
• As with unit testing, integration testing is only one aspect of software testing and it should
be used in combination with other types of testing such as unit testing, functional testing,
and acceptance testing to ensure that the software meets the needs of its users.
The objective is to take unit-tested components and build a program structure that has been
dictated by design. Integration testing is testing in which a group of components is combined to
produce output.
Integration testing is of four types: (i) Top-down (ii) Bottom-up (iii) Sandwich (iv) Big-
Bang
Example:
1. Black Box testing: It is used for validation. In this, we ignore internal working
mechanisms and focus on “what is the output?”
2. White box testing: It is used for verification. In this, we focus on internal mechanisms i.e.
how the output is achieved.
3. 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 completely 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.
Performance testing is a type of software testing that focuses on evaluating the performance
and scalability of a system or application. The goal of performance testing is to identify
bottlenecks, measure system performance under various loads and conditions, and ensure that
the system can handle the expected number of users or transactions.
Advantages of Performance Testing
• Performance testing ensures the speed, load capability, accuracy, and other performances
of the system.
• It identifies, monitors, and resolves the issues if anything occurs.
• It ensures the great optimization of the software and also allows many users to use it at the
same time.
• It ensures the client as well as the end-customer’s satisfaction. Performance testing has
several advantages that make it an important aspect of software testing:
• Identifying bottlenecks : Performance testing helps identify bottlenecks in the system
such as slow database queries, insufficient memory, or network congestion. This helps
developers optimize the system and ensure that it can handle the expected number of users
or transactions.
2. Usability Testing
You design a product (say a refrigerator) and when it becomes completely ready, you need a
potential customer to test it to check it working. To understand whether the machine is ready to
come on the market, potential customers test the machines. Likewise, the best example of
usability testing is when the software also undergoes various testing processes which is
performed by potential users before launching into the market. It is a part of the software
development lifecycle (SDLC).
Advantages and Disadvantages of Usability Testing
Usability testing is preferred to evaluate a product or service by testing it with the proper users.
In Usability testing, the development and design teams will use to identify issues before coding
and the result will be earlier issues will be solved. During a Usability test, you can,
• Learn if participants will be able to complete the specific task completely.
• identify how long it will take to complete the specific task.
• Gives excellent features and functionalities to the product
• Improves user satisfaction and fulfills requirements based on user feedback
• The product becomes more efficient and effective
3. Compatibility Testing
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. This
compatibility testing is very important in product production and implementation point of view
as it is performed to avoid future issues regarding compatibility.
Advantages of Compatibility Testing
• It ensures complete customer satisfaction.
• It provides service across multiple platforms.
• Identifying bugs during the development process.
There are 4 Types of Performance Testing
1. Load Testing
2. Stress Testing
3. Scalability Testing
4. Stability Testing
1. Load Testing
Load testing determines the behavior of the application when multiple users use it at the same
time. It is the response of the system measured under varying load conditions.
1. The load testing is carried out for normal and extreme load conditions.
2. Load testing is a type of performance testing that simulates a real-world load on a system
or application to see how it performs under stress.
3. The goal of load testing is to identify bottlenecks and determine the maximum number of
users or transactions the system can handle.
4. It is an important aspect of software testing as it helps ensure that the system can handle the
expected usage levels and identify any potential issues before the system is deployed to
production.
Advantages of Load Testing:
Load testing has several advantages that make it an important aspect of software testing:
1. Identifying bottlenecks: Load testing helps identify bottlenecks in the system such as slow
database queries, insufficient memory, or network congestion. This helps developers
optimize the system and ensure that it can handle the expected number of users or
transactions.
2. Improved scalability: By identifying the system’s maximum capacity, load testing helps
ensure that the system can handle an increasing number of users or transactions over time.
This is particularly important for web-based systems and applications that are expected to
handle a high volume of traffic.
3. Improved reliability: Load testing helps identify any potential issues that may occur under
heavy load conditions, such as increased error rates or slow response times. This helps
ensure that the system is reliable and stable when it is deployed to production.
2. Stress Testing
In Stress Testing , we give unfavorable conditions to the system and check how it perform in
those conditions.
Example:
1. Test cases that require maximum memory or other resources are executed.
2. Test cases that may cause thrashing in a virtual operating system.
3. Test cases that may cause excessive disk requirement Performance Testing.
It is designed to test the run-time performance of software within the context of an integrated
system. It is used to test the speed and effectiveness of the program. It is also called load testing.
In it, we check, what is the performance of the system in the given load.
Example:
Checking several processor cycles.
3. Scalability Testing
Scalability Testing is a type of non-functional testing in which 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. Scalability Testing is defined as the ability of a
network, system, application, product or a process to perform the function correctly when
changes are made in the size or volume of the system to meet a growing need. It ensures that a
software product can manage the scheduled increase in user traffic, data volume, transaction
counts frequency, and many other things. It tests the system, processes, or database’s ability to
meet a growing need.
Advantages of Scalability Testing
• It provides more accessibility to the product.
• It detects issues with web page loading and other performance issues.
• It finds and fixes the issues earlier in the product which saves a lot of time.
• It ensures the end-user experience under the specific load. It provides customer satisfaction.
• It helps in effective tool utilization tracking.
4. Stability Testing
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.
Example:
In school records, suppose we have module staff, students, and finance combining these
modules and checking if the integration of these modules works fine in regression testing.
We will discuss the Technical and Non-Technical required to become a Software Tester
Non-Technical Skills
Following skills are essential to become a good Software quality tester. Compare your skill set
against the following checklist to determine whether Software Testing is a reality for you-
• Analytical skills: A good software tester should have sharp analytical skills. Analytical
skills will help break up a complex software system into smaller units to gain a better
understanding and create test cases.
• Communication skill: A good software tester must have good verbal and written
communication skill. Testing artifacts (like test cases/plans, test strategies, bug reports,
etc.) created by the software tester should be easy to read and comprehend. Dealing with
developers (in the event of bugs or any other issue) will require a shade of discreetness
and diplomacy.
• Time Management & Organization Skills: Testing at times could be a demanding job
especially during the release of code. A software tester must efficiently manage
workload, have high productivity, exhibit optimal time management, and organization
skills
• GREAT Attitude: To be a good software tester you must have a GREAT attitude. An
attitude to ‘test to break’, detail orientation, willingness to learn and suggest process
improvements. In the software industry, technologies evolve with an overwhelming
speed, and a good software tester should upgrade his/her technical Software testing skills
with the changing technologies. Your attitude must reflect a certain degree of
independence where you take ownership of the task allocated and complete it without
much direct supervision.
• Passion: To Excel in any profession or job, one must have a significant degree of the
passion for it. A software tester must have a passion for his / her field. BUT how do you
determine whether you have a passion for software testing if you have never tested
before? Simple TRY it out and if software testing does not excite you switch to
something else that holds your interest.
Figure 2.3 Non-Technical skills of a Software Tester
Technical Skills
• Basic knowledge of Database/ SQL: Software Systems have a large amount of data in the
background. This data is stored in different types of databases like Oracle, MySQL, etc. in the
backend. So, there will be situations when this data needs to be validated. In that case,
simple/complex SQL queries can be used to check whether proper data is stored in the backend
databases.
• Basic knowledge of Linux commands: Most of the software applications like Web-Services,
Databases, Application Servers are deployed on Linux machines.So it is crucial for testers to
have knowledge about Linux commands.
• Knowledge and hands-on experience of a Test Management Tool:Test Management is an
important aspect of Software testing. Without proper test management techniques, software
testing process will fail. Test management is nothing but managing your testing related artifacts.
For example – A tool like Testlink can be used for tracking all the test cases written by your
team.
There are other tools available that can be utilized for Test Management. So, it is important to
have knowledge and working experience of such tools because they are used in most of the
companies.
• Knowledge and hands-on experience of any Defect Tracking tool- Defect Tracking
and Defect life cycle are key aspects of software testing. It is extremely critical to managing
defects properly and track them in a systematic manner. Defect tracking becomes necessary
because the entire team should know about the defect including managers, developers, and
testers. Several tools are used to log defects including QC, Bugzilla, Jira, etc.
• Knowledge and hands-on experience of Automation tool: If you see yourself as an
“Automation tester” after a couple of years working on manual testing, then you must master a
tool and get in-depth, hands-on knowledge of automation tools.
Knowledge of any scripting language like VBScript, JavaScript, C# is always helpful as a tester
if you are looking for a job into automation. Few companies also use Shell/Perl scripting, and
there is a lot of demand for testers having knowledge of the same. Again, it will depend on the
company and which tools are used by that company.
A BTech/ B.E., MCA, BCA (Bachelor of Computer Applications), BSc- Computers, will land
you a job quickly.
If you do not hold any of these degrees, then you must complete a software testing certification
like ISTQB and CSTE which help you learn Software Development/ Test Life Cycle and other
testing methodologies.
On any typical work day, you will be busy understanding requirement documents, creating test
cases, executing test cases, reporting and re-testing bugs, attending review meetings and other
team building activities.
Your Software Testing career growth as a software tester (QA Analyst) in typical CMMI level 5
company will look like following but will vary from company to company
1. QA Analyst (Fresher)
2. Sr. QA Analyst (2-3 years’ experience)
3. QA Team Coordinator (5-6 years’ experience)
4. Test Manager (8-11 years’ experience)
5. Senior Test Manager (14+ experience)
For a complete newbie, here is a common suggested approach to learning Software Testing
You start with learning Basic principles of Software Testing. Once done you apply for
freelancing jobs. This will help you gain practical knowledge and will fortify the testing
concepts you have learned.
Next, you proceed to Selenium – Automation tool, then JMeter – Performance Testing tool and
finally TestLink – Test Management Tool. All the while you are learning, I recommend you
apply for freelancing jobs (apart from other benefits you will earn some income too!).
Once you are through with all the tools, you may consider taking a certification. I recommend
ISTQB. However, this is optional.
A software tester with ISTQB cleared will be given more priority as compared to others.
After this, when you apply for permanent jobs in big corporations you will have many Software
tester skills to offer as well some practical freelancing experience which may be of value and
will increase your chances of being selected.
Background
It is important that you achieve optimum test results while conducting software testing without
deviating from the goal. However, how you determine that you are following the right strategy
for testing? For that, you need to stick to some basic testing principles. Here are the common
seven testing principles that are widely practiced in the software industry.
To understand these principles, consider a scenario where you are moving a file from folder A to
Folder B.
Apart from the usual scenarios, you can also test the following conditions
Yes! Exhaustive testing is not possible. Instead, we need the optimal amount of testing based on
the risk assessment of the application. And the million-dollar question is, how do you
determine this risk?
In your opinion, Which operation is most likely to cause your Operating system to fail?
It is obviously C.
So if you were testing this Operating system, you would realize that defects are likely to be
found in multi-tasking activity and need to be tested thoroughly which brings us to our next
principle Defect Clustering.
It is impossible to test every input, every path, and every condition in a real system. Instead,
testing should be risk-based and prioritized.
Example:
2) Defect Clustering
Defect Clustering which states that a small number of modules contain most of the defects
detected. This is the application of the Pareto Principle (The Pareto Principle, or the 80/20 rule,
states that for many phenomena 80% of the result comes from 20% of the effort. The principle
has been named after Vilfredo Pareto—an Italian economist—who, back in 1895, noticed that
about 80% of Italy’s land belonged to 20% of the country’s population.) to software testing:
approximately 80% of the problems are found in 20% of the modules.
By experience, you can identify such risky modules. But this approach has its own problems
If the same tests are repeated over and over again, eventually the same test cases will no longer
find new bugs.
Example:
• In an e-commerce platform:
o The payment gateway code (only 10% of the codebase) may contain 70% of
reported bugs (due to complexity and third-party integrations).
o Testers therefore focus more on this module.
3) Pesticide Paradox
Repetitive use of the same pesticide mix to eradicate insects during farming will over time lead
to the insects developing resistance to the pesticide Thereby ineffective of pesticides on insects.
The same applies to software testing. If the same set of repetitive tests are conducted, the method
will be useless for discovering new defects.
To overcome this, the test cases need to be regularly reviewed & revised, adding new & different
test cases to help find more defects.
Testers cannot simply depend on existing test techniques. You must look out continually to
improve the existing methods to make testing more effective but even after all this sweat & hard
work in testing; you can never claim your product is bug-free. You think a company like
MICROSOFT would not have tested their OS thoroughly & would risk their reputation just to
see their OS crashing during its public launch!
Example:
• If you always test an ATM system with card → pin → withdraw sequence, you may miss
issues like:
o Network disconnection mid-transaction.
o Power failure during cash dispensing.
o Concurrent transactions on the same account.
• Adding new scenarios ensures broader defect discovery.
Testing can prove that bugs exist, but it can never prove that the system is bug-free. Hence,
testing principle states that – Testing talks about the presence of defects and don’t talk about the
absence of defects. i.e. Software Testing reduces the probability of undiscovered defects
remaining in the software but even if no defects are found, it is not a proof of correctness.
But what if, you work extra hard, taking all precautions & make your software product 99% bug-
free. And the software does not meet the needs & requirements of the clients.
Example:
• A banking app passes 500 automated test cases. This does not guarantee there are no
bugs—it just means the tested cases passed. There could still be untested paths (e.g.,
international transfers, edge-case currency conversions) with hidden defects.
This leads us to our next principle, which states that- Absence of Error is fallacy
It is possible that software which is 99% bug-free is still unusable. This can be the case if the
system is tested thoroughly for the wrong requirement. Software testing is not mere finding
defects, but also to check that software addresses the business needs. The absence of Error is a
Fallacy i.e. Finding and fixing defects does not help if the system built is unusable and does not
fulfill the user’s needs & requirements.
Example:
• A payroll system may pass all functional tests (calculations correct, no crashes).
• But if it takes 20 minutes to generate a single employee payslip, it fails usability and
performance expectations → customers reject it despite “no bugs.”
To solve this problem, the next principle of testing states that Early Testing is key
6) Early Testing
Early Testing – Testing should start as early as possible in the Software Development Life Cycle.
So that any defects in the requirements or design phase are captured in early stages. It is much
cheaper to fix a Defect in the early stages of testing. But how early one should start testing? It is
recommended that you start finding the bug the moment the requirements are defined.
If a requirements document states that a phone number must have 10 digits, but developers
implement it as 8 digits:
The way we test depends on the type of system, risks, and goals. One size does not fit all.
Testing is context dependent which basically means that the way you test an e-commerce site
will be different from the way you test a commercial off the shelf application. All the developed
software systems are not identical. You might use a different approach, methodologies,
techniques, and types of testing depending upon the application type. For instance testing, any
POS system at a retail store will be different than testing an ATM machine.
Example:
Myth: “Principles are just for reference. I will not use them in practice .”
This is so very untrue. Test Principles will help you create an effective Test Strategy and draft
error catching test cases.
But learning testing principles is just like learning to drive for the first time.
Initially, while you learn to drive, you pay attention to each and everything like gear shifts,
speed, clutch handling, etc. But with experience, you just focus on driving the rest comes
naturally. Such that you even hold conversations with other passengers in the car.
Same is true for testing principles. Experienced testers have internalized these principles to a
level that they apply them even without thinking. Hence the myth that the principles are not used
in practice is simply not true.
V Model is a highly disciplined SDLC model in which there is a testing phase parallel to each
development phase. The V model is an extension of the waterfall model in which testing is done
on each stage parallel with development in a sequential way. It is known as the Validation or
Verification Model.
SDLC: SDLC is Software Development Life Cycle. It is the sequence of activities carried out by
Developers to design and develop high-quality software.
STLC: STLC is Software Testing Life Cycle. It consists of a series of activities carried out by
Testers methodologically to test your software product.
Waterfall Model: Waterfall model is a sequential model divided into different phases of
software development activity. Each stage is designed for performing the specific activity.
Testing phase in waterfall model starts only after implementation of the system is done.
Suppose, you are assigned a task, to develop a custom software for a client. Now, irrespective of
your technical background, try and make an educated guess about the sequence of steps you will
follow, to achieve the task.
• Plan the programming language like Java, PHP, .net; database like
Oracle, MySQL, etc. Which would be suited for the project, also
Design Stage
some high-level functions & architecture.
• After the design stage, it is build stage, that is nothing but actually
Build Stage code the software
• Next, you test the software to verify that it is built as per the
Test Stage specifications are given by the client.
• Once your system is ready to use, you may require to change the
Maintenance stage code later on as per customer request
All these levels constitute the waterfall method of the software development lifecycle.
As you may observe, that testing in the model starts only after implementation is done.
But if you are working in the large project, where the systems are complex, it’s easy to miss out
the key details in the requirements phase itself. In such cases, an entirely wrong product will be
delivered to the client and you might have to start afresh with the project OR if you manage to
note the requirements correctly but make serious mistakes in design and architecture of your
software you will have to redesign the entire software to correct the error.
Assessments of thousands of projects have shown that defects introduced during requirements
& design make up close to half of the total number of defects.
Also, the costs of fixing a defect increase across the development lifecycle. The earlier in life
cycle a defect is detected, the cheaper it is to fix it. As they say, “A stitch in time saves nine.”
To address this concern, the V model of testing was developed where for every phase, in the
Development life cycle there is a corresponding Testing phase
Figure 3.2 V model
• The left side of the model is Software Development Life Cycle – SDLC
• The right side of the model is Software Test Life Cycle – STLC
• The entire figure looks like a V, hence the name V – model
Example:
A bank wants a mobile app to transfer money.
• Verification: Break system into modules and define their interaction (APIs,
communication, data flow).
• Validation: Integration testing checks if modules interact correctly.
Example:
Example:
• Module: “Fund Transfer Calculator” that deducts money from source account and adds to
destination account.
• Unit Test: Test with different amounts, overdraft cases, negative inputs, boundary
conditions.
Example:
Key Advantages
Limitations
There are numerous development life cycle models. Development model selected for a project
depends on the aims and goals of that project.
• Testing is not a stand-alone activity, and it has to adapt the development model chosen
for the project.
• In any model, testing should be performed at all levels i.e. right from requirements until
maintenance.
3.3 STLC (Software Testing Life Cycle) Phases, Entry, Exit Criteria
Software Testing Life Cycle (STLC) is a sequence of specific activities conducted during the
testing process to ensure software quality goals are met. STLC involves both verification and
validation activities. Contrary to popular belief, Software Testing is not just a single/isolate
activity, i.e. testing. It consists of a series of activities carried out methodologically to help
certify your software product.
STLC Phases
There are following six major phases in every Software Testing Life Cycle Model (STLC
Model):
1. Requirement Analysis
2. Test Planning
3. Test case development
4. Test Environment setup
5. Test Execution
6. Test Cycle closure
Figure 3.4 STLC Model Phases
Each of these stages has a definite Entry and Exit criteria, Activities & Deliverables associated
with it.
What is Entry and Exit Criteria in STLC?
• Entry Criteria: Entry Criteria gives the prerequisite items that must be completed before
testing can begin.
• Exit Criteria: Exit Criteria defines the items that must be completed before testing can
be concluded
You have Entry and Exit Criteria for all levels in the Software Testing Life Cycle (STLC)
In an Ideal world, you will not enter the next stage until the exit criteria for the previous stage is
met. But practically this is not always possible. So let us focus on activities and deliverables for
the different stages in STLC life cycle. Let’s look into them in detail.
Requirement Phase Testing also known as Requirement Analysis in which test team studies the
requirements from a testing point of view to identify testable requirements and the QA team may
interact with various stakeholders to understand requirements in detail. Requirements could be
either functional or non-functional. Automation feasibility for the testing project is also done in
this stage.
Activities in Requirement Phase Testing
• Identify types of tests to be performed.
• Gather details about testing priorities and focus.
• Prepare Requirement Traceability Matrix (RTM).
• Identify test environment details where testing is supposed to be carried out.
• Automation feasibility analysis (if required).
• RTM
• Automation feasibility report. (if applicable)
RTM
• Forward Traceability: Ensures that all requirements are mapped to their respective test cases
and development work.
• Backward Traceability: Confirms that the final product's features trace back to the original
requirements.
• Bidirectional Traceability: Combines both forward and backward traceability, ensuring complete
coverage in both directions.
Benefits of RTM:
• Ensures Coverage: It ensures all requirements are accounted for and validated.
• Helps Manage Changes: Any change in requirements can easily be tracked and linked to test
cases or design changes.
• Improves Project Management: RTM helps manage scope, track progress, and ensure that no
requirement is missed.
• Reduces Risk: By documenting the relationship between requirements and testing, RTM reduces
the risk of missing critical functionalities.
Examples of RTM
In summary, RTM is an essential tool in project management, ensuring that the software meets
all specified requirements and helping to streamline both the development and testing processes.
Test Planning in STLC is a phase in which a Senior QA manager determines the test plan
strategy along with efforts and cost estimates for the project. Moreover, the resources, test
environment, test limitations and the testing schedule are also determined. The Test Plan gets
prepared and finalized in the same phase.
Test Planning Activities
The Test Case Development Phase involves the creation, verification and rework of test cases
& test scripts after the test plan is ready. Initially, the Test data is identified then created and
reviewed and then reworked based on the preconditions. Then the QA team starts the
development process of test cases for individual units.
Test Case Development Activities
• Test cases/scripts
• Test data
Test Environment Setup decides the software and hardware conditions under which a work
product is tested. It is one of the critical aspects of the testing process and can be done in parallel
with the Test Case Development Phase. Test team may not be involved in this activity if the
development team provides the test environment. The test team is required to do a readiness
check (smoke testing) of the given environment.
Test Environment Setup Activities
• Understand the required architecture, environment set-up and prepare hardware and
software requirement list for the Test Environment.
• Setup test Environment and test data
• Perform smoke test on the build
Test Execution Phase is carried out by the testers in which testing of the software build is done
based on test plans and test cases prepared. The process consists of test script execution, test
script maintenance and bug reporting. If bugs are reported then it is reverted back to
development team for correction and retesting will be performed.
Test Execution Activities
Test Cycle Closure phase is completion of test execution which involves several activities like
test completion reporting, collection of test completion matrices and test results. Testing team
members meet, discuss and analyze testing artifacts to identify strategies that have to be
implemented in future, taking lessons from current test cycle. The idea is to remove process
bottlenecks for future test cycles.
Test Cycle Closure Activities
• Evaluate cycle completion criteria based on Time, Test coverage, Cost,Software, Critical
Business Objectives, Quality
• Prepare test metrics based on the above parameters.
• Document the learning out of the project
• Prepare Test closure report
• Qualitative and quantitative reporting of quality of the work product to the customer.
• Test result analysis to find out the defect distribution by type and severity.
• Analyse business
functionality to know the
business modules and
module specific
functionalities.
• Requirements
• Identify all transactions
Document
in the modules. • Signed off • RTM
available (both
• Identify all the user RTM • Automat
functional and
profiles. • Test ion
non functional)
• Gather user interface/ automation feasibilit
Requirement
• Acceptance
authentication, feasibility y report
Analysis
criteria defined.
geographic spread report (if
• Application
requirements. signed off applicabl
architectural
• Identify types of tests to by the client e)
document
be performed.
available.
• Gather details about
testing priorities and
focus.
• Prepare
Requirement Traceability
Matrix (RTM).
STLC Stage Entry Criteria Activity Exit Criteria Deliverables
• Baselined
RTM, Test • Execute tests as per plan
• Complet
Plan , Test • Document test results,
ed RTM
case/scripts are and log defects for failed
with
available cases • All tests
executio
• Test • Update test plans/test planned are
n status
environment is cases, if necessary executed
• Test
Test ready • Map defects to test cases • Defects
cases
Execution • Test data set up in RTM logged and
updated
is done • Retest the defect fixes tracked to
with
• Unit/Integration • Regression Testing of closure
results
test report for application
• Defect
the build to be • Track the defects to
reports
tested is closure
available
• Evaluate cycle
completion criteria based
on – Time, Test
available parameters.
• Document the learning
out of the project
• Prepare Test closure
report
STLC Stage Entry Criteria Activity Exit Criteria Deliverables
• Qualitative and
quantitative reporting of
quality of the work
product to the customer.
• Test result analysis to
find out the defect
distribution by type and
severity
CHAPTER FOUR: Manual vs Automated Testing
It also makes sure that reported defects are fixed by developers and re-testing has been
performed by testers on the fixed defects.
Basically, this testing checks the quality of the system and delivers bug-free product to the
customer.
1. Read and understand the software project documentation/guides. Also, study the
Application Under Test (AUT) if available.
2. Draft Test cases that cover all the requirements mentioned in the documentation.
3. Review and baseline the test cases with Team Lead, Client (as applicable)
4. Execute the test cases on the AUT
5. Report bugs.
6. Once bugs are fixed, again execute the failing test cases to verify they pass.
Fact: Testing attempts to find as many defects as possible. Identifying all possible defects is
impossible.
Fact: Testing can be extremely challenging. Testing an application for possible use cases with
minimum test cases requires high analytical skills.
• Less reliable testing method because it’s conducted by a human. Therefore, it is always
prone to mistakes & errors.
• The manual testing process can’t be recorded, so it is not possible to reuse the manual
test.
• In this testing method, certain tasks are difficult to perform manually which may require
an additional time of the software testing phase.
• Selenium
• cypress
• QTP
• Jmeter
• Loadrunner
• TestLink
• Quality Center(ALM)
Conclusion
Manual testing is an activity where the tester needs to be very patient, creative & open minded.
Manual testing is a vital part of user-friendly software development because humans are
involved in testing software applications and end-users are also humans. They need to think and
act with an End User perspective.
Successive development cycles will require execution of same test suite repeatedly. Using a test
automation tool, it’s possible to record this test suite and re-play it as required. Once the test
suite is automated, no human intervention is required. The goal of Automation is to reduce the
number of test cases to be run manually and not to eliminate Manual Testing altogether.
Test Automation is the best way to increase the effectiveness, test coverage, and execution
speed in software testing. Automated software testing is important due to the following reasons:
• Manual Testing of all workflows, all fields, all negative scenarios is time and money
consuming
• It is difficult to test for multilingual sites manually
• Test Automation in software testing does not require Human intervention. You can run
automated test unattended (overnight)
• Test Automation increases the speed of test execution
• Automation helps increase Test Coverage
• Manual Testing can become boring and hence error-prone.
Test cases to be automated can be selected using the following criterion to increase the
automation ROI
The following category of test cases are not suitable for automation:
• Test Cases that are newly designed and not executed manually at least once
• Test Cases for which the requirements are frequently changing
• Test cases which are executed on an ad-hoc basis.
Step 5) Maintenance
Test Automation Process
Test Tool selection largely depends on the technology the Application Under Test is built on.
The scope of automation is the area of your Application Under Test which will be automated.
Following points help determine scope:
During this phase, you create an Automation strategy & plan, which contains the following
details-
Test Execution
Automation Scripts are executed during this phase. The scripts need input test data before there
are set to run. Once executed they provide detailed test reports.
Execution can be performed using the automation tool directly or through the Test Management
tool which will invoke the automation tool.
Example: Quality center is the Test Management tool which in turn it will invoke QTP for
execution of automation scripts. Scripts can be executed in a single machine or a group of
machines. The execution can be done during the night, to save time.
Test Automation Maintenance Approach is an automation testing phase carried out to test
whether the new functionalities added to the software are working fine or not. Maintenance in
automation testing is executed when new automation scripts are added and need to be reviewed
and maintained in order to improve the effectiveness of automation scripts with each successive
release cycle.
It is a conceptual part of the automated testing that helps testers to use resources more efficiently.
A framework is defined as a set of rules or best practices that can be followed in a systematic way
that ensures to deliver the desired results.
Typically, in this scripting driven framework, the creation and execution of test scripts is done
individually and this framework is an effective way to get started for enterprises.
The automation scripting is done in an incremental manner where every new interaction will be
added to the automation tests.
This sort of abstraction concept ensures that changes made to the other part of the application
does not affect the underlying components.
This driver script contains navigation that spreads through the program which covers both
reading of data files and logging of test status information.
Keyword Driven Testing Framework:
Keyword Driven Testing framework is an application independent framework and uses data
tables and keywords to explain the actions to be performed on the application under test. This is
more so called as keyword driven test automation framework for web based applications and can
be stated as an extension of data driven testing framework.
There are tons of Functional and Regression Testing Tools available in the market. Here are best
test automation tools certified by experts
1) Ranorex Studio
Ranorex Studio is an all-in-one tool for automating functional UI tests, regression tests, data-
driven tests and much more. Ranorex Studio includes an easy to use click-and-go interface to
automate tests for web, desktop, and mobile applications.
Features:
2) Kobiton
Kobiton’s mobile device testing platform offers script-based and scriptless test automation
capabilities. Users can create manual tests that can be re-run automatically across a variety of
real devices. Kobiton fully supports test automation frameworks such as Appium, Espresso and
XCTest, while offering its own scriptless test automation through their NOVA AI.
Features:
• Kobiton’s device lab management will let you connect with devices in the cloud, your
local on-premises devices as well as on-desk devices.
• Users can automatically create test scripts by converting manual test sessions into scripts
that can be executed on multiple devices.
• Easily integrate your defect management system to automatically log tickets with debug
sessions attached when a test crashes.
• Kobiton’s Appium Anywhere technology ensures less flaky test scripts by making sure
your test runs the same on every device
• Kobiton scriptless test automation generates 100% open standard Appium code for
flexible use.
3) ZAPTEST
ZAPTEST is a Software Automation solution for any organization that uses software for
operations or development, who is looking to automate it’s back-office operations or software
testing processes and to develop a seamless and revolving automation framework.
Features:
4) LambdaTest
LambdaTest is one of the most preferred tool to perform automated cross browser testing. They
offer an ultra-fast, scalable and secure selenium grid, which users can utilize and run their tests
on 2000+ browsers and OS. It supports all latest and legacy browsers.
Features
Parasoft’s suite of automated software testing tools integrates quality into the software delivery
process for early prevention, detection, and remediation of defects. Parasoft continuous quality
suite covers static code analysis, unit testing and code coverage, API testing and service
virtualization, and UI testing, enabling delivery at speed and compliance with industry and
security standards.
Features:
6) Avo Assure
Avo Assure is a no-code, intelligent, and heterogeneous automation testing solution. With Avo
Assure, you can execute test cases without writing a single line of code and achieve more than
90% test automation coverage.
Features:
• 100% no-code
• Heterogeneous – Test across web, windows, non-UI (web services, batch jobs), mobile
platforms (Android and IOS), ERPs, Mainframes, and associated emulators
• Accessibility testing
• Smart scheduling to execute test cases in a single VM independently or in parallel.
Schedule execution during non-business hours
• Easy-to-understand and intuitive reporting
• 1500+ pre-built keywords and SAP accelerator pack
• Integration with Jira, Jenkins, ALM, QTest, Salesforce, Sauce Labs, TFS, etc
7) Selenium
It is a software testing tool used for Regression Testing. It is an open source testing tool that
provides playback and recording facility for Regression Testing. The Selenium IDE only
supports Mozilla Firefox web browser.
• It provides the provision to export recorded script in other languages like Java, Ruby,
RSpec, Python, C#, etc
• It can be used with frameworks like JUnit and TestNG
• It can execute multiple tests at a time
• Autocomplete for Selenium commands that are common
• Walkthrough tests
• Identifies the element using id, name, X-path, etc.
• Store tests as Ruby Script, HTML, and any other format
• It provides an option to assert the title for every page
• It supports selenium user-extensions.js file
• It allows to insert comments in the middle of the script for better understanding and
debugging
QTP is widely used for functional and regression testing, it addresses every major software
application and environment. To simplify test creation and maintenance, it uses the concept of
keyword driven testing. It allows the tester to build test cases directly from the application.
• It is easier to use for a non-technical person to adapt to and create working test cases
• It fix defects faster by thoroughly documenting and replicating defects for developer
• Collapse test creation and test documentation at a single site
• Parameterization is easy than WinRunner
• QTP supports .NET development environment
• It has better object identification mechanism
• It can enhance existing QTP scripts without “Application Under Test” is available, by
using the active screen
• It supports a wide range of protocols and applications like Java, HTML, NET, Windows,
SAP, Visual Basic, etc.
• It can record and replay the actions on demand
• It integrates well with source control management tools such as Rational Clear Case and
Rational Team Concert integration
• It allows developers to create keyword associated script so that it can be re-used
• Eclipse Java Developer Toolkit editor facilitates the team to code test scripts in Java with
Eclipse
• It supports custom controls through proxy SDK (Java/.Net)
• It supports version control to enable parallel development of test scripts and concurrent
usage by geographically distributed team
10) Watir
It is an open source testing software for regression testing. It enables you to write tests that are
easy to read and maintain. Watir supports only internet explorer on windows while Watir
webdriver supports Chrome, Firefox, IE, Opera, etc.
Silk Test is designed for doing functional and regression testing. For e-business application, silk
test is the leading functional testing product. It is a product of Segue Software takeover by
Borland in 2006. It is an object-oriented language just like C++. It uses the concept of an object,
classes, and inheritance. Its main feature includes
KEY DIFFERENCE
Investment is required for testing tools as well as automation Investment is needed for
Investment
engineers human resources.
Parameter Automation Testing Manual Testing
Automated Tests acts as a document provides training value Manual Test cases provide
Documentation
especially for automated unit test cases. A new developer can no training value
Parameter Automation Testing Manual Testing
look into a unit test cases and understand the code base
quickly.
• Automated testing helps you to find more bugs compare to a human tester
• As most of the part of the testing process is automated, you can have a speedy and
efficient process
• Automation process can be recorded. This allows you to reuse and execute the same kind
of testing operations
• Automated testing is conducted using software tools, so it works without tiring and
fatigue unlike humans in manual testing
• It can easily increase productivity because it provides fast & accurate testing result
• Automated testing support various applications
• Testing coverage can be increased because of automation testing tool never forget to
check even the smallest unit
• Without human element, it’s difficult to get insight into visual aspects of your UI like
colors, font, sizes, contrast or button sizes.
• The tools to run automation testing can be expensive, which may increase the cost of the
testing project.
• Automation testing tool is not yet foolproof. Every automation tool has their limitations
which reduces the scope of automation.
• Debugging the test script is another major issue in the automated testing. Test
maintenance is costly.
Unit Testing is important because software developers sometimes try saving time doing minimal
unit testing and this is myth because inappropriate unit testing leads to high cost Defect fixing
during System Testing, Integration Testing and even Beta Testing after application is built. If
proper unit testing is done in early development, then it saves time and money in the end.
Answers
Here, are the key reasons to perform unit testing in software engineering:
1. Unit tests help to fix bugs early in the development cycle and save costs.
2. It helps the developers to understand the testing code base and enables them to make
changes quickly
3. Good unit tests serve as project documentation
4. Unit tests help with code re-use. Migrate both your code and your tests to your new
project. Tweak the code until the tests run again.
In order to do Unit Testing, developers write a section of code to test a specific function in
software application. Developers can also isolate this function to test more rigorously which
reveals unnecessary dependencies between function being tested and other units so the
dependencies can be eliminated. Developers generally use UnitTest framework to develop
automated test cases for unit testing.
Unit testing is commonly automated but may still be performed manually. Software Engineering
does not favor one over the other but automation is preferred. A manual approach to unit testing
may employ a step-by-step instructional document.
• A developer writes a section of code in the application just to test the function. They
would later comment out and finally remove the test code when the application is
deployed.
• A developer could also isolate the function to test it more rigorously. This is a more
thorough unit testing practice that involves copy and paste of code to its own testing
environment than its natural environment. Isolating the code helps in revealing
unnecessary dependencies between the code being tested and other units or data
spaces in the product. These dependencies can then be eliminated.
• A coder generally uses a UnitTest Framework to develop automated test cases. Using an
automation framework, the developer codes criteria into the test to verify the correctness
of the code. During execution of the test cases, the framework logs failing test cases.
Many frameworks will also automatically flag and report, in summary, these failed test
cases. Depending on the severity of a failure, the framework may halt subsequent testing.
• The workflow of Unit Testing is:
2) Review/Rework
3) Baseline
1. Junit: Junit is a free to use testing tool used for Java programming language. It provides
assertions to identify test method. This tool test data first and then inserted in the piece of
code.
2. NUnit: NUnit is widely used unit-testing framework use for all .net languages. It is an
open source tool which allows writing scripts manually. It supports data-driven tests
References
1) https://www.guru99.com/software-testing.html
2) https://www.perfecto.io/resources/types-of-testing
3) https://www.softwaretestingclass.com/wp-content/uploads/2016/06/Beginner-
Guide-To-Software-Testing.pdf
4) https://videos.gcreddy.com/wp-content/uploads/2019/01/Manual-Testing-Step-by-
Step-Tutorial.pdf
5) https://home.cs.colorado.edu/~kena/classes/5828/s12/lectures/05-introtesting.pdf
6) https://www.javatpoint.com/software-testing-tutorial
7) https://www.tutorialspoint.com/software_testing/
8) https://digitalpoint.tech/admin/uploads/4346d933bcfa1d59b368d121f6747980.pdf
9) https://www.imperva.com/learn/application-security/black-box-testing/
10) https://www.udemy.com/course/learn-unit-testing-with-spring-
boot/learn/lecture/9968158#overview
11) https://www.udemy.com/course/docker-and-kubernetes-the-complete-
guide/learn/lecture/11437138#overview
12)