TESTING & MAINTENANCE
Software testing is an important process in the Software Development Lifecycle(SDLC). It
involves verifying and validating that a Software Application is free of bugs, meets the technical
requirements set by its Design and Development, and satisfies user requirements efficiently and
effectively. Software Testing is a process of verifying and validating whether the Software
Product or Application is working as expected. Complete testing includes identifying errors and bugs
that cause future problems for an application's performance.
Software Testing Can be Divided into Two Steps:
Software testing mainly divides into the two parts, which is used in the Software Development
Process:
1. Verification: This step involves checking if the software is doing what is supposed to do. Its like
asking, “Are we building the product the right way?“
2. Validation: This step verifies that the software actually meets the customer’s needs and
requirements. Its like asking, “Are we building the right product?“
The pictorial graph through which every part of software testing is represented.
1. Manual Testing
Manual Testing is a technique to test the software that is carried out using the functions and features
of an application. Which means manual testing will check the defect manually with trying one by one
function is working as expected.
2.Automation Testing
Automation Testing It is a technique where the Tester writes scripts independently and uses suitable
Software or Automation Tools to test the software. It is an Automation Process of a Manual Process.
It allows for executing repetitive tasks without the use of a Manual Tester.
Types of Manual Testing
Manual testing will be divided into further types :-
1. White Box Testing
White Box Testing is a software testing technique that involves testing the internal structure
and workings of a software application. The tester has access to the source code and uses
this knowledge to design test cases that can verify the correctness of the software at the code
level.
2. Black Box Testing
Black-Box Testing is a type of software testing in which the tester is not concerned with the
internal knowledge or implementation details of the software but rather focuses on
validating the functionality based on the provided specifications or requirements.
3. Gray Box Testing
Gray Box Testing is a software testing technique that is a combination of the Black Box
Testing technique and the White Box Testing technique. In the Black Box Testing technique,
the tester is unaware of the internal structure of the item being tested and in White Box Testing
the internal structure is known to the tester.
(Refer the above pictorial figure of types of software testing, accordingly, the following
names are mentioned.)
Types of Black Box Testing
Black Box Testing will be divided into further types which is following:
1. Functional Testing
Functional Testing is a type of Software Testing in which the system is tested against the
functional requirements and specifications. Functional testing ensures that the requirements
or specifications are properly satisfied by the application.
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.
Types of Functional Testing
Functional Testing will be divided into further types which is following:
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.
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.
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.
Types of Non-functional Testing
Here are the Types of Non-Functional Testing
1. Performance Testing
Performance Testing is a type of software testing that ensures software applications perform
properly under their expected workload. It is a testing technique carried out to determine
system performance in terms of sensitivity, reactivity, and stability under a particular
workload.
2. Usability Testing
Usability Testing in software testing is a type of testing, that is done from an end user’s
perspective to determine if the system is easily usable. Usability testing is generally the
practice of testing how easy a design is to use on a group of representative users.
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.
Different Levels of Software Testing
In Software testing there are Different Levels of Testing can be majorly classified into 4 levels:
1. Unit Testing: In this type of testing, errors are detected individually from every component or
unit by individually testing the components or units of software to ensure that they are fit for
use by the developers. It is the smallest testable part of the software.
2. Integration Testing: In this testing, two or more modules which are unit tested are integrated
to test i.e., technique interacting components, and are then verified if these integrated
modules work as per the expectation or not, and interface errors are also detected.
3. System Testing: In system testing, complete and integrated Software are tested i.e., all the
system elements forming the system are tested as a whole to meet the requirements of the
system.
4. Acceptance Testing: This is a kind of testing conducted to ensure that the requirements of the
users are fulfilled before its delivery and that the software works correctly in the user’s
working environment.
Regression testing, refactoring, Business Process Reengineering (BPR), and model
reengineering are distinct concepts that play a crucial role in software development and
business operations. Regression testing ensures code changes don't break existing
functionality, while refactoring improves code quality and maintainability without altering its
external behavior. BPR involves redesigning business processes for efficiency, and model
reengineering focuses on improving the structure and implementation of software models,
like machine learning models.
1. Regression Testing:
Definition: A type of software testing that ensures new code changes haven't introduced
defects in previously working parts of the software.
Purpose: To maintain the stability and reliability of the system after changes.
Process: Re-running existing tests after code changes to verify that the system continues to
behave as expected.
2. Refactoring:
Definition: The process of restructuring existing code without changing its external behavior.
Purpose: To improve code quality, readability, and maintainability.
Examples: Renaming variables, simplifying code, and restructuring code blocks.
3. Business Process Reengineering (BPR):
Definition: A radical redesign of business processes to achieve dramatic improvements in
performance, efficiency, and effectiveness.
Purpose: To streamline operations, reduce costs, and improve customer satisfaction.
Process: Involves analyzing current processes, identifying areas for improvement, designing
new processes, and implementing changes.
4. Model Reengineering:
Definition: The process of redesigning or restructuring a software model (e.g., a machine
learning model) to improve its performance, accuracy, or maintainability.
Purpose: To enhance the model's capabilities and ensure its long-term usability.
Examples: Refactoring the model's code, optimizing its architecture, or adjusting its training
process.
Software Project Management (SPM) is a proper way of planning and leading software
projects. It is a part of project management in which software projects are planned,
implemented, monitored, and controlled. This article focuses on discussing Software Project
Management (SPM). The most important is that basic technology changes and advances so
frequently and rapidly that the experience of one product may not be applied to the other
one. Such types of business and environmental constraints increase risk in software
development hence it is essential to manage software projects efficiently. It is necessary for
an organization to deliver quality products, keep the cost within the client’s budget constraint,
and deliver the project as per schedule.
COCOMO (Constructive Cost Model) is a software estimation technique used to predict the
effort, cost, and schedule of software development projects. It comes in two versions,
COCOMO I and COCOMO II, with COCOMO I being suitable for smaller projects and COCOMO
II for larger, more complex projects, including those with significant reuse.
COCOMO I (Basic, Intermediate, and Detailed)
Basic COCOMO:
Provides a simple estimation based on lines of code (LOC) and project type (organic, semi-
detached, embedded).
Intermediate COCOMO:
Refines estimates using cost drivers, which are factors that influence effort, such as product,
computer, personnel, and project characteristics.
Detailed COCOMO:
Further divides the project into phases and modules to provide more granular estimates,
suitable for larger projects.
COCOMO II (Application Composition, Early Design, Post-Architecture)
Application Composition: Focuses on estimating effort based on reusable components and
modules.
Early Design: Estimates effort during the initial phases of the project, considering factors like
project requirements and system design.
Post-Architecture: Provides estimates for the later phases, including detailed design, coding,
and testing.
Key Differences and Applications
Scope:
COCOMO I is primarily used for smaller projects under 300 KLOC, while COCOMO II is better
suited for larger, more complex projects, including those involving significant reuse.
Complexity:
COCOMO II is more comprehensive and detailed than COCOMO I, addressing estimation needs
during different project stages and considering a broader range of cost drivers.
Project Types:
COCOMO I categorizes projects as organic (simple, well-understood), semi-detached
(moderate complexity), and embedded (highly complex). COCOMO II uses object points,
function points, or lines of code to size projects.
Estimation Accuracy:
COCOMO II provides more accurate estimates by considering a wider range of factors and
using more detailed models.
COCOMO Model is a procedural cost estimate model for Software Projects and is often used
as a process of reliably predicting the various parameters associated with making a project
such as size, effort, cost, time, and quality.
The key parameters that define the quality of any Software Product, which are also an
outcome of COCOMO, are primarily effort and schedule.
Types of Projects in COCOMO Model
In the COCOMO model, software projects are categorized into three types based on their
complexity, size, and the development environment. These types are:
1. Organic
A software project is said to be an organic type if the team size required is adequately small,
the problem is well understood and has been solved in the past and also the team members
have a nominal experience regarding the problem.
2. Semi-detached
A software project is said to be a Semi-detached type if the vital characteristics such as team
size, experience, and knowledge of the various programming environments lie in between
organic and embedded.
The projects classified as Semi-Detached are comparatively less familiar and difficult to
develop compared to the organic ones and require more experience better guidance and
creativity. Eg: Compilers or different Embedded Systems can be considered Semi-Detached
types.
3. Embedded
A software project requiring the highest level of complexity, creativity, and experience
requirement falls under this category. Such software requires a larger team size than the other
two models and also the developers need to be sufficiently experienced and creative to
develop such complex models.
Importance of the COCOMO Model
1. Cost Estimation: To help with resource planning and project budgeting, COCOMO offers a
methodical approach to software development cost estimation.
2. Resource Management: By taking team experience, project size, and complexity into account,
the model helps with efficient resource allocation.
3. Project Planning: COCOMO assists in developing practical project plans that include attainable
objectives, due dates, and benchmarks.
4. Risk management: Early in the development process, COCOMO assists in identifying and
mitigating potential hazards by including risk elements.
5. Support for Decisions: During project planning, the model provides a quantitative foundation
for choices about scope, priorities, and resource allocation.
Basic COCOMO Model
The Basic COCOMO model is a straightforward way to estimate the effort needed for a software
development project. It uses a simple mathematical formula to predict how many person-months of
work are required based on the size of the project, measured in thousands of lines of code (KLOC).
It estimates effort and time required for development using the following expression:
E = a*(KLOC)b PM
Tdev = c*(E)d
Person required = Effort/ Time
Where,
E is effort applied in Person-Months
KLOC is the estimated size of the software product indicate in Kilo Lines of Code
Tdev is the development time in months
Suppose that a Basic project was estimated to be 400 KLOC (kilo lines of code). Calculate
effort and time for each of the three modes of development. All the constants value
provided in the following table:
Solution: From the above table we take the value of constant a,b,c and d.
1. For organic mode,
effort = 2.4 × (400)1.05 ≈ 1295 person-month.
dev. time = 2.5 × (1295)0.38 ≈ 38 months.
2. For semi-detach mode,
effort = 3 × (400)1.12 ≈ 2462 person-month.
dev. time = 2.5 × (2462)0.35 ≈ 38 months.
3. For Embedded mode,
effort = 3.6 × (400)1.20 ≈ 4772 person-month.
dev. time = 2.5 × (4772)0.32 ≈ 38 months.