0% found this document useful (0 votes)
2 views23 pages

Maintenance 1 PreClass

The document outlines the maintenance lifecycle stages of software, emphasizing the importance of modifying existing code while maintaining its integrity. It details various maintenance categories, tasks, and processes such as defect triage and impact analysis, as well as refactoring techniques to improve code structure without altering functionality. Additionally, it highlights the tools and systems used for effective maintenance management.

Uploaded by

Luke Butler
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
2 views23 pages

Maintenance 1 PreClass

The document outlines the maintenance lifecycle stages of software, emphasizing the importance of modifying existing code while maintaining its integrity. It details various maintenance categories, tasks, and processes such as defect triage and impact analysis, as well as refactoring techniques to improve code structure without altering functionality. Additionally, it highlights the tools and systems used for effective maintenance management.

Uploaded by

Luke Butler
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 23

Maintenance

Utilization, Support, and Updates


Common Lifecycle Stages (based on Figure 2.1 from INCOSE Handbook)
Concept Upgrade
Identify needs and Concept
Concept
research solutions

Development Upgrade
Develop requirements and Development
Development
baselines, build software

Production Production
Upgrade
Test and Deploy Software Production

Utilization Utilization
Software is deployed and used

Support Support
Keep the software running

Retirement Retirement
Remove the software from operation
Goal of Maintenance
Modify existing code without compromising its integrity
General Steps/Activities

Preparation • Includes staffing, training, acquiring tools and environments, and establishing
procedures

Transition • Organized turnover of the system from development to maintenance

Operation • Activities to run the software and provide user assistance including monitoring
performance, logging defect reports, and managing release versions

Modification • Analyzing enhancement requests and problem reports, conducting analysis,


designing and implementing changes and regression testing

Migration • Retiring, replacing, or porting the system due to obsolescence, reengineering,


or a new platform
Categories of Corrective
Software Preventative
Maintenance
Adaptive

Additive

Perfective

Emergency
Corrective
• Reactive modifications and repairs to correct discovered
problems (after delivery)

• Example: repairing a bug that is encountered by multiple users


Preventative
• Modification of software to correct latent faults BEFORE they
cause failures

• Example: most Y2K patches


Adaptive
• Modification to keep the software product usable in an evolving
environment

• Example: changes required to maintain compatibility when the


operating system is updated
Additive
• Modification to add functionality (features)

• Example: Adding a new set of levels to a video game


Perfective
• Modification to improve software performance, maintainability,
usability, or other software attributes

• Example: improvement of program documentation


Emergency
• Unscheduled modification performed to temporarily keep a
system operational

• Sometimes classified as a special subclass of other categories,


but typically requires its own processes (and sometimes
specialized personnel or special resources)

• Example: Fixing CrowdStrike Update Bug last July


Questions so far?
Maintenance Tasks
• Adding new features (bridges maintenance and development)
• Finding and correcting latent defects
• Triaging and responding to user complaints
• Prevent, Detect, & Respond to catastrophic failures
• Prevent, Detect, & Respond to security events
• Refactoring (design and implementation)
• Adapting to changes in interfaces
• Remediate technical obsolescence of system elements
• Improving maintainability
Defect Triage
• Useful Reference: https://www.chromium.org/for-testers/bug-
reporting-guidelines/triage-best-practices/

• Key tools:
• Ticket & Prioritization Systems (e.g. Jira, Github Issues)
• Test Environment that is as similar to production as possible

• Key questions of triage:


• How important is it to us? Do we want to do it at all?
• When do we want it done?
• Who should own it?

• Often underestimated: Importance of communicating with end-user


Impact
Analysis -
Overview
Impact Analysis – What happens
• Processes for impact analysis should be defined in advance, including
• Who participates
• What are the minimum items (requirements, architecture, code, tests, etc.) to be reviewed
• What criteria should be analyzed

• May Include:
• Architectural review, e.g. identifying which components interact with the defective or
changed component
• Code Review: looking for defects or unexpected alterations
• Exploratory Testing and/or A/B Testing

• Examples Outcomes:
• Description of issue, solution, and/or other change
• Estimated cost and time to complete change and/or fix
• List of Trade-offs made, and the pros and cons of each
Refactoring The process of
changing the structure
of code without
changing its
functionality
Refactoring Types – Encapsulate and Generalize
• Encapsulate Field – if using a language that relies on getters and
setters, ensure the field has getters and setters

• Generalize type – create more general types to improve sharing, e.g.


session types
Refactoring Types - Using States/Strategies
and Polymorphism
• Replace Type with a State or Strategy
• E.g. instead of “Admin” being an attribute of “User”, create superclasses
and subclasses for separate “Employee” and “Admin”

• Replace Conditional with Polymorphism


• Polymorphism – concept primarily from OOP in which objects can be
replaced with instances of the parent class

• Example: Once “Admin” is no longer a field of the “User” class, we should


still use “User” where possible instead of having separate conditionals for
each type
Refactoring Types – Breaking Code into
Manageable, Logical Pieces
• Componentization
• General process for breaking code down into semantic units (functions, classes, etc.)

• Extract Class
• Create a new class (or subclass) using some of the code from an existing class

• Extract Method/Function
• Create a new method or function using part of an existing method or function
Refactoring Types – improving names and
location of code
• Rename method / field / class / etc.
• Rename a method, field, or other entity so that the name better reflects
the purpose

• Move method / field


• Move a method or field to a more appropriate class

• Pull Up/ Push Down


• In object-oriented programming, move a method or field up to a
superclass or down to a subclass
Refactoring Tool Support
• Before “GenAI” was a thing, tools would provide automatic
refactoring suggestions based on patterns
• Eclipse (built-in for Java)
• PyDev (Eclipse-based tool)
• IntelliJ tools
• IDEA (Java)
• PyCharm (Python)
• Visual Studio
Maintenance Tools (Generally)
• Change Management Systems
• Github Pull Requests + Issue Tracker, Jira

• Static Analysis Tools


• Maintain quality, ensure coding standards are followed

• Defect logging, tracking, and management systems

You might also like