Chapter 1 :STQL
Chapter 1 :STQL
Assurance
Unit-1:
Fundamentals of Software Testing
Introduction
• Software testing is a process of identifying the correctness of software by
considering its all attributes (Reliability, Scalability, Portability, Re-usability,
Usability) and evaluating the execution of software components to find the
software bugs or errors or defects.
Basics of Software Testing
• Testers use test plans, test cases, or test scenarios to test software to
ensure the completeness of testing. Manual testing also includes
exploratory testing, as testers explore the software to identify errors in it.
• 2. Automation Testing: Automation testing, which is also known as Test
Automation, is when the tester writes scripts and uses another software to
test the product. This process involves the automation of a manual
process. Automation Testing is used to re-run the test scenarios quickly
and repeatedly, that were performed manually in manual testing.
• Apart from regression testing, automation testing is also used to test the
application from a load, performance, and stress point of view. It increases
the test coverage, improves accuracy, and saves time and money when
compared to manual testing.
• What are the different types of Software Testing Techniques ?
• Software testing techniques can be majorly classified into two categories:
• 1. Black Box Testing: The technique of testing in which the tester doesn’t have
access to the source code of the software and is conducted at the software
interface without any concern with the internal logical structure of the software
is known as black-box testing.
• 2. White-Box Testing: The technique of testing in which the tester is aware of
the internal workings of the product, has access to its source code, and is
conducted by making sure that all internal operations are performed according
to the specifications is known as white box testing.
• What are different levels of software testing?
• Reactive - An approach in which the testing is not started until after design
and coding are completed.
Essential of Software Testing
• The following advice should help clarify your thinking about software
testing and help you improve the effectiveness and efficiency of your
testing. It is helpful to think about software testing in terms of five
essential elements:
• A test strategy that tells you what types of testing and the amount of
testing you think will work best at finding the defects that are lurking in
the software
• A testing plan of the actual testing tasks you will need to execute to carry
out that strategy
• Test cases that have been prepared in advance in the form of detailed
examples you will use to check that the software will actually meet its
requirements
• Test data consisting of both input test data and database test data to use
while you are executing your test cases, and
• A test environment which you will use to carry out your testing.
• Test Strategy
• The purpose of testing is to find defects, not to pass easy tests. A test
strategy basically tells you which types of testing seem best to do, the
order in which to perform them, the proposed sequence of execution, and
the optimum amount of effort to put into each test objective to make your
testing most effective. A test strategy is based on the prioritized
requirements and any other available information about what is important
to the customers. Because you will always face time and resource
constraints, a test strategy faces up to this reality and tells you how to
make the best use of whatever resources you do have to locate most of
the worst defects
• Testing Plan
• A testing plan is simply that part of your project plan that deals with the
testing tasks. It details who will do which tasks, starting when, ending
when, taking how much effort, and depending on which other tasks. It
provides a complete list of all the things that need to be done for testing,
including all the preparation work during all of the phases before testing. It
shows the dependencies among the tasks to clearly create a critical path
without surprises. You will be able to start filling in the details of your
testing plan as soon as your test strategy is completed. Both your test
strategy and testing plan are subject to change as the project evolves.
Modify your strategy first, if you need to, and then your testing plan.
• Test Cases
• Your test cases (and automated test scripts if called for by your strategy)
are prepared based on the strategy which tells you how much of each type
of testing to do. Test cases are developed based on prioritized
requirements and acceptance criteria for the software, keeping in mind
the customer’s emphasis on quality dimensions and the project’s latest risk
assessment of what could go wrong. Except for a small amount of ad hoc
testing, all of your test cases should be prepared in advance of the start of
testing. There are many different approaches to developing test cases. Test
case development is an activity performed in parallel with software
development.
• Test Data
• In addition to the steps to perform to execute your test cases, you also
need to systematically come up with test data to use. This often equals
sets of names, addresses, product orders, or whatever other information
the system uses. Since you are probably going to test query functions,
change functions and delete functions, you will most likely need a starting
database of data in addition to the examples to input. Consider how many
times you might need to go back to the starting point of the database to
restart the testing and how many new customer names you will need for
all the testing in your plan. Test data development is usually done
simultaneously with test case development.
• Test Environment
• You will need a place to do the testing and the right equipment to use. Unless
the software is very simple, one PC will not suffice.
• You will need all of the components of the system as close as possible to what it
will eventually be.
• Test environments may be scaled-down versions of the real thing, but all the
parts need to be there for the system to actually run.
• Building a test environment usually involves setting aside separate regions on
mainframe computers and/or servers, networks and PCs that can be dedicated
to the test effort and that can be reset to restart testing as often as needed.
• Sometimes lab rooms of equipment are set aside, especially for performance or
usability testing.
• A wish list of components that will be needed is part of the test strategy, which
then needs to be reality checked as part of the test planning process.
Misconception about testing
• Any one can do testing and no special skills are required for testing :
--Test planning , test case writing and test data definition using different
methodologies may not be possible with unskilled people.
--So there is waste of money and time t train the unskillful people.
-- It may result in disaster for customer.
• Testers can test quality of product at the end of development process:
--Few test cases out of infinite set of possibilities are used for certifying
whether the software application works or not.
-- The customer may be dissatisfied as the application does not perform
well as per his expectations.
-- Sometimes the defects remain hidden for an entire life cycle of software
without anybody knowing that there was a defect.
• Defects found in testing are blamed on developers:
---Two third of defects are due to wrong requirements and some surveys
indicate that most of the defects cab be attributed to faulty development
processes. Designers role is convert design into code by using standard
guidelines.
• If DMP is not handled properly, then there will a huge increased cost in a
creeping i.e. increase in price of product.
• If errors or defects are not managed properly at early stage, then
afterwards, defect might cause greater damage, and costs to fix or resolve
the defect will also get increased.
• There will be other disadvantages also like loss of revenue, loss of
customers, damaged brand reputations if DMP is not done properly.
Essentials of Software Testing
• Software testing is disciplined approach.
• It executes software work products and fins defects in it.
• The intention of software testing is to find all possible failures ,So that these
are eventually eliminated and good product is given to customer. We can
build the software on the basis of strengths of process of development and
testing and overcome weakness in the processes to the extent possible
• Strengths: Some area of software are very strong and no defects or very less
defects are found during testing of such areas. The areas in terms of some
modules, screens, algorithms or process like requirement definition ,design,
coding and testing . This represents strong processes present in these areas
supporting development of a good product.
• Weakness: The areas of software where requirement compliance is on the
verge of failure may represent weak area. It may be on the boundary
condition of compliance and if something goes wrong in production
environment, it will result into defect or failure of software product. The
processes in these areas represent some problems. An organization needs to
analyze such processes and define the root causes of problems leading to
these possible failures.
Essentials of Software Testing
• Opportunity: Some areas of the software which satisfy requirements as
defined by the customer or implied requirements but with enough space
available for improving further. The improvement may lead by customer
delight. The improvement represents ability of developing organization to
help the customer and give competitive advantage.
• Threats: Threats are problems or defects with the software which result
into failures. They represents problem associated with some processes in
the organization such as requirement clarity, knowledge, base and
expertise. An organization must invest in making these processes stronger.
Threats clearly indicate the failure of an application and eventually may
lead to customer dissatisfaction.
Challenges in Testing
Software Testing Methodologies
• Integration Testing
• After each unit is thoroughly tested, it is integrated with other units to
create modules or components that are designed to perform specific tasks
or activities. These are then tested as group through integration testing to
ensure whole segments of an application behave as expected (i.e, the
interactions between units are seamless). These tests are often framed by
user scenarios, such as logging into an application or opening files.
Integrated tests can be conducted by either developers or independent
testers and are usually comprised of a combination of automated
functional and manual tests.
Unit Testing
• Unit Testing
• Unit testing is the first level of testing and is often performed by the
developers themselves. It is the process of ensuring individual components
of a piece of software at the code level are functional and work as they
were designed to. Developers in a test-driven environment will typically
write and run the tests prior to the software or feature being passed over
to the test team. Unit testing can be conducted manually, but automating
the process will speed up delivery cycles and expand test coverage. Unit
testing will also make debugging easier because finding issues earlier
means they take less time to fix than if they were discovered later in the
testing process. TestLeft is a tool that allows advanced testers and
developers to shift left with the fastest test automation tool embedded in
any IDE.
System Testing
• System Testing
• System testing is a black box testing method used to evaluate the
completed and integrated system, as a whole, to ensure it meets specified
requirements. The functionality of the software is tested from end-to-end
and is typically conducted by a separate testing team than the
development team before the product is pushed into production.
Acceptance Testing
• Acceptance Testing
• Acceptance testing is the last phase of functional testing and is used to
assess whether or not the final piece of software is ready for delivery. It
involves ensuring that the product is in compliance with all of the original
business criteria and that it meets the end user’s needs. This requires the
product be tested both internally and externally, meaning you’ll need to
get it into the hands of your end users for beta testing along with those of
your QA team. Beta testing is key to getting real feedback from potential
customers and can address any final usability concerns.
Performance Testing
• Performance testing is a non-functional testing technique used to
determine how an application will behave under various conditions. The
goal is to test its responsiveness and stability in real user situations.
Performance testing can be broken down into four types:
• Load testing is the process of putting increasing amounts of simulated
demand on your software, application, or website to verify whether or not
it can handle what it’s designed to handle.
• Stress testing takes this a step further and is used to gauge how your
software will respond at or beyond its peak load. The goal of stress testing
is to overload the application on purpose until it breaks by applying both
realistic and unrealistic load scenarios. With stress testing, you’ll be able to
find the failure point of your piece of software.
• Endurance testing, also known as soak testing, is used to analyze the behavior of
an application under a specific amount of simulated load over longer amounts of
time. The goal is to understand how your system will behave under sustained use,
making it a longer process than load or stress testing (which are designed to end
after a few hours). A critical piece of endurance testing is that it helps uncover
memory leaks.
• Spike testing is a type of load test used to determine how your software will
respond to substantially larger bursts of concurrent user or system activity over
varying amounts of time. Ideally, this will help you understand what will happen
when the load is suddenly and drastically increased.
• Security Testing
• With the rise of cloud-based testing platforms and cyber attacks, there is a
growing concern and need for the security of data being used and stored in
software. Security testing is a non-functional software testing technique used to
determine if the information and data in a system is protected. The goal is to
purposefully find loopholes and security risks in the system that could result in
unauthorized access to or the loss of information by probing the application for
weaknesses. There are multiple types of this testing method, each of which
aimed at verifying six basic principles of security:
• Integrity
• Confidentiality
• Authentication
• Authorization
• Availability
• Non-repudiation
• Usability Testing
• Usability testing is a testing method that measures an application’s
ease-of-use from the end-user perspective and is often performed during
the system or acceptance testing stages. The goal is to determine whether
or not the visible design and aesthetics of an application meet the
intended workflow for various processes, such as logging into an
application. Usability testing is a great way for teams to review separate
functions, or the system as a whole, is intuitive to use.
• Compatibility Testing
• Compatibility testing is used to gauge how an application or piece of
software will work in different environments. It is used to check that your
product is compatible with multiple operating systems, platforms,
browsers, or resolution configurations. The goal is to ensure that your
software’s functionality is consistently supported across any environment
you expect your end users to be using.
• Testing With TestComplete
• TestComplete is our robust automated GUI testing tool that excels in
compatibility and integration testing. It helps QA teams create and run
tests across desktop, mobile, and web applications – enabling testing
professionals to speed up delivery cycles and improve software quality.
Testcomplete comes with built-in support for various test environments,
integrations to performance testing tools, as well as support for developer
friendly SCMs, allowing you to seamlessness integrate it into your
development process. Using TestComplete will enable you to build a
robust testing framework that utilizes the broad spectrum of available
software testing methodologies.
Thank You