SEP Insights
SEP Insights
No increase in testing does not mean always good for the product, company or the project. In real test
scenarios from 100% test plans only 20% test plans are critical from business angle. Running those
critical test plans will assure that the testing is proper rather than running the full 100% test plans
again and again. If you under test a system your
number of defect will increase, but on the contrary if you over test a system your cost of testing will
increase. Even if your defects come down your cost of testing has shooted up.
The requirements for the project: Each software development project consists of requirements that
must be met before it’s implemented. So, you have to evaluate these requirements and compare them
to what you have in place in your company, before choosing a methodology. That way, you’ll be able
to arrive at the best methodology to use at all times and choose a system that will give you the best
results for the resources and time spent.
The expected end product of the project: Before starting a software development project, you need
to have an end product in mind. This is the result that you hope to achieve after completing the
project. You must envision this and sketch it out in the software design phase before the first line of
code is written. You must have an idea about the expectations of your clients regarding the project.
Be clear about your goals and how you want to achieve it and decide which method will lead you
correctly; towards the successful creation of the project.
The past experience of the project team with the methodology: The experience of the software
development team in your company matters too. This should be considered when deciding on the
software development methodology you want to use. Some team members may not feel comfortable
working with certain systems if they don’t have any prior experience with them, while others might
find it difficult getting used to working with new team members. It’s important to keep team
capabilities and team dynamics in mind.
Feedback on the work done: Feedback is a crucial aspect of software development. It helps you
formulate outcomes for future projects. As a matter of fact, if you don’t know exactly how you arrived
at previous results, you won’t be able to replicate them. While doing this, you need to consider how
efficient your team is in providing feedback. This depends largely on the applications, methodologies,
and the size of the project.
Project size: Before picking a software development methodology to use, you need to consider the
size of the project you’re embarking on. While larger projects may not fit perfectly for the waterfall,
some apps will require longer testing times owing to their size and requirements.
Project size should also be considered while selecting the right software development methodology.
Some models work the best on small-scaled projects while the others go well with large-scaled ones.
Select the methodology that suits the number of team members you have within the project.
Software Defect is some kind of error, flaw or some kind of mistake from the development team
which prevent the software from the smooth working.
Defects are defined as the deviation of the actual and expected result of system or software
application. Defects can also be defined as any deviation or irregularity from the specifications
mentioned in the product functional specification document. Defects are caused by the developer in
development phase of software. When a developer or programmer during the development phase
makes some mistake then that turns into bugs that are called defects. It is basically caused by the
developers’ mistakes.
Defect in a software product represents the inability and inefficiency of the software to meet the
specified requirements and criteria and subsequently prevent the software application to perform the
expected and desired working.
Defects can be prevented by peer reviewing and code analysis.
Types of Defects:
Following are the common types of defects that occur during development:
Arithmetic Defects:
It includes the defects made by the developer in some arithmetic expression or mistake in finding
solution of such arithmetic expression. This type of defects are basically made by the programmer due
to access work or less knowledge. Code congestion may also lead to the arithmetic defects as
programmer is unable to properly watch the written code.
Logical Defects:
Logical defects are mistakes done regarding the implementation of the code. When the programmer
doesn’t understand the problem clearly or thinks in a wrong way then such types of defects happen.
Also while implementing the code if the programmer doesn’t take care of the corner cases then logical
defects happen. It is basically related to the core of the software. Logic errors are flaws that lead
software to provide false results.
Syntax Defects:
Syntax defects means mistake in the writing style of the code. It also focuses on the small mistake
made by developer while writing the code. Often the developers do the syntax defects as there might
be some small symbols escaped. For example, while writing a code in C++ there is possibility that a
semicolon (;) is escaped.
Multithreading Defects:
Multithreading means running or executing the multiple tasks at the same time. Hence in
multithreading process there is possibility of the complex debugging. In multithreading processes
sometimes there is condition of the deadlock and the starvation is created that may lead to system’s
failure.
Interface Defects:
Interface defects means the defects in the interaction of the software and the users. The system may
suffer different kinds of the interface testing in the forms of the complicated interface, unclear
interface or the platform based interface.
Performance Defects:
Performance defects are the defects when the system or the software application is unable to meet the
desired and the expected results. When the system or the software application doesn’t fulfill the user’s
requirements then that is the performance defects. It also includes the response of the system with the
varying load on the system.
Security defects
Software bugs of the security variety, if not fixed, might have serious repercussions. These flaws
could provide hostile individuals access to delicate information or systems, or even give them control
of the impacted software. Because of this, security-level issues must receive top-priority treatment and
be resolved as soon as feasible.
Compatibility defects
When an application is incompatible with the hardware it is operating on or with other software it has
to interface with, it develops compatibility flaws.
Software and hardware incompatibilities can lead to crashes, data loss, and other undesirable
behavior.
Defects can also be categorized as low priority, medium priority and high priority defects.
Software testers are part of a software development team and perform functional and non-functional
testing of software using manual and automated software testing techniques.
A software tester has different sets of responsibilities and these include.
1. Bug reporting: Software testers are responsible for writing bug reports and forwarding to the
development team.
2. Understanding requirements: He may have to interact with the clients to better understand the
product requirements or in case the design requires any kind of modifications.
3. Perform all levels of testing (including System, Integration, and Regression testing)
4. Detect and track software defects and inconsistencies: He is responsible for mitigating software
risks by detecting and troubleshooting defects.
5. Adherence to standards: Ensure that all tested related work is carried out as per the defined
standards and procedures.
6. Preparation of the test plan: The software contributes in the test plan preparation.
7. Creation of test designs, test processes, test cases and test data and also modification test cases if
required.
8. Design and develop automation scripts when needed
9. Software testers analyse software and systems to avert risk and prevent issues
10. Software testers are also responsible for implementing, designing and building testing strategies
effectively.
11. Discuss bug fixes with developers including re-testing the fixed bugs.
12. Software Testers analyze users stories and/use cases/requirements for validity and feasibility
13. Maintain the test documentation: They write documents and perform document analysis, for
example; updating the Traceability matrix document.
14. Communicate findings to technical and non-technical colleagues including providing objective
feedback to software development project teams
The Test Management process can be divided into two main parts, including:
Planning
This is the first phase, where the developers and testers plan the entire test cycle.
During the planning phase of the test management process, a test manager will establish a
comprehensive plan of the test life cycle. Planning is further divided into the following sub-processes:
Risk Analysis
Risks can adversely affect the software quality and the company’s reputation if they occur. A risk
analysis is conducted before the start of the project to determine any risk factors and come up with
possible solutions.
Test Estimation
This allows the test manager to estimate the amount of required resources (e.g., equipment, facilities,
funding, etc.), human skill needed, project timeline, and the overall cost to complete the test. It’s
considered one of the most crucial tasks during the test management process.
Test planning
This defines the test scope, strategy, objectives, exit criteria, resource planning, test deliverables, time
scheduling, etc. A project might fail in the absence of a proper test plan. Effective test planning is
specifically significant in the development of large software systems.
Test Organization
During this phase, a test manager will organize a skilled testing team and define their individual roles
and/or activities in the testing process.
You must create an efficient team and delegate tasks carefully for effective test execution.
Execution
The second part of the test management process is the actual execution of the test. Execution is the
phase in which the actual software testing is executed to determine the results. This includes:
Issue Management
During this stage, each issue found must be reported on time, prioritized, and logged, as well as
appointed to the appropriate team member with the right set of skills to resolve the issue. This stage
works to ensure that the project doesn’t go past its original deadline, that the budget is not exceeded,
and that the organization retains customer trust.
Product quality - Products always serve users, so it's very important that they deliver the values
they promise. Hence, they should work properly to ensure a great customer experience. Following
product requirements is imperative because it helps you get the wanted results.
Security - Testing will ensure that the user gets a trustworthy product, keep the user's personal
information and data safe, and provide vulnerability-free products.
Customer satisfaction - the first impression is really important, and if you fail at it, users are going to
find another product that will accomplish all their requirements. One reason why apps should be
tested is to provide the best user experience possible. Being the best product in the market will help
you gain trust-worthy clients, which will have great long-term effects.
Cost effectiveness - including testing in your project can save money in the long run. Software
development consists of many stages, and if bugs are caught in the earlier phases, it costs much less to
fix them. That is why it is important to start with testing as soon as possible.
What is software Testing?
Software testing is the process of evaluating and verifying that a software product or application does
what it is supposed to do.
Software testing is an integral part of software engineering, it validates the proposed software and
verify its working according to the software requirement specification(SRS).
SRS describes the specifications of the software, how it is expected to work, and its needs during
development. This concept of software testing also ensures the quality of the software being
developed.
It is also stated as the process of verifying and validating a software product. It checks whether the
software product:
Meets the business and technical requirements that guided its design and development
The benefits of testing include preventing bugs, reducing development costs and improving
performance.
There are many different types of software tests, each with specific objectives and strategies:
Unit testing: Validating that each software unit performs as expected. A unit is the smallest testable
component of an application.
Performance testing: Testing how the software performs under different workloads. Load testing, for
example, is used to evaluate performance under real-life load conditions.
Regression testing: Checking whether new features break or degrade functionality. Sanity testing can
be used to verify menus, functions and commands at the surface level, when there is no time for a full
regression test.
Stress testing: Testing how much strain the system can take before it fails. Considered to be a type of
non-functional testing.
Usability testing: Validating how well a customer can use a system or web application to complete a
task.
It ensures that the to-be-published software is built following the proposed SRS document.
Testing helps to check how efficient the software is, and how much optimization is needed to get the
desired results.
It is also capable of detecting security voids present in the code of the proposed software.
The software application’s success rate controls the growth of our business. It plays an important role
for the development of software applications and products.
Cost Effective – Testing has many benefits and one of the most important ones is cost-effectiveness.
Testing our project on time can save money in the long run. Software development consists of many
stages and if bugs are caught in the earlier stages it costs much less to fix them.
Security – This is the most sensitive and vulnerable part of software testing. Users are always looking
for trusted products that they can rely on. It helps in removing problems and risks beforehand.
Customer Satisfaction – The ultimate goal for a product owner is to give the best customer
satisfaction. Software should be tested in order to bring the best user experience possible. Being the
best product in this saturated market will help you gain trustworthy clients which will have great long-
term effects.
In this type of approach, the testers don’t have any knowledge about the internal working of the
proposed software.
They just interact with the developed software and document the tested results.
Testers here act like end users and check for the behavior of the application. Both functional and non-
functional behaviors are tested.
Here the testers know the internal working of the application which includes the actual code and
structure of the application.
In this type of testing, particular functions are tested namely data flow, control flow, path flow,
conditional flow, etc.
Test Management :
Test Management is a process where testing activities are managed to ensure high-quality and high-
end testing of software applications. This method consists of tracking, organization, controlling
process, checks the visibility of the testing process in order to deliver a high-quality software
application. It makes sure the software testing process run as expected.
Test management helps ensure that high-quality software applications are delivered that meet the
customers’ demands. It helps develop the software application within stringent deadlines, facilitating
collaboration between the testers and the developers.
In a nutshell, test management helps with the following:
Customer satisfaction
Checks if the software system is ‘fit for purpose and performs as it is expected to
System Testing:
System Testing is done to check whether the software or product meets the specified requirements or
not. It is done by both testers and developers.
In system testing, we test and validate the fully integrated hardware and software system. We verify
whether the system as a whole meets the specified requirements. The main goal of a system test is to
test the end-to-end system specifications.
It contains the Testings: System testing, Integration Testing, functionality testing, performance
testing, scalability testing, usability, security, etc. It is done through more positive and negative test
cases.
The end-user performs user acceptance testing to ensure that the product serves its purpose and meets
the business requirements. The users pick up specific and frequently used requirements and then test
those. We usually call this end-user testing. Here, the term “user” means the end-user or stakeholder
to whom the product is intended.
The market offers a plethora of test automation frameworks to choose from, and the decision
isn’t always easy.
Another common challenge that organizations face when moving to automated testing is a
lack of infrastructure for executing their tests.
Not all taskts should be automated, Prioritizing High value and business critical tasks that
ensure your app keeps running smoothly and uninterrupted is highly recommended.
Lack of Automated Testing Expertise
If your QA engineers were previously accustomed to performing testing by hand, they likely
lack experience in writing automated test scripts
Using Wrong Tools
If you are using the right tools, test automation will work effectively. With so many testing
solutions available on the market, it becomes very easy to get fooled. Choosing the wrong
tool could result in scalability problems on top of never meeting your initial test automation
goals.
Waterfall
The waterfall methodology empahsizes a linear progression of development. It’s merely a step-
by-step process of creating software from planning requirements to deployment. However, the
integrity of this model is also its downfall. Professional developers rarely use this model because it
does not adapt well to customer input, changing requirement, or unforeseen circumstances.
Difference between static and dynamic testing
Static Testing
Static Testing is a type of software testing in which software application is tested without code
execution.
Static testing is a software testing method that examines a program -- along with any associated
documents -- but does not require the program to be executed.
Some examples of what's tested include the following: requirement specifications, design documents,
and user documents, etc.
The main objective of static testing is to improve the quality of software applications by finding errors
in early stages of software development process.
Static testing may include walk-throughs, reviews, inspections and data flow analysis. It mainly
involves syntax checking of code and manually reviewing algorithms as well as documents to find
any errors.
Static testing involves manual or automated reviews of the documents. This review is done during an
initial phase of testing to catch Defect early in STLC. It examines work documents and provides
review comments. It is also called Non-execution testing or verification testing.
Dynamic Testing
Dynamic Testing is a software testing method used to test the dynamic behaviour of software code.
Under Dynamic Testing, a code is executed. It checks for functional behavior of software system,
memory/cpu usage and overall performance of the system.
The main objective of this testing is to confirm that the software product works in conformance with
the business requirements. This testing is also called an Execution technique or validation testing.
Dynamic testing executes the software and validates the output with the expected outcome. Dynamic
testing is performed at all levels of testing and it can be either black or white box testing.
/ Dynamic testing is a type of software testing that involves executing the software and evaluating its
behavior during runtime. It is also known as functional testing, as it focuses on testing the software’s
functionality and how it behaves under different inputs and conditions.
Dynamic testing is an important part of the software development process, as it helps to ensure that
the software is working as intended and meets the requirements of the end users.
Unit Testing: Under Unit Testing, individual units or modules are tested by the developers. It
involves testing of source code by developers.
Integration Testing: Individual modules are grouped together and tested by the developers. The
purpose is to determine what modules are working as expected once they are integrated.
System Testing: System Testing is performed on the whole system by checking whether the system
or application meets the requirement specification document.
Also, Non-functional testing like performance, Security Testing fall under the category of dynamic
testing.
Dynamic Testing can reveal the uncovered defects that are considered to be too difficult or
complicated and which cannot be covered through static Analysis
In Dynamic Testing, we execute the software, end to end, ensuring error free software which in turn
increases the quality of a product and project.
Dynamic Testing becomes an essential Tool for detecting any security Threats
Dynamic Testing is Time Consuming because it executes the application/software or code which
requires huge amount of Resources
Dynamic Testing increases the cost of project/product because it does not start early in the software
lifecycle and hence any issues fixed in later stages can result in an increase of cost.
Difference Between Static and Dynamic Testing
Static testing is done without executing the program whereas Dynamic testing is done by executing
the program.
Static testing checks the code, requirement documents, and design documents to find errors whereas
Dynamic testing checks the functional behavior of software system, memory/CPU usage and overall
performance of the system.
Static testing is about the prevention of defects whereas Dynamic testing is about finding and fixing
the defects.
Static testing does the verification process while Dynamic testing does the validation process.
Static testing is performed before compilation whereas Dynamic testing is performed after
compilation.
Static testing techniques are structural and statement coverage while Dynamic testing techniques are
Boundary Value Analysis & Equivalence Partitioning.
Static testing is a software testing method that examines a program -- along with any associated
documents -- but does not require the program to be executed. Dynamic testing, the other
main category of software testing, requires testers to interact with the program while it runs.
Black-box testing
The black-box testing is a testing technique
where the test engineer selects a module and
gives an input value to observe its functionality
and analysis of whether the function is giving
the expected output or not. If the function
produced the correct output, then the particular
function will be marked as pass.
Functional testing
Non-function testing
Functional testing
Functional testing is one of the most important
parts of black-box testing. It mainly focuses on
application specification rather than the actual
code, and the test engineer will test the program
rather than the system.
Integration testing
System testing
Unit testing
White-box Testing
White-box testing tests a software's internal structures or workings instead of its functionality.
The word white box is used to describe the core perspective of the system. The developers will
perform the white box testing, where they will test every line of the program's code.
The white-box testing is further divided into data flow/control testing.
Data flow Testing
The data flow testing is used to identify the program's test paths as per the settings of descriptions and
uses of variables in the program. And it does not relate to data flow diagrams.
Testing Deadlines
Management decision
Deadlines (release deadlines, testing
deadlines.)
Coverage of code/functionality/requirements
reaches
A specified point