Chapter 7 Maintainence and Quality
Chapter 7 Maintainence and Quality
Whenever software is built, there is always scope for improvement and those
improvements bring picture changes. Changes may be required to modify or update
any existing solution or to create a new solution for a problem. Requirements keep
on changing daily so we need to keep on upgrading our systems based on the
current requirements and needs to meet desired outputs. Changes should be
analyzed before they are made to the existing system, recorded before they are
implemented, reported to have details of before and after, and controlled in a
manner that will improve quality and reduce error. This is where the need for
System Configuration Management comes. System Configuration Management
(SCM) is an arrangement of exercises that controls change by recognizing the items
for change, setting up connections between those things, making/characterizing
instruments for overseeing diverse variants, controlling the changes being executed
in the current framework, inspecting and revealing/reporting on the changes made.
It is essential to control the changes because if the changes are not checked
legitimately then they may wind up undermining a well-run programming. In this
way, SCM is a fundamental piece of all project management activities.
Processes involved in SCM – Configuration management provides a disciplined
environment for smooth control of work products. It involves the following activities:
1. Identification and Establishment – Identifying the configuration items
from products that compose baselines at given points in time (a baseline is a
set of mutually consistent Configuration Items, which has been formally
reviewed and agreed upon, and serves as the basis of further development).
Establishing relationships among items, creating a mechanism to manage
multiple levels of control and procedure for the change management system.
2. Version control – Creating versions/specifications of the existing product to
build new products with the help of the SCM system. A description of the
version is given below:
Suppose after some changes, the version of the configuration object changes
from 1.0 to 1.1. Minor corrections and changes result in versions 1.1.1 and
1.1.2, which is followed by a major update that is object 1.2. The
development of object 1.0 continues through 1.3 and 1.4, but finally, a
noteworthy change to the object results in a new evolutionary path, version
2.0. Both versions are currently supported.
3. Change control – Controlling changes to Configuration items (CI). The
change control process is explained in Figure below:
A change request (CR) is submitted and evaluated to assess technical merit,
potential side effects, the overall impact on other configuration objects and
system functions, and the projected cost of the change. The results of the
evaluation are presented as a change report, which is used by a change
control board (CCB) —a person or group who makes a final decision on the
status and priority of the change. An engineering change Request (ECR) is
generated for each approved change. Also, CCB notifies the developer in case
the change is rejected with proper reason. The ECR describes the change to
be made, the constraints that must be respected, and the criteria for review
and audit. The object to be changed is “checked out” of the project database,
the change is made, and then the object is tested again. The object is then
“checked in” to the database and appropriate version control mechanisms
are used to create the next version of the software.
4. Configuration auditing – A software configuration audit complements the
formal technical review of the process and product. It focuses on the
technical correctness of the configuration object that has been modified. The
audit confirms the completeness, correctness, and consistency of items in the
SCM system and tracks action items from the audit to closure.
5. Reporting – Providing accurate status and current configuration data to
developers, testers, end users, customers, and stakeholders through admin
guides, user guides, FAQs, Release notes, Memos, Installation Guide,
Configuration guides, etc.
System Configuration Management (SCM) is a software engineering practice that
focuses on managing the configuration of software systems and ensuring that
software components are properly controlled, tracked, and stored. It is a critical
aspect of software development, as it helps to ensure that changes made to a
software system are properly coordinated and that the system is always in a known
and stable state.
SCM involves a set of processes and tools that help to manage the different
components of a software system, including source code, documentation, and other
assets. It enables teams to track changes made to the software system, identify
when and why changes were made, and manage the integration of these changes
into the final product.
Importance of Software Configuration Management
1. Effective Bug Tracking: Linking code modifications to issues that have been
reported, makes bug tracking more effective.
2. Continuous Deployment and Integration: SCM combines with continuous
processes to automate deployment and testing, resulting in more dependable
and timely software delivery.
3. Risk management: SCM lowers the chance of introducing critical flaws by
assisting in the early detection and correction of problems.
4. Support for Big Projects: Source Code Control (SCM) offers an orderly method
to handle code modifications for big projects, fostering a well-organized
development process.
5. Reproducibility: By recording precise versions of code, libraries, and
dependencies, source code versioning (SCM) makes builds repeatable.
6. Parallel Development: SCM facilitates parallel development by enabling
several developers to collaborate on various branches at once.
Why need for System configuration management?
1. Replicability: Software version control (SCM) makes ensures that a software
system can be replicated at any stage of its development. This is necessary
for testing, debugging, and upholding consistent environments in production,
testing, and development.
2. Identification of Configuration: Source code, documentation, and executable
files are examples of configuration elements that SCM helps in locating and
labeling. The management of a system’s constituent parts and their
interactions depend on this identification.
3. Effective Process of Development: By automating monotonous processes like
managing dependencies, merging changes, and resolving disputes, SCM
simplifies the development process. Error risk is decreased and efficiency is
increased because of this automation.
Key objectives of SCM
1. Control the evolution of software systems: SCM helps to ensure that
changes to a software system are properly planned, tested, and integrated
into the final product.
2. Enable collaboration and coordination: SCM helps teams to collaborate
and coordinate their work, ensuring that changes are properly integrated and
that everyone is working from the same version of the software system.
3. Provide version control: SCM provides version control for software
systems, enabling teams to manage and track different versions of the
system and to revert to earlier versions if necessary.
4. Facilitate replication and distribution: SCM helps to ensure that software
systems can be easily replicated and distributed to other environments, such
as test, production, and customer sites.
5. SCM is a critical component of software development, and effective SCM
practices can help to improve the quality and reliability of software systems,
as well as increase efficiency and reduce the risk of errors.
The main advantages of SCM
1. Improved productivity and efficiency by reducing the time and effort required
to manage software changes.
2. Reduced risk of errors and defects by ensuring that all changes were properly
tested and validated.
3. Increased collaboration and communication among team members by
providing a central repository for software artifacts.
4. Improved quality and stability of software systems by ensuring that all
changes are properly controlled and managed.
The main disadvantages of SCM
1. Increased complexity and overhead, particularly in large software systems.
2. Difficulty in managing dependencies and ensuring that all changes are
properly integrated.
3. Potential for conflicts and delays, particularly in large development teams
with multiple contributors.
Capability Maturity Model (CMM) – Software Engineering
The Capability Maturity Model (CMM) is a tool used to improve and refine software
development processes. It provides a structured way for organizations to assess
their current practices and identify areas for improvement. CMM consists of five
maturity levels: initial, repeatable, defined, managed, and optimizing. By following
the CMM, organizations can systematically improve their software development
processes, leading to higher-quality products and more efficient project
management.
What is the Capability Maturity Model (CMM)
Capability Maturity Model (CMM) was developed by the Software Engineering
Institute (SEI) at Carnegie Mellon University in 1987. It is not a software process
model. It is a framework that is used to analyze the approach and techniques
followed by any organization to develop software products. It also provides
guidelines to enhance further the maturity of the process used to develop those
software products.
It is based on profound feedback and development practices adopted by the most
successful organizations worldwide. This model describes a strategy for software
process improvement that should be followed by moving through 5 different levels.
Each level of maturity shows a process capability level. All the levels except level 1
are further described by Key Process Areas (KPA).
Importance of Capability Maturity Model
Optimization of Resources: CMM helps businesses make the best use of all
of their resources, including money, labor, and time. Organizations can
improve the effectiveness of resource allocation by recognizing and getting
rid of unproductive practices.
Comparing and Evaluating: A formal framework for benchmarking and
self-evaluation is offered by CMM. Businesses can assess their maturity
levels, pinpoint their advantages and disadvantages, and compare their
performance to industry best practices.
Management of Quality: CMM emphasizes quality management heavily.
The framework helps businesses apply best practices for quality assurance
and control, which raises the quality of their goods and services.
Enhancement of Process: CMM gives businesses a methodical approach to
evaluate and enhance their operations. It provides a road map for gradually
improving processes, which raises productivity and usefulness.
Increased Output: CMM seeks to boost productivity by simplifying and
optimizing processes. Organizations can increase output and efficiency
without compromising quality as they go through the CMM levels.
Principles of Capability Maturity Model (CMM)
People’s capability is a competitive issue. Competition arises when different
organizations are performing the same task (such as software development).
In such a case, the people of an organization are sources of strategy and
skills, which in turn results in better performance of the organization.
The people’s capability should be defined by the business objectives of the
organization.
An organization should invest in improving the capabilities and skills of the
people as they are important for its success.
The management should be responsible for enhancing the capability of the
people in the organization.
The improvement in the capability of people should be done as a process.
This process should incorporate appropriate practices and procedures.
The organization should be responsible for providing improvement
opportunities so that people can take advantage of them.
Since new technologies and organizational practices emerge rapidly,
organizations should continually improve their practices and develop the
abilities of people.
Shortcomings of the Capability Maturity Model (CMM)
It encourages the achievement of a higher maturity level in some cases by
displacing the true mission, which is improving the process and overall
software quality.
It only helps if it is put into place early in the software development process.
It has no formal theoretical basis and in fact, is based on the experience of
very knowledgeable people.
It does not have good empirical support and this same empirical support
could also be constructed to support other models.
Difficulty in measuring process improvement: The SEI/CMM model may not
provide an accurate measure of process improvement, as it relies on self-
assessment by the organization and may not capture all aspects of the
development process.
Focus on documentation rather than outcomes: The SEI/CMM model may
focus too much on documentation and adherence to procedures, rather than
on actual outcomes such as software quality and customer satisfaction.
May not be suitable for all types of organizations: The SEI/CMM model may
not be suitable for all kinds of organizations, particularly those with smaller
development teams or those with less structured development processes.
May not keep up with rapidly evolving technologies: The SEI/CMM model may
not be able to keep up with rapidly evolving technologies and development
methodologies, which could limit its usefulness in certain contexts.
Lack of agility: The SEI/CMM model may not be agile enough to respond
quickly to changing business needs or customer requirements, which could
limit its usefulness in dynamic and rapidly changing environments.
Key Process Areas (KPA)
Each of these KPA (Key Process Areas) defines the basic requirements that should
be met by a software process to satisfy the KPA and achieve that level of maturity.
Conceptually, key process areas form the basis for management control of the
software project and establish a context in which technical methods are applied,
work products like models, documents, data, reports, etc. are produced, milestones
are established, quality is ensured and change is properly managed.
Levels of Capability Maturity Model (CMM)
There are 5 levels of Capability Maturity Models. We will discuss each one of them in
detail.
CMM
Level-1: Initial
No KPIs defined.
Processes followed are Adhoc and immature and are not well defined.
Unstable environment for software development.
No basis for predicting product quality, time for completion, etc.
Limited project management capabilities, such as no systematic tracking of
schedules, budgets, or progress.
We have limited communication and coordination among team members and
stakeholders.
No formal training or orientation for new team members.
Little or no use of software development tools or automation.
Highly dependent on individual skills and knowledge rather than standardized
processes.
High risk of project failure or delays due to a lack of process control and
stability.
Level-2: Repeatable
Focuses on establishing basic project management policies.
Experience with earlier projects is used for managing new similar-natured
projects.
Project Planning- It includes defining resources required, goals, constraints,
etc. for the project. It presents a detailed plan to be followed systematically
for the successful completion of good-quality software.
Configuration Management- The focus is on maintaining the performance
of the software product, including all its components, for the entire lifecycle.
Requirements Management- It includes the management of customer
reviews and feedback which result in some changes in the requirement set. It
also consists of accommodation of those modified requirements.
Subcontract Management- It focuses on the effective management of
qualified software contractors i.e. it manages the parts of the software
developed by third parties.
Software Quality Assurance- It guarantees a good quality software
product by following certain rules and quality standard guidelines while
developing.
Level-3: Defined
At this level, documentation of the standard guidelines and procedures takes
place.
It is a well-defined integrated set of project-specific software engineering and
management processes.
Peer Reviews: In this method, defects are removed by using several review
methods like walkthroughs, inspections, buddy checks, etc.
Intergroup Coordination: It consists of planned interactions between
different development teams to ensure efficient and proper fulfillment of
customer needs.
Organization Process Definition: Its key focus is on the development and
maintenance of standard development processes.
Organization Process Focus: It includes activities and practices that
should be followed to improve the process capabilities of an organization.
Training Programs: It focuses on the enhancement of knowledge and skills
of the team members including the developers and ensuring an increase in
work efficiency.
Level-4: Managed
At this stage, quantitative quality goals are set for the organization for
software products as well as software processes.
The measurements made help the organization to predict the product and
process quality within some limits defined quantitatively.
Software Quality Management: It includes the establishment of plans and
strategies to develop quantitative analysis and understanding of the
product’s quality.
Quantitative Management: It focuses on controlling the project
performance quantitatively.
Level-5: Optimizing
This is the highest level of process maturity in CMM and focuses on
continuous process improvement in the organization using quantitative
feedback.
The use of new tools, techniques, and evaluation of software processes is
done to prevent the recurrence of known defects.
Process Change Management: Its focus is on the continuous improvement
of the organization’s software processes to improve productivity, quality, and
cycle time for the software product.
Technology Change Management: It consists of the identification and use
of new technologies to improve product quality and decrease product
development time.
Defect Prevention It focuses on the identification of causes of defects and
prevents them from recurring in future projects by improving project-defined
processes.
Verification
Verification is the process of checking that software achieves its goal without any
bugs. It is the process to ensure whether the product that is developed is right or
not. It verifies whether the developed product fulfills the requirements that we have.
Verification is simply known as Static Testing.
Static Testing
Verification Testing is known as Static Testing and it can be simply termed as
checking whether we are developing the right product or not and also whether our
software is fulfilling the customer’s requirement or not. Here are some of the
activities that are involved in verification.
Inspections
Reviews
Walkthroughs
Desk-checking