CSC 395 – Software Engineering Lecture 34: Post-delivery Maintenance -or- What’s Worse than Being a Code Monkey?

Slides:



Advertisements
Similar presentations
Making the System Operational
Advertisements

Usage of the memoQ web service API by LSP – a case study
1 Software Processes Name:Wassim Jamal Salem ID: Name:m3taz El Dweak ID:
Learning and Teaching Conference 2012 Skill integration for students through in-class feedback and continuous assessment. Konstantinos Dimopoulos City.
Computer Engineering 203 R Smith Project Tracking 12/ Project Tracking Why do we want to track a project? What is the projects MOV? – Why is tracking.
Case Tools Trisha Cummings. Our Definition of CASE  CASE is the use of computer-based support in the software development process.  A CASE tool is a.
(Quickly) Testing the Tester via Path Coverage Alex Groce Oregon State University (formerly NASA/JPL Laboratory for Reliable Software)
1 Postdelivery Maintenance Xiaojun Qi. 2 Why Postdelivery Maintenance Is Necessary Corrective maintenance: To correct residual faults –Analysis, design,
Software Configuration Management
Slide 16.1 Copyright © 2004 by The McGraw-Hill Companies, Inc. All rights reserved. An Introduction to Object-Oriented Systems Analysis and Design with.
Computer Science 162 Section 1 CS162 Teaching Staff.
Computer Engineering 203 R Smith Agile Development 1/ Agile Methods What are Agile Methods? – Extreme Programming is the best known example – SCRUM.
Object-Oriented Analysis and Design Lecture 11 Maintenance (from Schach, “O-O and Classical Software Engineering”)
CS CS 5150 Software Engineering Lecture 20 Acceptance and Delivery.
Slide 16.1 © The McGraw-Hill Companies, 2002 Object-Oriented and Classical Software Engineering Fifth Edition, WCB/McGraw-Hill, 2002 Stephen R. Schach.
CSC 395 – Software Engineering Lecture 21: Overview of the Term & What Goes in a Data Dictionary.
Maintenance = Software Evolution Any changes after the client has accepted the product is considered maintenance. n Any Changes? n What might these be?
Software Quality Assurance
Programming. Software is made by programmers Computers need all kinds of software, from operating systems to applications People learn how to tell the.
VENDORS, CONSULTANTS AND USERS
SEG Software Maintenance1 Software Maintenance “The modification of a software product after delivery to correct faults, to improve performance or.
Ethics in Software Engineering
Lecture 18 Page 1 CS 111 Online Design Principles for Secure Systems Economy Complete mediation Open design Separation of privileges Least privilege Least.
1 Topics for this Lecture Software maintenance in general Source control systems (intro to svn)
CPSC 171 Introduction to Computer Science 3 Levels of Understanding Algorithms More Algorithm Discovery and Design.
Project Tracking. Questions... Why should we track a project that is underway? What aspects of a project need tracking?
Chapter 3: Software Maintenance Process Omar Meqdadi SE 3860 Lecture 3 Department of Computer Science and Software Engineering University of Wisconsin-Platteville.
Teaching material for a course in Software Project Management & Software Engineering – part II.
1 Software Development Configuration management. \ 2 Software Configuration  Items that comprise all information produced as part of the software development.
Lecture 12 Maintenance CSCI – 3350 Software Engineering II Fall 2014 Bill Pine.
Program Development Life Cycle (PDLC)
1 Project Information and Acceptance Testing Integrating Your Code Final Code Submission Acceptance Testing Other Advice and Reminders.
Design and Programming Chapter 7 Applied Software Project Management, Stellman & Greene See also:
CSC 395 – Software Engineering Lecture 12: Reusability –or– Programming was Bjarne Again.
Plan Design Analyze Develop Test Implement Maintain Systems Development Life Cycle MAT Dirtbikes.
LECTURE 38: REFACTORING CSC 395 – Software Engineering.
Slide 15.1 © The McGraw-Hill Companies, 2005 Object-Oriented and Classical Software Engineering Sixth Edition, WCB/McGraw-Hill, 2005 Stephen R. Schach.
Slide 16.1 Copyright © 2011 by The McGraw-Hill Companies, Inc. All rights reserved. Object-Oriented and Classical Software Engineering Eighth Edition,
 CS 5380 Software Engineering Chapter 9 Software Evolution.
Dr. Tom WayCSC Testing and Test-Driven Development CSC 4700 Software Engineering Based on Sommerville slides.
Computer Science and Engineering The Ohio State University  Widely used, especially in the opensource community, to track all changes to a project and.
Testing. 2 Overview Testing and debugging are important activities in software development. Techniques and tools are introduced. Material borrowed here.
Chapter 13: Regression Testing Omar Meqdadi SE 3860 Lecture 13 Department of Computer Science and Software Engineering University of Wisconsin-Platteville.
CSC 313 – Advanced Programming Topics. Open-Closed Principle Classes should be open for extension, but closed to modification  So, what does this mean?
Intermediate 2 Software Development Process. Software You should already know that any computer system is made up of hardware and software. The term hardware.
Lazy Contemplative Always Using Imagination Most Important Trait.
VENDORS, CONSULTANTS AND USERS. WHY CAN’T COMPANIES DEVELOP THEIR OWN ERP PACKAGES? To develop an ERP package is a complex & time consuming activity which.
11 Version Control Systems Mauro Jaskelioff (originally by Gail Hopkins)
Software Life Cycle The software life cycle is the sequence of activities that occur during software development and maintenance.
Software Engineering 2004 Jyrki Nummenmaa 1 BACKGROUND There is no way to generally test programs exhaustively (that is, going through all execution.
WATERFALL DEVELOPMENT MODEL. Waterfall model is LINEAR development lifecycle. This means each phase must be completed before moving onto the next!!! WHAT.
Software Engineering1  Verification: The software should conform to its specification  Validation: The software should do what the user really requires.
P51UST: Unix and SoftwareTools Unix and Software Tools (P51UST) Version Control Systems Ruibin Bai (Room AB326) Division of Computer Science The University.
CSC 480 Software Engineering Test Planning. Test Cases and Test Plans A test case is an explicit set of instructions designed to detect a particular class.
1 Object-Oriented and Classical Software Engineering Object-Oriented and Classical Software Engineering.
CS451 Software Maintenance Yugi Lee STB #555 (816) Note: This lecture was designed based on Stephen Schach’s.
Software Maintenance1 Software Maintenance.
1 Chapter 1- Introduction How Bugs affect our lives What is a Bug? What software testers do?
Software Configuration Management
8.4 Management of Postdelivery Maintenance
Object-Oriented and Classical Software Engineering Eighth Edition, WCB/McGraw-Hill, 2011 Stephen R. Schach 1.
VENDORS, CONSULTANTS AND USERS
Why Technology Startups Should Not Ignore Software Testing.
Peer Reviews Tips for the author.
Software testing strategies 2
The Object-Oriented Thought Process Chapter 05
Applied Software Project Management
that focus first on areas of risk.
Software Maintenance Part1 Introduction. Outlines What Is Software Maintenance Purposes of Maintenance Why We Need It Maintenance Difficilties Some Tips.
What is a System? A system is a collection of interrelated components that work together to perform a specific task.
Presentation transcript:

CSC 395 – Software Engineering Lecture 34: Post-delivery Maintenance -or- What’s Worse than Being a Code Monkey?

Postdelivery Maintenance Includes all changes after acceptance testing Hotfixes to remove bugs Patches to improve performance Modify documentation so “onomatopoeia” spelled correctly But software engineering about maintenance Finding & fixing all errors as soon as possible Making modifying or adding code clean & easy Do not want to mess this up post-delivery

Why Is This Step Needed? Corrective maintenance Find and fix residual faults Perfective maintenance Handle client requests to improve effectiveness Adaptive maintenance Adjust to changes in product’s environment

Real-World Maintenance At least 67% of the product cost in postdelivery maintenance Also a really nice source of income Most difficult part of any program Involves tasks from all previous workflows Requires understanding all previous decisions And yet… Maintenance often not well regarded Nobody enjoys handling customer complaints Often staffed by people below “code monkey”

Programming After Delivery Defect report handed to maintenance programmer Often provided by user who just wants it fixed Rarely well researched or clearly presented May not be anything wrong with program Problem not located between keyboard & CPU User manual may be wrong and not the code Often, however, code contains a fault

Programming After Delivery Maintenance programmer must be excellent debugger Faults could lie anywhere within the program Specification & design documents may be lost Once (if) source of fault is found, must fix it Easy given excellent documentation & notes Rarely occurs in the real-world, however If fixed, update all analysis & design documents Also record how bug found & fixed

Software Engineering the Fix After updating code, check that fix works Fix should not introduce regression fault Re-run the project on previous test cases… … which are unable to expose the bug Design new test case(s) to test for this bug Keep the test case as simple as possible Make sure test cases fail when run on old version Double-check that they pass on the new version Add new tests & document why they are needed

Adaptive & Perfective Maintenance Maintenance programmer goes through Requirements Specifications Design Implementation and integration Slight benefit over original project Uses existing product as starting point HUGE downside versus original project Same team (person) performs all of the workflows

Rewards of Maintenance Work

Defect Reports Mechanism to record defects and their fixes Includes tool for client to report defects Clients uninterested helping lousy $&$%# who cost them a days work… Must get enough info to recreate problem May let client see what progress is being made

Handling New Defect Report First step is to consult defect report file Check if someone else is working on fix See if error already fixed or dismissed Reply with any known workarounds Otherwise, try finding cause of defect Once found, record defect’s cause in report Also write down any workaround discovered Finally, document fix & all changes involved Mark defect as “closed” Send out alert of bug & fix to all effected Document other client requests

Authorizing Changes Changes for corrective maintenance Assign programmer to find & fix the defect Perform the regression testing Update documentation to reflect the change(s) Include comments in the code to reflect What was changed Why it was changed Who made & authorized the change When the change was made

Who Performs the Testing? Before delivery all testing done by SQA group Testing is difficult and time consuming Developers should never test code they wrote SQA group has people, training, & resources After delivery all testing done by SQA group Testing is difficult and time consuming Developers should never test code they wrote SQA group has people, training, & resources

Moving Target Problem Development teams dislike moving targets Much harder to code something in flux Makes documenting what is happening nearly impossible Creates a product that differs from the design Results in complex code with lots of special cases Problem exacerbated during maintenance Maintenance team rarely has stationary target Over time, maintenance becomes impossible Eventually requires total rewrite to move forward

Maintaining OO Software OO promotes maintenance in four ways: Uses independent units as program bases Conceptual independence (encapsulation) Physical independence (information hiding) Communication via message-passing (methods) Reality is not so kind, however…

Inheritance Hierarchy Size To discover what a class does, may need to scan over complete tree Not at all like the “independent units” theorized When inheritance tree is too deep, ask: Is the inheritance really being used? Can we regroup concepts to reduce tree? Could functionality be encapsulated into other classes? Can design be simplified by grouping ideas together?

Conclusion Theory & practice miles apart during maintenance Hardest workflow offering biggest challenges Also largest workflow in terms of time & money Worst place to leave: Unsupervised beginner Lesser-skilled computer professional Anyone else not at top of their game But maintenance used as dumping ground Location of people looking up to code monkeys

For Next Lecture Will not be here on Friday Schedule altered slightly to reflect this fact Most of department’s faculty also gone So no lecture on Friday Will end up losing day from ethics section Use the extra time working in your groups Be prepare to defend ethics of your actions