Software Testing Reading Note
Software Testing Reading Note
WEEK THREE
OVERVIEW OF TEST EXECUTION AND REPORTING
Testing is an important aspect of software development and helps to ensure the
quality of the product. Test Execution and Reporting are crucial parts of the
testing process, as they ensure that the tests are run efficiently and effectively
and that the results are documented properly. The lecture will provide an in-
depth understanding of the test execution process, its importance, and the
ways to report and document the test results. Additionally, defect tracking and
management will also be discussed in this lecture, which is essential to ensure
that the defects are identified, tracked, and fixed in a timely manner.
Faster Time to Market - Effective testing helps to identify defects that could delay the release of a
product. By identifying and addressing these issues promptly, testing can help reduce time-to market,
giving a company a competitive advantage over its competitors.
Cost Savings - Effective testing helps to identify defects early in the development cycle, reducing
the cost of fixing defects. It is cheaper and easier to fix a defect in the early stages of development
than after the product has been released.
Better Customer Satisfaction - Effective testing helps to ensure that the product is meeting the
customer's requirements and expectations. By identifying and fixing defects early, customers will have
a better user experience with the product, leading to increased customer satisfaction.
Compliance - In many industries, software products must meet certain regulatory standards before
they can be released. Effective testing and reporting ensure that the product meets these regulatory
standards and helps the company avoid costly penalties for non-compliance.
Test execution is the process of running test cases and verifying if the software under test works as
expected
Test reporting and documentation involve collecting and documenting test results and other relevant
information during the testing process. Test reports may include test progress reports, test result
reports, test summary reports, and defect reports
Test documentation provides a comprehensive view of the testing process and helps track the
progress of testing activities
Defect tracking and management are important aspects of the software testing process. The defects
found during testing need to be tracked and managed until they are resolved.
The defect tracking and management process includes the following steps: - Defect Logging: All
defects identified during the testing process are logged in the defect tracking tool (JIRA, Bugzilla and
Trello).
Test environment setup must be done carefully to ensure that the testing environment is stable and
consistent throughout the testing process
Test data must be carefully created and managed to ensure that it is relevant, accurate, and complete
Test result verification involves verifying the results of test cases and ensuring that the software under
test works as expected. Test results must be carefully verified to ensure that all possible scenarios
are covered and that defects are identified and reported
JIRA: JIRA is a project management tool that is widely used for issue tracking, bug tracking, and
project management. It is popular among software development teams and has many features like
customizable workflows, issue linking, and reporting.
Bugzilla: Bugzilla is an open-source defect tracking tool that is widely used in software development
projects. It is a web-based tool that allows teams to track defects, issues, and bugs in the software.
MantisBT: MantisBT is another open-source defect tracking tool that is popular among software
development teams. It has a simple and user-friendly interface and offers features like email
notifications, issue tracking, and reporting.
Trello: Trello is a project management tool that is used for tracking tasks and managing projects. It
has a simple and intuitive interface that allows teams to track defects, issues, and bugs easily.
Asana: Asana is a project management tool that is used for tracking tasks, managing projects, and
collaborating with team members. It has a feature called "Bugs" that allows teams to track defects,
issues, and bugs in the software.
WEEK FOUR
TESTING TECHNIQUES OVERVIEW
Testing techniques are methods used to evaluate software quality by assessing the
software's functionality, performance, and other attributes. The main testing
techniques are black-box testing, white-box testing, and grey-box testing.
Automated testing is a testing technique that involves using tools and scripts
to automate the testing process.
BLACK-BOX TESTING
Black-box testing is a testing technique where testers examine the software's
functionality without knowing its internal workings. Testers use input data to
test the software's output and verify that it meets the expected results.
GREY-BOX TESTING
Grey-box testing is a testing technique that combines elements of both black-box
and white-box testing. Testers use limited knowledge of the software's internal
workings to generate test cases and evaluate its functionality.
Advantages of Grey-Box Testing
Testers can use limited technical knowledge to generate test cases and evaluate the software's
functionality.
This technique can help to identify defects that may have been missed during the software
development process.
Testers can evaluate the software's functionality from both an enduser's and technical
perspective.
AUTOMATED TESTING
Automated testing is a testing technique that involves using tools and scripts to
automate the testing process. Testers use automation tools to generate test
cases, execute tests, and report test results.
Advantages of Automated Testing
Increased Efficiency: Automated testing is much faster than manual testing. It
can run tests in parallel, 24 hours a day, and can execute repetitive tests with
a high level of accuracy, freeing up testers to focus on more complex testing
tasks.
Increased Test Coverage: Automated testing can cover a large number of test
cases that are impossible to execute manually. It can also run tests on multiple
platforms and configurations simultaneously.
Improved Accuracy: Automated tests are less prone to errors and are more
reliable than manual tests. They eliminate the risk of human errors and ensure
consistent results.
Cost-Effective: Although there is an initial investment in developing and
maintaining automated tests, automated testing is more cost-effective in the
long run as it reduces the need for manual testing.
Disadvantages of Automated Testing
High initial investment - setting up an automated testing environment requires
significant initial investment in terms of infrastructure, tools, and skilled personnel.
Maintenance overhead - automated tests require regular maintenance and
updates to ensure they remain effective and relevant.
Limited human insight - automated tests cannot replace the human element of
testing, such as exploratory testing, where testers can use their experience and intuition
to identify issues.
False sense of security - automated tests may provide a false sense of security, leading
to complacency and a reduced focus on manual testing.
WEEK FIVE
Definition of non-functional testing
Non-functional testing is a crucial aspect of software testing that focuses on evaluating the attributes
and characteristics of a software system that are not directly related to its specific functionality. It
involves testing the system's performance, security, usability, reliability, and other non-functional
aspects.
Non-functional testing plays a vital role in ensuring the overall quality and success of a software
system. While functional testing ensures that the software meets the intended requirements and
performs its desired functions, non-functional testing goes beyond that to assess the system's
behavior under various conditions and scenarios. It aims to uncover any issues or weaknesses related
to performance, security, usability, and reliability.
Enhance Performance: Non-functional testing helps evaluate the system's performance under
different workloads, such as high user traffic or data processing loads. It allows for identifying and
optimizing any bottlenecks, scalability issues, or resource constraints that could impact the system's
performance.
Ensure Security: Security testing focuses on assessing the system's ability to protect sensitive data,
prevent unauthorized access, and resist security threats. By conducting thorough security testing,
potential vulnerabilities, loopholes, or weaknesses can be identified and addressed, ensuring the
system's robustness against potential attacks.
Improve Usability: Usability testing helps assess the system's user-friendliness, intuitiveness, and
overall user experience. It aims to ensure that the system is easy to navigate, understand, and interact
with, ultimately enhancing user satisfaction and productivity.
Ensure Reliability: Reliability testing evaluates the system's stability, fault tolerance, and ability to
perform consistently over time. By subjecting the system to different scenarios, reliability testing helps
identify and address any issues related to system failures, crashes, or data inconsistencies, ensuring
a reliable and dependable software solution.
Performance Testing
Performance testing is of utmost importance to ensure that a software system can handle expected
user loads, deliver optimal performance, and provide a seamless user experience. By conducting
performance testing, potential bottlenecks, performance degradation, and limitations can be identified
and addressed proactively. It helps validate whether the system meets performance objectives,
ensures customer satisfaction, and avoids any negative impact on the business.
Types of performance testing:
Load Testing: Load testing simulates real-world user loads on the system to evaluate its behavior
under normal and peak usage scenarios. It helps determine how the system handles increased user
traffic, transactions, and data processing.
Stress Testing: Stress testing pushes the system beyond its normal operational limits to evaluate
its stability and robustness.
Endurance Testing: Endurance testing, also known as soak or longevity testing, assesses the
system's performance over an extended period.
Scalability Testing: Scalability testing measures how well the system can handle increased
workloads by adding more resources, such as servers, network bandwidth, or processing power.
SECURITY TESTING
Security testing is a non-functional testing technique that assesses the robustness of a software
system against unauthorized access, data breaches, and vulnerabilities. It aims to identify potential
security risks, weaknesses, and vulnerabilities within the system.
Vulnerability Scanning: This technique involves using automated tools to scan the system for
known security vulnerabilities, such as outdated software versions, misconfigurations, or weak access
controls.
Penetration Testing: Penetration testing, also known as ethical hacking, involves simulating real
world attacks on the system to identify vulnerabilities and assess its resistance against exploitation.
Security Code Reviews: Security code reviews involve a thorough examination of the software's
source code to identify security weaknesses or coding flaws that could lead to vulnerabilities.
Threat Modeling: Threat modeling involves analyzing the system's architecture, data flow, and
potential threats to identify potential security risks and vulnerabilities.
Conducting Security testing Throughout the Software Development Life Cycle (SDLC):
Security testing should be an integral part of the entire SDLC, starting from the requirements
gathering phase through design, development, testing, and deployment.
Employing Secure Coding Practices: Adhering to secure coding practices, such as input
validation, output encoding, and proper error handling, reduces the likelihood of introducing
vulnerabilities.
Implementing Access Control Measures: Proper user authentication and authorization
mechanisms should be in place to ensure that only authorized users can access specific functionalities
and sensitive data.
Encrypting Sensitive Data: Encryption should be used to protect sensitive data at rest and in
transit. Implementing appropriate encryption algorithms and key management practices helps ensure
data confidentiality and integrity.
USABILITY TESTING
Usability testing is a non-functional testing technique that evaluates how user-friendly and intuitive a
software system is, assessing its ease of use and effectiveness. It focuses on understanding how well
the system meets user expectations and allows users to accomplish tasks efficiently and effectively.
User Interviews: User interviews involve conducting one-on-one sessions with selected users to
gather feedback about their experience with the software system.
Surveys: Surveys can be used to collect quantitative data from a large number of users. The survey
questions can focus on aspects such as ease of use, navigation, clarity of instructions, and overall
satisfaction.
Task-Based Evaluations: Task-based evaluations involve assigning specific tasks to users and
observing their interaction with the system.
User Observation: User observation involves directly observing users as they interact with the
system. Testers can identify usability issues, user behavior patterns, and areas where users may
struggle or require assistance.
SOFTWARE RELIABILITY
Software reliability is a measure of how well a software system can perform its intended functions
under stated conditions for a defined period. It reflects the probability of the software system to
operate without failure and deliver consistent and accurate results.
Fault Tolerance: The ability of a software system to continue functioning in the presence of faults
or errors. A fault-tolerant system can recover from failures and maintain its intended functionality.
Error Handling: The effectiveness of the software system in handling and managing errors. Proper
error handling ensures that the system gracefully handles unexpected situations and provides
appropriate feedback or recovery mechanisms.
Input Validation: The process of validating and verifying user inputs to ensure that they are within
the expected range and conform to the defined rules.
Robustness: The ability of the software system to handle unexpected inputs, conditions, or
exceptional situations without crashing or producing incorrect results.
Effective Exception Handling: The proper handling of exceptions, such as catching and managing
errors or exceptional conditions, prevents system failures and ensures the software system can
recover or continue functioning in the presence of exceptions.
User Satisfaction: Reliable software systems provide a seamless user experience, ensuring that
users can perform their tasks efficiently and without interruptions.
System Availability: Software reliability directly affects the availability of the system. Reliability
ensures that the software system is accessible and operational when users need it.
Business Reputation: The reliability of software systems reflects directly on the reputation of the
business or organization that provides the software.
Financial Stability: Software reliability has financial implications for organizations. Unreliable
software can result in financial losses due to system failures, downtime, or the need for expensive
emergency fixes.