Identifying and Managing Technical Debt

85
Identifying and Managing Technical Debt Dr. Nico Zazworka Fraunhofer Center for Experimental Software Engineering Dr. Carolyn Seaman University of Maryland Baltimore County http://www.technicaldebt.umbc.edu/

description

The technical debt metaphor is useful in capturing the long-term impacts of tradeoffs taken during software maintenance between productivity (getting something done sooner) and maintainability (degradation of the code's quality over time). This webinar on Technical Debt will present techniques and insights that help software engineers to identify and track technical debt in their projects. We will outline how business and product quality goals should affect the choice of approaches (and combinations of approaches) for managing technical debt. More specifically, we will discuss a set of automated approaches based on static code analysis that are likely to spot problems in source code that have real impact on productivity and defect proneness. Based on previous empirical studies, we will give further advice on which types of debt can be found by these tools, and which types are not yet detectable.

Transcript of Identifying and Managing Technical Debt

Page 1: Identifying and Managing Technical Debt

Identifying and Managing Technical Debt

Dr. Nico ZazworkaFraunhofer Center for Experimental Software Engineering

Dr. Carolyn SeamanUniversity of Maryland Baltimore County

http://www.technicaldebt.umbc.edu/

Page 2: Identifying and Managing Technical Debt

Outline

• Introduction to the Technical Debt metaphor• Definition and examples of everyday debt• Benefits of explicitly managing Technical Debt

• Technical Debt Framework• Technical Debt properties: principal vs. interest• Recording and communicating Technical Debt

• Identifying important Technical Debt• Design debt: Code smells, Grime, ASA issues, Modularity

violations• Other types of Technical Debt

• Management strategies to pay down Technical Debt• Outlook

2

Page 3: Identifying and Managing Technical Debt

Software Maintenance

• Large inventory of operational systems that need to be maintained• Fixed• Enhanced• Adapted

• Such systems need constant modification in order to remain useful

• Most such systems are too expensive to replace, so considerable resources go into their maintenance

• However, maintenance, even more than development, is characterized by tight budget and time constraints

3

Page 4: Identifying and Managing Technical Debt

Technical Debt

• Technical Debt is the gap between:

4

Page 5: Identifying and Managing Technical Debt

Technical Debt

• Technical Debt is the gap between:

• Making a change perfectly• Preserving architectural design• Employing good programming practices

and standards• Updating the documentation• Testing thoroughly

5

Page 6: Identifying and Managing Technical Debt

Technical Debt

• Technical Debt is the gap between:

• And making the change work• As quickly as possible• With as few resources as possible

6

Page 7: Identifying and Managing Technical Debt

Everyday Indicators of Technical Debt

7

Page 8: Identifying and Managing Technical Debt

Everyday Indicators of Technical Debt

“Don’t worry about the documentation for now.”

8

Page 9: Identifying and Managing Technical Debt

Everyday Indicators of Technical Debt

“The only one who can change this code is Carl”

“Don’t worry about the documentation for now.”

9

Page 10: Identifying and Managing Technical Debt

Everyday Indicators of Technical Debt

“The only one who can change this code is Carl”

“It’s ok for now but we’ll refactor it later!”

“Don’t worry about the documentation for now.”

10

Page 11: Identifying and Managing Technical Debt

Everyday Indicators of Technical Debt

“ToDo/FixMe: this should be fixed before release”

“The only one who can change this code is Carl”

“It’s ok for now but we’ll refactor it later!”

“Don’t worry about the documentation for now.”

11

Page 12: Identifying and Managing Technical Debt

Everyday Indicators of Technical Debt

“ToDo/FixMe: this should be fixed before release”

“The only one who can change this code is Carl”

“It’s ok for now but we’ll refactor it later!”

“Let’s just copy and paste this part.”

“Don’t worry about the documentation for now.”

12

Page 13: Identifying and Managing Technical Debt

Everyday Indicators of Technical Debt

“ToDo/FixMe: this should be fixed before release”

“The only one who can change this code is Carl”

“Does anybody know where we store the database access password?”

“It’s ok for now but we’ll refactor it later!”

“Let’s just copy and paste this part.”

“Don’t worry about the documentation for now.”

13

Page 14: Identifying and Managing Technical Debt

Everyday Indicators of Technical Debt

“ToDo/FixMe: this should be fixed before release”

“I know if I touch that code everything else breaks!”

“The only one who can change this code is Carl”

“Does anybody know where we store the database access password?”

“It’s ok for now but we’ll refactor it later!”

“Let’s just copy and paste this part.”

“Don’t worry about the documentation for now.”

14

Page 15: Identifying and Managing Technical Debt

Everyday Indicators of Technical Debt

“ToDo/FixMe: this should be fixed before release”

“I know if I touch that code everything else breaks!”

“The only one who can change this code is Carl”

“Does anybody know where we store the database access password?”

“It’s ok for now but we’ll refactor it later!”

“Let’s just copy and paste this part.”

“Let’s finish the testing in the next release.”

“Don’t worry about the documentation for now.”

15

Page 16: Identifying and Managing Technical Debt

Everyday Indicators of Technical Debt

“ToDo/FixMe: this should be fixed before release”

“I know if I touch that code everything else breaks!”

“The only one who can change this code is Carl”

“Does anybody know where we store the database access password?”

“It’s ok for now but we’ll refactor it later!”

“The release is coming up, so just get it done!”

“Let’s just copy and paste this part.”

“Let’s finish the testing in the next release.”

“Don’t worry about the documentation for now.”

16

Page 17: Identifying and Managing Technical Debt

Technical Debt Metaphor

A metaphor, NOT a theory or a scientific concept

17

Page 18: Identifying and Managing Technical Debt

Technical Debt Metaphor• Definition

• Incomplete, immature, or inadequate artifact in the software development lifecycle (Cunningham, 1992)

• Aspects of the software we know are wrong, but don’t have time to fix now

• Tasks that were left undone, but that run a risk of causing future problems if not completed

18

Page 19: Identifying and Managing Technical Debt

Technical Debt Metaphor• Benefits

• Higher software productivity in the current release• Lower cost of current release

19

Page 20: Identifying and Managing Technical Debt

Technical Debt Metaphor• Benefits

• Higher software productivity in the current release• Lower cost of current release

• Costs• “Interest” – increased maintenance costs• Risk that the debt gets out of control

20

Page 21: Identifying and Managing Technical Debt

Technical Debt Metaphor• Benefits

• Higher software productivity in the current release• Lower cost of current release

• Costs• “Interest” – increased maintenance costs• Risk that the debt gets out of control

• Little scientific research, but• Discussions in blogs, forums, etc.• Strongly related to Risk Management

21

Page 22: Identifying and Managing Technical Debt

How Technical Debt is Managed (implicitly)

22DavidDeveloper

MiriamManager

Wow, this module is really bad. It’s going to be very

hard to make any changes to it.

Page 23: Identifying and Managing Technical Debt

How Technical Debt is Managed (implicitly)

23DavidDeveloper

MiriamManager

Hey, Miriam, I think we should take some time to

refactor this module in the next release.

Page 24: Identifying and Managing Technical Debt

How Technical Debt is Managed (implicitly)

24DavidDeveloper

MiriamManager

Why would we do that? That would take a lot of

time and effort.

Page 25: Identifying and Managing Technical Debt

How Technical Debt is Managed (implicitly)

25DavidDeveloper

MiriamManager

But if we don’t refactor it soon, I have a gut feeling it’s

going to cause major problems later.

Page 26: Identifying and Managing Technical Debt

How Technical Debt is Managed (implicitly)

26DavidDeveloper

MiriamManager

David is pretty smart, and he’s

usually right about these kinds

of things.

Page 27: Identifying and Managing Technical Debt

How Technical Debt is Managed (implicitly)

27DavidDeveloper

MiriamManagerOK, I’ll put in the plan for

the next release.

Page 28: Identifying and Managing Technical Debt

How Technical Debt is Managed (implicitly)

28

Another Example

Page 29: Identifying and Managing Technical Debt

How Technical Debt is Managed (implicitly)

29DavidDeveloper

MiriamManager

Wow, this module is really bad. It’s going to be very

hard to make any changes to it.

Hey, Miriam, I think we should take some time to

refactor this module in the next release.

Page 30: Identifying and Managing Technical Debt

How Technical Debt is Managed (implicitly)

30DavidDeveloper

MiriamManager

Those developers always try to make their code perfect. I

need some evidence that this is

worth it.

Page 31: Identifying and Managing Technical Debt

How Technical Debt is Managed (implicitly)

31DavidDeveloper

MiriamManager

What is the ROI of this refactoring?

Page 32: Identifying and Managing Technical Debt

How Technical Debt is Managed (implicitly)

32DavidDeveloper

MiriamManager

RO…WHAT?!?

Page 33: Identifying and Managing Technical Debt

How Technical Debt is Managed (implicitly)

33DavidDeveloper

MiriamManagerLet’s stick with

implementing important features.

Page 34: Identifying and Managing Technical Debt

Potential Payoffs of Explicitly Managing TD• Lowered maintenance costs

• Avoiding “interest payments”• Avoiding unnecessary “perfecting” work

• Increased maintenance productivity• Better prioritization of tasks in each release• Maintenance always performed on code that is easier to work

with

• Avoiding surprises• Fewer components that fail without warning• Fewer unexpectedly large over-budget maintenance tasks• Better estimation of the costs and risks of postponing

maintenance tasks 34

Page 35: Identifying and Managing Technical Debt

A Framework for Managing Technical Debt

35

TD List

TD Identification

TD Estimation

Decision Making

Page 36: Identifying and Managing Technical Debt

Technical Debt ListA list of TD Items

Tasks that were left undone, but that run a risk of causing future problems if not completed.

Examples: Components/modules/classes that need refactoring, testing that needs to be done, etc.

Content of TD ItemDescription – what, where, why?Principal – how much will it cost to do the work?Interest – what happens if we don’t do this work?

Amount – amount of extra work if this causes problems later Probability – probability that this will cause future problems

TD List Update PolicyThe TD list should be reviewed after each release, when items should

be added as well as removed.

36

Page 37: Identifying and Managing Technical Debt

TD Item ExampleID 37

Date 3/31/2008 (Release 3.2)

Responsible Joe Developer

Type Design

Location Method calculateStateTax in Module TaxCalc

Description In the last release, Joe added method calculateStateTax quickly and method is overly complex and not documented.

Estimated principal Medium (medium level of effort to refactor and clean code)

Estimated interest amount: High (it will be costly to make changes to the method in future, especially by other developers)

Estimated interest probability High (it is very likely that this methods needs to be changed with each future release)

37

Page 38: Identifying and Managing Technical Debt

Some definitions• Principal

• The cost of eliminating a Technical Debt instance RIGHT NOW• Interest

• The cost, over some period of time, of NOT eliminating a Technical Debt instance

• Interest is where the risk lies• Interest probability

• The probability, over a given period of time, that a TD instance will increase the cost of some future activity

• Interest amount• Assuming that a TD instance does in fact increase the cost of some

activity, the amount of the increase• NOTE: Unlike financial debt, Technical Debt interest will change

over time38

Page 39: Identifying and Managing Technical Debt

39

Be careful when using approaches that quantify

principal only

Page 40: Identifying and Managing Technical Debt

40

Be careful when using approaches that quantify

principal only

A statement such as:

“Your project has $1,000,000 Technical Debt.”

is only one side of the coin.

Page 41: Identifying and Managing Technical Debt

So….

The goal of managing TD is…

41

Eliminating all Technical Debt

Page 42: Identifying and Managing Technical Debt

So….

The goal of managing TD is…

42

Eliminating all Technical DebtNOT

Page 43: Identifying and Managing Technical Debt

So….

The goal of managing TD is…

43

To determine when

• The amount of interest avoided justifies

• The cost to pay off the principal

Page 44: Identifying and Managing Technical Debt

Example Scenario• Technical Debt: One of your code modules is in need of

refactoring• TD Principal: Refactoring the entire module will cost $10,000

• From past data you have established that:• This module is modified in 75% of all releases• The cost of changing this module has gone up 10% each time it’s

been changed over its last 5 changes:• 5 changes ago cost $10,000• Last change cost almost $15,000

44

Page 45: Identifying and Managing Technical Debt

Example Scenario (cont.)• Technical Debt Computation• For the next release

• Principal for paying off debt: refactoring the module costs $10,000• Interest:

• Cost of the next change to the module• If refactored first: $10,000• If not refactored first: $16,000• Extra cost if not refactored: about $6000

• Interest avoided = interest amount * interest probability• $6,000 * .75 = $4500

45Decision:

IgnoreInterest$4500>

Principal$10,000

Page 46: Identifying and Managing Technical Debt

Identifying Important Technical Debt

46

1 Person

person = a

Map.get("b

ob");

2 if (per

son != nul

l) {

3 per

son.update

AccessTime

();

4 }

5 String nam

e = person

.getName()

;

6 //TODO: de

lete this

7

8 System.out

.println(“

Debug”);

9

10 //Document

ation shou

ld be upda

ted

11 for(int i=

0; I < cou

nt ; i++){

12 person

.getName()

;

13 person

.saveToDB(

);

14 }

15 return nam

e;

Page 47: Identifying and Managing Technical Debt

Technical Debt Framework

47

TD List

TD Identification

TD Estimation

Decision Making

TD List

TD Identification

TD Estimation

Decision Making

Manual

Computer-Assisted

Page 48: Identifying and Managing Technical Debt

What are your goals for managing Technical Debt?• What are your pain points?

• Avoiding defects• Better predictability• Higher maintenance productivity• Avoiding surprises• Making developers happy• Security, Portability, Efficiency ?

• Motivations are driven by:• Business domain and market• Past mistakes

48

Page 49: Identifying and Managing Technical Debt

Types of Technical Debt• Design/code debt – can be identified by examining source

code and/or related documentation• Happier developers and higher productivity• Fewer defects

• Testing debt – planned tests that were not run, or known deficiencies in the test suite (e.g. low code coverage)• Fewer surprises and better predictability

• Documentation debt – missing or inadequate documentation of any type• Higher productivity

• Defect debt – known defects that are not fixed• Happier developers and higher productivity 49

Page 50: Identifying and Managing Technical Debt

The Technical Debt Landscape(under construction)

50

Reliability

Maintain- ability

Portability

Security

Defect Debt

Design Debt

Documentation Debt

Testing Debt

Code Smells

ASA Tools

Modularity Violations

Manual Inspection

Pain Points Types of Debt Tools

Understanding your pain points will help to focus on the right types of Technical Debt.

Page 51: Identifying and Managing Technical Debt

Identifying Design Debt

• ASA issues(line level)

• Code smells(method and class level)

• Grime(class interaction level)

• Modularity violations(architecture level)

51

Page 52: Identifying and Managing Technical Debt

ASA Issues• ASA: Automatic Static (Code) Analysis

• Identify problems on line level:

• Inexpensive• Point to the problem, suggest solution• Gaining significant traction in practice:

• Used by Google to identify problems• Google Fixit Event

52

1 Person person = aMap.get("bob");2 if (person != null) {3 person.updateAccessTime();4 }5 String name = person.getName();

Potential Null Pointer Exception

Links: http://findbugs.sourceforge.net/

Page 53: Identifying and Managing Technical Debt

ASA Issue Types

53

Many (thousands) issues identified:Many are false positives:• False warnings• Violation, but interest is

negligible

Page 54: Identifying and Managing Technical Debt

ASA Issue Types

54

Many (thousands) issues identified:Many are false positives:• False warnings• Violation, but interest is

negligible

Configure tools towards your pain points.

Start with the Technical Debt that is linked to the high priority goals.

Page 55: Identifying and Managing Technical Debt

ASA Tools: Our Recommendation• Turn OFF all issue types in the ASA tool.• Activate types “interest-driven”:

• Decide what your quality and business goals are.

• Prioritize them based on:• Past experience (user stories)• Measurable impact

• Research Results:• Multithread correctness and Correctness

issues are located in classes with higher defect-proneness

55

Project Quality

Business Goals

Page 56: Identifying and Managing Technical Debt

Code Smells

• Methods and classes that violate the principles of good object oriented design, e.g.:• Clearly defined

single responsibility• Encapsulation• Information hiding• Few and clear interfaces• Proper use of inheritance

• Code Smells point to potential problems:• require investigation and final judgment by

developer• Set of 20 more or less formally

defined Code Smells available

56

Page 57: Identifying and Managing Technical Debt

Code Smells Explained• Automatic approaches have been proposed and implemented

to automatically detect Code Smells in object oriented code• Based on Radu Marinescu’s Detection Strategies• For Java: CodeVizard and Marple• For C#: ReSharper, CodeRush, Gendarme, FxCop

• Two code smells important for TD: • god class• dispersed coupling

57

Further reading: http://www.codevizard.com

Page 58: Identifying and Managing Technical Debt

Code Smells: Our Recommendation

• If avoiding defects and increasing maintenance productivity are issues of concern, then…• Start by detecting and examining God Classes and Dispersed

Coupling code smells• Prioritize modules with these smells for refactoring efforts

• Research focus: God Classes (concept is easy to understand)• God Classes are 5-7 times more change prone• God Classes are 4-17 times more defect prone

• Baseline from our experience: most systems have 2%-8% God Classes

• Dispersed Coupling code smell points to defect and maintenance prone classes

58

Page 59: Identifying and Managing Technical Debt

Design Patterns and Grime

• Design patterns promise code to be more maintainable and less defect prone• Describe how multiple classes work together

• Design patterns can decay over time as systems evolve• Grime: accumulation of non-pattern code in classes

following a design pattern• Rot: changes that break the integrity of a design pattern

• Early results show that grime has a noticeable effect on testability• As grime builds up, more test cases break• In turn affects productivity during the testing phase• Leads to testing debt 59

Page 60: Identifying and Managing Technical Debt

Modularity Violations• Organization of software systems: inter-dependent modules

• Proper architecture leading to a clear structure of relationships promotes reuse of modules and smaller ripple effects.

• Dependencies indicate how modules should change together:• Example:

If the Model is changed, Controller Aand Controller B might require changes.

• Modularity Violations: recurringchanges on classes within modules that are not depending on each other:• Example: Classes in View 1 and View 3

changing together 60

Model

Controller A

View 1

View 2

Controller B

View 3

Page 61: Identifying and Managing Technical Debt

Modularity Violations Research

• Studies have shown that modularity violations are an excellent indicator of defect prone classes and change prone classes.

• Tool: CLIO (Drexel University)• When applied, with other TD detection approaches, to an

open source system, the results for predicting defects were:

• Also, modularity violations were highly correlated with modules that developers later chose to refactor 61

Further reading: http://www.slideshare.net/miryung/icse-2011-research-paper-on-modularity-violations

Page 62: Identifying and Managing Technical Debt

Technical Debt Framework

62

TD List

TD Identification

TD Estimation

Decision Making

TD List

TD Identification

TD Estimation

Decision Making

Design Debt

Other Types of Debt

Testing, Defect, Doc Debt

Page 63: Identifying and Managing Technical Debt

Testing Debt• Tests that were planned but:

• not implemented• not executed• or they got lost

• Inadequate tests• Test cases not updated for

new/changed functionality• Low coverage

• Can be detected by:• Comparing test results with test

plans• Code coverage tools• Comparing requirements

changes with test suite changes63

“There's no tests for buttons other than <input type="submit"> yet. I'm pretty sure also <input type="button"> works if other <input>s work, but <button disabled="disabled">Text</button> should be tested separately.”http://code.google.com/p/robotframework-seleniumlibrary/issues/detail?id=163

“While updating the package of html5lib to 0.90 in Debian I realized that the unit tests are gone. To ensure the keep the package in a good working shape while it transitions trough new Python versions and new versions of the modules it depends on, it would be *very* appreciated if the unit tests would be shipped in the zipfile again.”http://code.google.com/p/html5lib/issues/detail?id=134&colspec=ID%20Type%20Status%20Priority%20Milestone%20Owner%20Summary%20Port

Page 64: Identifying and Managing Technical Debt

Documentation Debt• Documentation that is not

kept up-to-date, e.g.• Installations and run

instructions• Architecture

documentation• Requirements and use case

documentation• API documentation

• Can be detected by:• Comparing code changes

with documentation changes

• Comment density metrics64

“Except there is no such class or field in the SDK. It is outdated documentation that definitely needs to be updated.”http://code.google.com/p/android/issues/detail?id=8483

“There is not much documentation available regarding the formatof .xclangspec files. As a starting point, see for instance theoutdated documentation at:http://maxao.free.fr/xcode-plugin-interface/specifications.html”http://code.google.com/p/go/source/browse/misc/xcode/go.xclangspec?r=30b0c392132645259e053a2ba8904383a55bab03

“This was apparently the old behavior and it's changed now, but the documentation doesn't so say.”http://code.google.com/p/redis/issues/detail?id=514

Page 65: Identifying and Managing Technical Debt

Defect Debt• Known defects that are not

yet fixed• Low priority defects• Low severity defects• Manifest rarely• Workarounds present

• Can be detected by:• Examining defect

repositories• Test results

65

“There are a couple of latent bugs in the linux TLS implementation. I'm filing a single issue because they are so small and easy to fix.”http://code.google.com/p/dynamorio/issues/detail?id=358

Page 66: Identifying and Managing Technical Debt

Bottom line• Different techniques detect different instances and types of

technical debt• No one approach is sufficient by itself• No one approach is the right one for everyone

• The solution is a strategy based on• Business and development goals• Most painful types of debt• A combination of approaches that focus on the most pain

• Don’t try to automate it all• Some kinds of technical debt can only be detected by humans• Most kinds of technical debt can only be interpreted by humans• No substitute for talking about it 66

Page 67: Identifying and Managing Technical Debt

Technical Debt in Decision Making

67

Page 68: Identifying and Managing Technical Debt

Technical Debt Framework

68

TD List

TD Identification

TD Estimation

Decision Making

Page 69: Identifying and Managing Technical Debt

TD AttributesThree attributes of a TD item

Principal Interest probability Interest amount

Start with a rough estimate of the attribute valuesHigh, Medium, Low

Defer more precise estimation until data is availableFault detection ability and defect density => testing debtCost of fixing a defect pre-release & post-release => defect debtTime and effort for updating documentation => documentation debt

69

Page 70: Identifying and Managing Technical Debt

TD Attribute Estimation• Principal => historical effort data• Interest Probability => historical usage, change, and defect data

• Example questions• How likely is it that a defect will occur in the untested part?• How likely is it that code containing a known error will be exercised?

• A time element • Interest amount

• Assume that the item has an effect on future work• Example questions

• How much more it will cost to deal with defects later in the system’s lifetime than in testing?

• These are all hard to estimate with any certainty• Historical data will help• Any estimation is better than the current method – “gut feeling”

70

Page 71: Identifying and Managing Technical Debt

Decision Making Scenario• Question

• When and which technical debt items should be paid? • Example

• Significant work is planned for component X in the next release, should we pay down some debt on component X at the same time?

• Assumptions• There is an up-to-date TD list that is sorted by component and has high,

medium, and low values for principal and interest estimates for each item.

• Process

71Select Re-evaluate Estimate Compare Add up

Page 72: Identifying and Managing Technical Debt

Other Decision Models• The proposed TD management strategy is based on a simple

cost/benefit analysis• But TD occurs in complicated development and business

scenarios• TD items are inter-related• Business factors are important, too• Prediction is hard

• Other strategies for making decisions might be appropriate• Portfolio model• Options• AHP

72

Page 73: Identifying and Managing Technical Debt

So where are we?

73

Page 74: Identifying and Managing Technical Debt

Technical Debt Framework

74

TD List

TD Identification

TD Estimation

Decision Making

Page 75: Identifying and Managing Technical Debt

75

“Avoid being a perfectionist in a world of finite resources.”

Instead…

Manage Technical Debt to make the imperfections

• documented• explicit• not so scary

Forrest Shull

Page 76: Identifying and Managing Technical Debt

Summary• Technical Debt is a metaphor that describes a very real

phenomenon• Provides a way to talk and reason about the difficulties of

software maintenance• Technical Debt comes in a variety of forms, all of which can be

detected in different ways• Technical Debt can be documented and tracked in a TD list• Management of Technical Debt must involve consideration of

interest, not just principal• The types of Technical Debt that are relevant for a particular

situation depends on past experience, organizational culture, and business environment.

• While the research is still early, it does provide some guidance as to Technical Debt identification strategy.

76

Page 77: Identifying and Managing Technical Debt

What’s next…• Identify your pain points• Decide what types of Technical Debt are relevant for you• Choose a small set of tools and indicators• Start a TD list – can use our template - probably some

developers already have one• Track the history of the TD items revealed by the tools to see if

they are detecting “real” debt• Refine release planning process to incorporate TD• Track your success in reducing the “pain”• Add new detection strategies to fill the gaps• Call us if you need help• Tell us how it’s going!

77

Page 79: Identifying and Managing Technical Debt

Acknowledgments• UMBC

• Yuepu Guo, Ph.D. candidate• Rodrigo Spínola, Postdoctoral Researcher

• Fraunhofer Center• Forrest Shull, Division Director• Many past, current, and future interns

• Other academic collaborators• Yuanfang Cai, Drexel University• Clemente Izurieta, Montana State University• Antonio Vetró, Ph.D. student, Politecnico Di Torino, Italy• Sunny Wong, now at Siemens Healthcare

79

Page 80: Identifying and Managing Technical Debt

Acknowledgments (cont.)• Industrial collaborators

• NSF Grant #0916699: Measuring and Monitoring Technical Debt

80

Page 81: Identifying and Managing Technical Debt

ReferencesAyewah, N. et al. (2007). Evaluating static analysis defect warnings on production software. In Proceedings of

the 7th ACM SIGPLAN-SIGSOFT workshop on Program analysis for software tools and engineering - PASTE ’07. New York, New York, USA: ACM Press, pp. 1-8. Available at: http://dl.acm.org/citation.cfm?id=1251535.1251536 .

Baldwin C. and Clark K. (2000). Design Rules, Vol. 1: The Power of Modularity. MIT Press.

Brown N., Cai Y., Guo Y., Kazman R., Kim M., Kruchten P., Lim E., MacCormack A., Nord R., Ozkaya I., Sangwan R., Seaman C., Sullivan K., and Zazworka N. (2010). Managing technical debt in software-reliant systems. FoSER 2010: 47-52.

Cunningham W. (1992). The WyCash Portfolio Management System. Addendum to the proceedings on Object-oriented programming systems, languages, and applications, pp. 29-30, 1992.

Fowler M. (2003). Technical Debt. Available: http://www.martinfowler.com/bliki/TechnicalDebt.html

Guéhéneuc Y.G., and Albin-Amiot H. (2001). Using Design Patterns and Constraints to Automate the Detection and Correction of Inter-Class Design Defects. Proc 39th International Conference and Exhibition Technology of Object Oriented Languages and Systems, pp. 296-305, 2001.

Guo Y., Seaman C., Zazworka N., and Shull F. (2010). Domain-specific tailoring of code smells: an empirical study. International Conference on Software Engineering, ERA Track Cape Town, South Africa, May.

Guo Y., and Seaman C. (2011). A Portfolio Approach to Technical Debt Management. Workshop on Managing Technical Debt. Hawaii, USA, May.

81

Page 82: Identifying and Managing Technical Debt

ReferencesGuo Y., Seaman, C., Gomes R., Cavalcanti A., Tonin G, Da Silva F.Q.B., Santos A.L.M., Siebra C. (2011). Tracking

Technical Debt – an exploratory case study. International Conference on Software Maintenance, Williamsburg, VA, September.

Izurieta C., and Bieman J.M. (2008). Testing Consequences of Grime Buildup in Object Oriented Design Patterns. 1st ACM-IEEE International Conference on Software Testing, Verification and Validation, ICST ’08, Lillehamer, Norway, April 2008.

Kim S. and Ernst M. (2007). Prioritizing Warning Categories by Analyzing Software History. In Fourth International Workshop on Mining Software Repositories (MSR’07:ICSE Workshops 2007). IEEE, pp. 27-27. Available at: http://dl.acm.org/citation.cfm?id=1268983.1269041.

Marinescu R. (2004). Detection strategies: Metrics-based rules for detecting design flaws. IEEE International Conference on Software Maintenance. Pp. 350–359.

Markowitz H. (1952). Portfolio Selection. the Journal of Finance. Vol. 7, No. 1, pp. 77-91.

Rothman J. (2006). An Incremental Technique to Pay Off Testing Technical Debt. Available: http://www.stickyminds.com/sitewide.asp?Function=edetail&ObjectType=COL&ObjectId=11011&tth=DYN&tt=siteemail&iDyn=2

Saaty T. L. (1982). Decision making for leaders: The analytical hierarchy process for decision in a complex world. Belmot, California: Lifetime Learning Publications.

Schanz T., and Izurieta C. (2010). Object Oriented Design Pattern Decay: A Taxonomy. 4th ACM-IEEE International Symposium on Empirical Software Engineering and Measurement, ESEM ’10, Bolzano-Bozen, Italy, September 2010.

82

Page 83: Identifying and Managing Technical Debt

ReferencesSeaman C., and Guo Y. (2011). Measuring and Monitoring Technical Debt. ADVANCES IN

COMPUTERS. Vol. 82, pp. 25–46.Sortino F. A., and Price L. N. (1994). Performance Measurement in a Downside Risk

Framework. the Journal of Investing. Vol. 3, No. 3, pp. 59-64.Sullivan K., Chalasani P., Jha S and Sazawal V. (1999). Software Design as an Investment

Activity: A Real Options Perspective in Real Options and Business Strategy: Applications to Decision Making. Risk Books, November.

Vetró A., Torchiano M., and Morisio, M. (2010). Assessing the precision of FindBugs by mining Java projects developed at a university. In Mining Software Repositories (MSR), 7th IEEE Working Conference on. pp. 110-113.

Vetró A., Morisio M, Torchiano, M. (2011). An Empirical Validation of FindBugs Issues Related to Defects. Evaluation and Assessment in Software Engineering 2011 (EASE 2011). Durham City, UK.

Wong S., Cai Y., Kim M., and Dalton M. (2011). Detecting software modularity violations. Proc. 33th International Conference on Software Engineering. May 2011, pp. 411–420.

Zazworka N., Shaw M., Shull F., Seaman C. (2011). Investigating the Impact of Design Debt on Software Quality. Workshop on Managing Technical Debt, Hawaii, USA, May.

83

Page 84: Identifying and Managing Technical Debt

Tools• Java (open source):

• FindBugs: http://findbugs.sourceforge.net/• PMD: http://pmd.sourceforge.net/pmd-5.0.0/• Checkstyle: http://checkstyle.sourceforge.net/

• C#/.NET (commercial)• ReSharper: http://www.jetbrains.com/resharper/• FxCop: http://msdn.microsoft.com/en-us/library/bb429476.aspx• CodeRush: http://go.devexpress.com/CodeRushX.aspx

• Multi-language Framework (open source)• Sonar: http://www.sonarsource.org/

• List of static analysis tools (over 100 tools for more than 10 languages):• Wikipedia: http://en.wikipedia.org/wiki/

List_of_tools_for_static_code_analysis

84

Page 85: Identifying and Managing Technical Debt

Further Reading and Survey

• Further Reading:• Our Research Group’s website: http

://www.technicaldebt.umbc.edu/• OnTechnicalDebt

http://www.ontechnicaldebt.com/

• 5 minute online survey about common beliefs on TD

http://tinyurl.com/TechnicalDebt85