Module 6 - SCM, QA & Maintenance

Risk Analysis & Management: Risk Mitigation

Risk is a potential problem that might or might not happen, concerning future happenings and involving change and uncertainty. Software risks involve two primary characteristics: Uncertainty (there are no 100% probable risks) and Loss (unwanted consequences will occur if the risk becomes reality).

Risk Analysis in project management is a sequence of processes to identify factors that may affect a project's success. It is a pro-active rather than a reactive process. Risk Management aims at reducing the impact of all kinds of risks by identifying, analyzing, and managing them to avoid disaster or heavy losses.

Risk Mitigation / Avoidance

If a software team adopts a proactive approach to risk, avoidance is always the best strategy. Risk Mitigation means preventing the risks from occurring. The following steps are taken for mitigating risk:

  • Meet the current staff to determine the causes of probable risks (e.g., poor working conditions, low pay, competitive job market).
  • Find out and eliminate all those causes that can create risk before the project starts.
  • Develop a policy in an organization which will help to continue the project even though some staff leaves.
  • Ensure everybody in the project team is acquainted with the current development activity.
  • Maintain the corresponding documents in a timely manner, strictly as per the standards set by the organization.
  • Conduct timely reviews in order to speed up the work.
  • Provide additional staff, if required, for conducting very critical activities during software development.

Monitoring and Management Plan (RMMM)

Risk Monitoring

In the risk monitoring process, the project manager must monitor several factors as the project progresses:

The primary objectives of risk monitoring are:

  1. To assess whether the predicted risks do, in fact, occur.
  2. To ensure that risk aversion/mitigation steps defined for the risk are being properly applied.
  3. To collect information that can be used for analyzing future risks.

Risk Management

Risk management and contingency planning assume that mitigation efforts have failed and that the risk has become a reality. If the project manager successfully applied mitigation steps earlier, managing the risk becomes much easier.

Example Scenario: Many people are leaving the organization.

If mitigation was done properly (sufficient additional staff is available, development activity is known to everyone, and systematic documentation exists), any 'newcomer' can easily understand the current development. This helps continue the work without interruption or delay.

The RMMM Plan

The RMMM plan may be a part of the overall software development plan. It documents all work performed as part of risk analysis and is used by the project manager. Once documented and the project begins, risk mitigation (problem avoidance) and monitoring (project tracking) steps commence.

Drawbacks of RMMM:

Risk Information Sheet (RIS)

Some software teams do not develop a formal RMMM document. Instead, each risk is documented individually using a Risk Information Sheet (RIS). In most cases, RIS is maintained using a database system so that creation, priority ordering, and searches can be accomplished easily.

Standard RIS Components
Identification Risk ID, Date, Probability (%), and Impact level (e.g., high).
Description A clear statement detailing the exact risk.
Refinement / Context Specific sub-conditions or contexts that make the risk likely.
Mitigation / Monitoring The actionable steps taken to prevent the risk and track it.
Management / Contingency / Trigger Calculated Risk Exposure (RE), backup plans, and the specific date/event that "triggers" the contingency plan.
Administrative Current Status, Originator of the report, and the person Assigned to handle it.

Quality Concepts

Quality is a complex concept that means different things to different people and is highly context-dependent. It can be understood through five different views:

1. Transcendental View

Quality is something that can be recognized through experience but is difficult to define precisely. It is viewed as something ideal and complex.

2. User View

Perceives quality as "fitness for purpose". Evaluates if the product satisfies user needs, expectations, and is fit for use.

3. Manufacturing View

Understands quality as "conformance to specifications". Any deviation from stated requirements reduces the quality of the product.

4. Product View

Quality is tied to the inherent characteristics of the product. A product's internal qualities (e.g., modularity) determine its external qualities (e.g., testability).

5. Value-Based View

Depends on the amount the customer is willing to pay. Represents a trade-off between cost and quality, merging excellence with worth.

Software Quality Management (SQM)

Software Quality Management guarantees that the required level of software is achieved to satisfy users. SQM includes three main activities:

Cost of Quality

The cost of quality is the total cost required to obtain quality in the product and conduct quality-related activities. It is divided into three categories:

McCall's Quality Model (1977)

This model classifies software requirements into 11 software quality factors, organized into three primary product quality categories:

Category Focus Quality Factors
1. Product Operation Requirements directly affecting the daily operation, performance, and usage of the software.
  • Correctness: Meets requirements spec.
  • Efficiency: Hardware resources/code needed.
  • Integrity: Controls unauthorized access.
  • Reliability: Performs without failure.
  • Usability: Effort required to learn/operate.
2. Product Revision Requirements for testing, maintenance, and future flexibility.
  • Maintainability: Effort to fix errors.
  • Flexibility: Effort to improve the program.
  • Testability: Effort to verify requirements.
3. Product Transition Allows the software to adapt to changing environments, platforms, or technologies.
  • Portability: Effort to transfer to a new platform.
  • Re-usability: Extent code can be reused elsewhere.
  • Interoperability: Effort to integrate with other systems.

Software Quality Assurance (SQA) & Metrics

Software Quality Assurance (SQA) is the process in which conformance to the requirements of the product is made. It is composed of a variety of tasks associated with two different constituencies:

Role of the SQA Group

The SQA group performs (or facilitates) the following key activities:

1. Prepares the SQA Plan: Identifies evaluations, audits, and standards that should be adopted.
2. Reviews Process Description: Ensures organizational policy and internal software standards are followed.
3. Audits Work Products: Verifies compliance with the defined software process.
4. Handles Deviations & Non-Compliance: Documents deviations, handles them according to procedure, and reports non-compliance to senior management.

The SQA Plan

The SQA Plan provides a road map for instituting software quality assurance, serving as a template for SQA activities. The IEEE standard recommends a structure that identifies:

Software Quality Metrics

To produce high-quality software, project managers evaluate the software using quality metrics to improve QA and control activities. These metrics include work product errors per function, errors found per review hour, and errors found in testing.

Defect Removal Efficiency (DRE)

Error tracking is a process of assessing the status of the software project. Any errors that remain uncovered and are found in later tasks are called defects. DRE represents the effectiveness of quality assurance activities.

DRE = E / (E + D)

Where E is the error (found before delivery) and D is the defect (found after delivery).

Parameters for Measuring Software Quality

Metric Description
1. Code Quality Measures both quantitative (lines of code, complexity, bugs rate) and qualitative (readability, clarity, maintainability) aspects to ensure bug-free code.
2. Reliability Checks if the software provides exact service at the right time in different conditions.
3. Performance Determines if the software fulfills user requirements by analyzing time and resource utilization.
4. Correctness Checks whether the system is working correctly without any error, giving the degree of service each function provides.
5. Integrity Measures how easy it is to integrate with other software and the control against unauthorized software (cyberattacks).
6. Usability Checks whether the program is user-friendly and if the end-user is happy using it.
7. Maintainability Includes time required to adapt to new features (Mean Time to Change), and performance in changing environments.
8. Security Assures there are no unauthorized changes or fear of cyber attacks when the software is in use.

Software Safety & Six Sigma

Software Safety is a QA activity where potential hazards (which may bring total system failure) are identified and assessed early so they can be eliminated or controlled. Steps include identifying hazards, using techniques like fault-tree analysis or Petri-net models to assign severity, specifying safety requirements, and indicating the software's role in managing undesirable events.

Six Sigma is a methodology for producing high-quality output where 99.99966% of all products are free from defects. It uses two primary methodologies:

Formal Technical Reviews (FTR)

A Formal Technical Review (FTR) is a software quality control activity performed by software engineers. It encompasses a class of reviews that includes walkthroughs, inspections, round-robin reviews, and other small-group technical assessments of software.

Objectives of FTR

  • To uncover errors in logic, function, and implementation.
  • To verify that the software meets specified requirements and is represented according to predefined standards.
  • To make the project more manageable.
  • To serve as a learning ground for junior developers and provide backup/continuity for the team.

Steps in a Formal Technical Review

Each FTR is conducted as a meeting and is considered successful only if it is properly planned, controlled, and attended.

  1. The Review Meeting: Focuses on a specific (and small) part of the overall software. It is constrained by three rules:
    • Involvement should be between 3 and 5 people.
    • Advance preparation should take no more than 2 hours of work per person.
    • The review meeting duration should be less than two hours.
  2. Decision Making: At the end of the review, attendees must sign off on one of three decisions:
    • Accept the product without any modification.
    • Reject the product due to serious errors (requires another review once corrected).
    • Accept provisionally (minor errors are encountered and must be corrected, but no additional review is required).
  3. Review Reporting and Record Keeping: The reviewer actively records all issues. A formal technical review summary report is prepared answering three questions: What was reviewed? Who reviewed it? What were the findings and conclusions?.

FTR Guidelines

Guidelines must be established in advance, distributed, agreed upon, and followed to keep the review on track:

Walkthroughs vs. Inspections

An FTR generally takes the form of either an informal walkthrough or a highly structured inspection.

Walkthrough

  • A method of conducting an informal group or individual review.
  • The author describes and explains the work product in an informal meeting to peers or supervisors to get feedback and check validity.
  • Considered a static method of quality assurance.

Inspection

  • A formal, rigorous, in-depth group review designed to identify problems as close to their origin as possible.
  • Involves a team of 3 to 8 members playing specific roles: moderator, author, reader, recorder, and inspector.
  • Follows a strict process: Planning → Overview → Preparation → Inspection Meeting → Rework → Follow-up.

Software Reliability

Software Reliability is defined in statistical terms as "the probability of failure-free operation of a computer program in a specified environment for a specified time". A failure in this context indicates non-conformance to the software requirements.

Measures of Reliability and Availability

Reliability is typically evaluated using specific time-based metrics:

Mean-Time-Between-Failure (MTBF)

A simple and common measure of reliability. It is equally sensitive to both the time it takes to fail and the time it takes to repair the system.

MTBF = MTTF + MTTR
  • MTTF: Mean-time-to-failure
  • MTTR: Mean-time-to-repair

Software Availability

The probability that a program is operating according to requirements at a given point in time. It is somewhat more sensitive to MTTR, making it an indirect measure of software maintainability.

Availability = [MTTF / (MTTF + MTTR)] * 100%

Software Configuration Management (SCM)

In Software Engineering, Software Configuration Management (SCM) is a set of activities carried out for identifying, organizing, and systematically controlling changes throughout the life cycle of a computer system. The primary goal is to increase productivity with minimal mistakes and ensure changes are properly implemented and reported.

Fundamental Sources of Change

  • New business or market conditions dictating changes in requirements or business rules.
  • New customer needs demanding modifications of data, functionality, or services.
  • Business growth, downsizing, or re-organization causing changes in priorities or team structure.
  • Budgetary or scheduling constraints causing a re-definition of the system.

Software Configuration Items (SCI)

A software configuration item is information created as part of the software engineering process. The elements that comprise all information produced are collectively called a software configuration. Examples of SCIs include:

SCIs must be separately named and identified as objects using an object-oriented approach. These objects are categorized as Basic Objects (a single unit of information, like a part of source code) and Aggregate Objects (a collection of basic/essential objects, like a Design Specification).

The SCM Process & Key Tasks

To prevent uncontrolled change from causing chaos in a well-running project, the SCM process involves several critical tasks:

1. Configuration Identification

Determines the scope of the software system. Every object has features that explicitly identify its name (e.g., naming a file login_v1.2.php instead of just login.php).

2. Baselines

A baseline is a formally accepted version of a software configuration item, fixed at a specific time. In simple words, it means "ready for release". It can only be changed through formal change control.

3. Configuration Status Accounting

Tracks each release and monitors the status of change requests. It keeps a complete record of all the changes made to the previous baseline to reach a new baseline.

4. Configuration Audits & Reviews

Ensures that what is built is what is delivered. Uses Formal Technical Reviews (FTR) for technical correctness and Software Configuration Audits (SCA) to verify compliance with configuration control standards.

Note: The remaining critical SCM tasks—Change Control and Version Control—are detailed in the next section.

Version Control & Change Control

Change Control Management

Change control is a procedural method which ensures quality and consistency when changes are made to a configuration object. While changes may enhance system capabilities, uncontrolled changes create a lot of chaos. Requests for change may arise due to detecting bugs, improving processes, adding features, business needs, or expanding the system's scope.

The Change Control Process

  1. Request & Evaluation: A change request is submitted and evaluated for technical merit, potential side effects, overall impact, and project cost.
  2. Change Control Authority (CCA): The evaluation is presented as a change report to the CCA (a person or group), who makes the final decision on status and priority.
  3. Engineering Change Order (ECO): An ECO is generated for each approved change, describing the exact order, constraints, and criteria for review and audit.
  4. Check-out: The object to be changed is "checked out" of the project database by the assigned software engineer.
  5. Implementation & SQA: The change is made, and appropriate Quality Assurance activities are applied.
  6. Check-in: The object is "checked in" to the database, and version control mechanisms create the next version of the software.

The "Checked-in" and "Checked-out" mechanism requires two critical elements:

Access Control

Gives the authority to the software engineer to access and modify the specific configuration object.

Synchronization Control

Allows parallel changes to be made by two different people without overwriting each other's work.

Version Control

A version is an instance of a system which is functionally distinct in some way from other system instances. Version Control combines procedures and tools to manage different versions of configuration objects created during the software process. It implements four major capabilities:

Change Sets & System Modeling

Version control systems establish a "Changes set"—a collection of all changes applied to a baseline configuration required to create a specific software version. It captures all changes to files, the reasons for changes, who made them, and when. This allows engineers to construct a version by simply specifying the named change set.

To accomplish this, a system modeling approach is applied, which contains:

Types of Software Maintenance

Software does not wear out or get tired, but it needs to be upgraded and enhanced to meet new user requirements. Software maintenance is the process of changing, modifying, and updating software after it has launched to keep up with customer needs, correct issues or bugs, and boost performance.

The Need for Software Maintenance

  • Correct faults and reduce side effects.
  • Accommodate changes in user requirements.
  • Improve the design and system efficiency.
  • Implement enhancements and optimize code.
  • Adapt to changes in hardware/software.
  • Migrate legacy software.

The Four Types of Software Maintenance

A given piece of software may undergo one or all of these maintenance types throughout its lifespan:

1. Corrective Maintenance

Commonly referred to as "bug fixing," this addresses errors and faults in the design, logic, and code.

  • Required when software fails to work as expected due to acute issues (faulty logic, incomplete tests).
  • Usually initiated by bug reports sent as feedback from users or customers.

2. Preventive Maintenance

The process of safeguarding the software for the future to prevent it from becoming obsolete.

  • Involves reengineering and reverse engineering to update old tech with new tech.
  • Prevents potential software alteration and forthcoming vulnerabilities.
  • Makes it easier to scale code and handle legacy systems.

3. Perfective Maintenance

Focuses on the evolution of requirements and features to enhance user experience.

  • Involves adding new features suggested by users and removing ineffective ones.
  • Improves computational efficiency, performance, reliability, and maintainability.
  • Keeps the software relevant as market and user needs change.

4. Adaptive Maintenance

Adapting the software to changing technologies, policies, and rules.

  • Responds to changes in operating systems, cloud storage, hardware, and frameworks.
  • Ensures compatibility with technical evolution and external strategic influences (e.g., changes in tax rates affecting calculation systems).

Re-Engineering

Software Re-Engineering is a software development process performed to improve the maintainability of a software system. It involves the examination and alteration of a system to reconstitute it in a new form, restructuring or rewriting part or all of a system without changing its functionality.

When to Decide to Reengineer

  • When system changes are confined to one subsystem that requires frequent maintenance.
  • When hardware or software support becomes obsolete.
  • When tools to support restructuring are readily available.

Advantages & Economics

Re-engineering positively affects software cost, quality, customer service, and delivery speed. The primary advantages over developing entirely new software are:

The Cost Benefit is calculated by evaluating the cost of maintenance (annual operation cost over the application's lifetime) against the cost of reengineering (predicted return on investment reduced by implementation costs and risks).

The Re-Engineering Lifecycle

A complete Software Re-Engineering lifecycle includes the following phases:

1. Product Management

Involves risk analysis, root cause analysis, business analysis, requirements elicitation, and competitive analysis.

2. Research and Innovation

Problem definition, data gathering, identifying solutions, developing innovative algorithms, and verification of quality.

3. Product Development

Technology selection, software/data/deployment architecture, prototyping, production code development, and comprehensive testing.

4. Product Delivery and Support

Hardware/platform selection, defining release procedures, installations, tracking support issues, and organizing maintenance releases.

5. Project Management

Brings efficiency and productivity utilizing modern QA, data quality assurance, and advanced risk management techniques.

Reverse Engineering

Reverse Engineering is the process of taking apart an object to see how it works in order to duplicate or enhance it. In software, it involves reversing a program's machine code back into the source code using programming language statements. It is essentially a reverse SDLC model: designers look at the code to deduce the design, and from the design, they deduce the system specifications, moving from lower abstraction levels to higher ones.

Program Restructuring

A related process is Program Restructuring, which involves re-arranging and re-constructing existing source code (and/or data) without changing its functionality. This enhances reliability and maintainability, and removes dependency on obsolete hardware platforms.

Reasons for Reverse Engineering

Software and hardware are reverse-engineered for a variety of strategic, technical, and business reasons:

System & Technical Recovery

  • Documentation: To improve shortcomings when original documentation is inadequate, lost, or never existed, and original designers are unavailable.
  • Obsolescence & Modernization: To recover lost knowledge required to update and migrate legacy software, or update obsolete manufacturing processes.
  • Bug Fixing: To fix or enhance legacy software (abandonware) no longer supported by its creators.
  • Interfacing: To establish how a system should negotiate and interface with another system.

Business & Competitive Analysis

  • Supplier Issues: When the original manufacturer no longer exists, stops producing the product, or demands inflated costs for replacement parts.
  • Espionage & Benchmarking: To learn about a competitor's research, analyze their product's good/bad features, and gain competitive benchmarking methods.
  • Security & Enhancement: To perform product security analysis, exploit weaknesses, strengthen defenses, design out bad features based on long-term usage, and explore new performance avenues.
  • Cheaper Alternatives: As a way to make new, compatible products that are cheaper than what is currently on the market.