690 likes | 1.1k Views
Technical Debt. CS 510 Software Engineering Supannika Koolmanojwong. Outline. What is Technical Debt? Technical Debt Patterns Technical Debt Calculation & Estimation Technical Debt – Industrial perspective. Technical Debt Example.
E N D
Technical Debt CS 510 Software Engineering Supannika Koolmanojwong
Outline What is Technical Debt? Technical Debt Patterns Technical Debt Calculation & Estimation Technical Debt – Industrial perspective
Technical Debt Example “Guys, we don’t have time to dot every I and cross every t on this release. Just get the code done. It doesn’t have to be perfect. We’ll fix it after we release.” “We don't have time to reconcile these two databases before our deadline, so we'll write some glue code that keeps them synchronized for now and reconcile them after we ship.” Ref: Steve McConnell – ICSE 2013
Total cost of ownership www.comindwork.com • a financial estimate whose purpose is to help consumers and enterprise managers determine direct and indirect costs of a product or system. • including the costs to research, develop, acquire, own, operate, maintain, and dispose of a system
Total Cost of Software Ownership www.dtbusiness.com newtecharticles.com
Potential total cost of ownership • HW and SW • Network • Server • Workstation • Installation & integration • Purchasing research • Warranties and licenses • License tracking - compliance • Migration expenses • Risks: susceptibility to vulnerabilities, availability of upgrades, patches and future licensing policies, etc. • Infrastructure • Electricity • Testing costs • Downtime, outage and failure expenses • Diminished performance • Security (including breaches, loss of reputation, recovery & prevention) • Backup and recovery process • Technology training • Audit • Insurance • IT personnel • Replacement • Future upgrade or scalability expenses • Decommissioning
Common causes of technical debt Business pressures Lack of process or understanding Lack of building loosely coupled components (hard-coded) Lack of documentation Parallel Development Delayed Refactoring http://en.wikipedia.org/wiki/Technical_debt
Single System Development Perspective Choices driven by potential • Market share • Future opportunities • Technical debt • Cost of failure to provide needed capability
CodeSmell Deficit programming Code Debt Toxic Code Technical Debt Software Decay coined by Ward Cunningham Design Debt Technical Inflation
Ref: ZadiaCodabux and Byron J. Williams. Managing Technical Debt: An Industrial Case Study
Technical Debt Observations“Agile Project Management”, Jim Highsmith, second edition
Types of Debt“Managing Software Debt: Building for Inevitable Change”, Chris Sterling • Technical Debt • These are activities that a team or team members choose not to do well now and will impede future development if left undone • Quality Debt • There is a diminishing ability to verify the functional and technical quality of software • Configuration Management Debt • Integration and release management becomes more risky, complex and error-prone • Design Debt • The cost of adding features is increasing toward the point where it is more than the cost of writing from scratch. • Platform Debt • The availability of people to work on software changes is becoming limited or cost-prohibitive. www.psmsc.com
Technical Debt “is a measure of how untidy or out-of-date the development work area for a product is” Not the deferred requirements http://www.c2.com/cgi/wiki?TechnicalDebt
Technical Debt http://petdance.com/perl/technical-debt “I don’t know what happened, I just changed one line” “We can’t upgrade, It will break” “We can’t upgrade the code, we don’t have time” “We can’t upgrade the code, no one understands it” “Just put in the comment XXX, we will do it later” “Just put in the TODO comment”
Technical Debt • intentional technical debt • cost to taking short cuts • unintentional technical debt • making mistakes • Conscious decision to optimize for the “present” rather than the “future” • cost of not dealing with these short cuts and mistakes will increase over time. Read more: http://www.javacodegeeks.com/2012/02/technical-debt-how-much-is-it-really.html#ixzz1phjvB5A9
http://pkruchten.files.wordpress.com/2011/10/kruchten-111027-techdebt.pdfhttp://pkruchten.files.wordpress.com/2011/10/kruchten-111027-techdebt.pdf
http://pkruchten.files.wordpress.com/2011/10/kruchten-111027-techdebt.pdfhttp://pkruchten.files.wordpress.com/2011/10/kruchten-111027-techdebt.pdf
http://pkruchten.files.wordpress.com/2011/10/kruchten-111027-techdebt.pdfhttp://pkruchten.files.wordpress.com/2011/10/kruchten-111027-techdebt.pdf
http://pkruchten.files.wordpress.com/2011/10/kruchten-111027-techdebt.pdfhttp://pkruchten.files.wordpress.com/2011/10/kruchten-111027-techdebt.pdf
Outline What is Technical Debt? Technical Debt Patterns Technical Debt Calculation & Estimation Technical Debt tool – Industrial perspective
Technical DebtArchitecture or the platform technology mistake Read more: http://www.javacodegeeks.com/2012/02/technical-debt-how-much-is-it-really.html#ixzz1phnGFlUV Scalability, reliability Foundations are poorly design you don’t find out until too late (operations phase) no choice but to start again or rewrite big chunk to keep it working
Technical DebtError-prone code Read more: http://www.javacodegeeks.com/2012/02/technical-debt-how-much-is-it-really.html#ixzz1phnGFlUV http://petdance.com/perl/technical-debt/technical-debt.007.html “ .. If I change X, it is going to break Y, I think ..” “ Don’t touch that code, last time we did, we spent a week fixing it…” 20% of the code where 80% of bugs are found Hard to understand Dangerous to change because done poorly one in the first place Not rewriting this code is one of the most expensive mistakes that developers make
Technical DebtNot easily tested Read more: http://www.javacodegeeks.com/2012/02/technical-debt-how-much-is-it-really.html#ixzz1phnGFlUV “ .. I thought we had a test for that ..” Don’t have good automated tests Tests keep falling apart when you change the code Testing costs tend to go up over time as you write more code
Technical DebtCode that mysteriously works Read more: http://www.javacodegeeks.com/2012/02/technical-debt-how-much-is-it-really.html#ixzz1phnGFlUV nobody is sure how or why Might be written by the geek who left the company if nobody on the team understands it, it’s a time bomb
Technical DebtOthers Read more: http://www.javacodegeeks.com/2012/02/technical-debt-how-much-is-it-really.html#ixzz1phnGFlUV • Forward and backward compatibility • Short term debt • Duplicate, copy-and-paste code • How many ? Trackable ? • Hard coding • Out of date documentation • “We just lost the drive, where are the backups” • If nobody is using it, get rid of it. If people are using it, why isn’t it up to date?
Development Cost(Perfect World) % Effort per Phase Analysis Test Integration Design Implementation
Typical Defect Profiles Classification of Defects Design Defects Implementation Defects Integration Defects Analysis Test Integration Design Implementation Defect Insertion Defect detection & Removal
Development Cost(Real World) % Effort per Phase Analysis Test Integration Design Implementation
Development Cost % Effort per Phase Analysis Test Integration Design Implementation Real world Perfect World
Development Cost Technical Debt? Technical Debt? % Effort per Phase Technical Debt? Technical Debt? Analysis Test Integration Design Implementation Real world Perfect World
Development Cost Technical Debt? % Effort per Phase Technical Debt? Analysis Test Integration Design Implementation Real world Perfect World
COTS Integration % Effort per Phase Technical Debt? Analysis Test Integration Design Implementation Real world Perfect World
Outline What is Technical Debt? Technical Debt Patterns Technical Debt Calculation & Estimation Technical Debt – Industrial perspective
Financial debt vsTechnical Debt http://martinfowler.com/bliki/TechnicalDebt.html
Technical Debt Cost Estimation Principal = Repair Effort Interest = Maintenance Effort [Nugroho et al 2011] [Curtis et al 2012] Ref: Nugroho et al 2011, An Empirical Model of Technical Debt and Interest, MTD 2011 Ref: Curtis e al 2011, Estimating the Principal of an Application's Technical Debt. IEEE Software
700 applications • 158 organizations • 357 MLOC • No sample less than 10KSLOC Conservative - Assume all violations would be fixed within one hour Weighted - varied the hours needed for fixing within each severity category, More realistic - based on data observed in several IT organizations. Ref: Curtis e al 2011, Estimating the Principal of an Application's Technical Debt. IEEE Software
Average Technical Debt per LOC = $3.61 Ref: Curtis e al 2011, Estimating the Principal of an Application's Technical Debt. IEEE Software
Ref: Curtis e al 2011, Estimating the Principal of an Application's Technical Debt. IEEE Software
Technical Debt within each technology http://www.castsoftware.com/research-labs/technical-debt-estimation
Outline What is Technical Debt? Technical Debt Patterns Technical Debt Calculation & Estimation Technical Debt – Industrial perspective
Sonar Mainly manage the software quality SQALE – Software Quality Assessment based on Lifecycle Expectations
Nemo - An open source tool – by sonarhttp://nemo.sonarqube.org
Sonar – SQALE plug-inhttp://www.sonarsource.com/products/plugins/governance/sqale/
Developers’ 7 Deadly Sins Bad Distribution of Complexity Duplications Lack of Unit Tests No Coding Standards Not Enough or Too Many Comments Potential Bugs Spaghetti Design http://docs.codehaus.org/display/SONAR/Developers%27+Seven+Deadly+Sins
Developers’ 7 Deadly Sins Bad Distribution of Complexity Duplications http://docs.codehaus.org/display/SONAR/Developers%27+Seven+Deadly+Sins
Developers’ 7 Deadly Sins Lack of Unit Tests No Coding Standards http://docs.codehaus.org/display/SONAR/Developers%27+Seven+Deadly+Sins
Developers’ 7 Deadly Sins • Not Enough or Too Many Comments (time consuming maintenance) • Documented complex or not straightforward pieces of code • Readable unit tests scenarios that will help the developers understand the code • Documented API that will help external developers understand how to use those API • Respect of coding standard such as naming conventions • Potential Bugs http://docs.codehaus.org/display/SONAR/Developers%27+Seven+Deadly+Sins
Developers’ 7 Deadly Sins • Spaghetti Design • Hunting for cycles • Checking your own architecture rules • Managing your libraries • Checking the single responsibility principle with LCOM4 (Lack of Cohesion of Methods) • RFC (Response for Class) – checking coupling (complexity of class in terms of method calls) http://docs.codehaus.org/display/SONAR/Developers%27+Seven+Deadly+Sins
x = = x http://www.moovweb.com/blog/technical-debt-infographic/