SlideShare a Scribd company logo
1 of 37
Download to read offline
How to improve
the quality of your application
A practical guide for developers
Saturday 23rd February 2019, Javantura, Zagreb / Croatia
Ioannis Kolaxis – Software Engineer / Senior Expert
1
@IoannisKolaxis
What can you do?
How to improve software quality?
Where do you start?
2
@IoannisKolaxis
Should you pay off your debt?
3
@IoannisKolaxis
Do not touch old code!
You will probably introduce new defects!
Old code is more reliable
“If a module is, on the average, a year older than an otherwise
similar module, the older module will have roughly a third fewer
faults.”
T. L. Graves, A. F. Karr, J. S. Marron and H. Siy, "Predicting fault incidence using software change history" in IEEE Transactions on
Software Engineering, vol. 26, no. 7, pp. 653-661, Jul 2000.
4
@IoannisKolaxis
Stop creating new debt
• Install SonarLint
plugin in your IDE.
• It helps you
detect, and fix
quality issues as
you write code.
• Download at:
www.sonarlint.org
5
@IoannisKolaxis
Stop creating new debt
• Setup Quality Gates in SonarQube
6
@IoannisKolaxis
• As a developer, where do you spend most of your time?
A. Reading existing code,
B. Writing new code,
C. Waiting for a full build to complete,
D.Other
Quiz
7
@IoannisKolaxis
• As a developer, where do you spend most of your time?
A. Reading existing code,
B. Writing new code,
C. Waiting for a full build to complete,
D.Other
Quiz
8
@IoannisKolaxis
Which parts of your code
do you read most often?
Just think …
9
@IoannisKolaxis
• Use git to find out where you spend most of your
development efforts:
git log --format=format: --name-only | egrep -v '^$' | sort | uniq -c | sort -r >
files_change_frequency.txt
258 usermanagementportlet/…/UserManagement_de.properties
250 usermanagementportlet/…/UserManagement_en.properties
227 usermanagement/…/RetrieveUserTmpltForUsersDataControlImpl.java
205 usermanagement/…/UserManagementImpl.java
154 usermanagement/…/EditUserResourceTemplateRulesBean.java
135 usermanagementportlet/…/AddEditUserBean.java
109 usermanagementportlet/…/ConfigureNewUserResourceBean.java
103 usermanagementportlet/…/addEditUser.jsp
Data never lies
Commits
per file
10
@IoannisKolaxis
The pattern
From a total of 10.007 files:
• 11 files → more than 101 commits
• 91 files → 31 < commits < 100
• 455 files → 10 < commits < 30
• 9.450 files → less than 10 commits
• Only a few files change frequently!
• This is where you spend
most of your time!
11
@IoannisKolaxis
A well-aimed refactoring will
help you:
• Spend less time to read code
& extend functionality.
• Become more productive!
Refactor frequently-changing files
12
@IoannisKolaxis
• “Churn measures based on counts of lines added, deleted, and
modified are very effective for fault prediction.”
R. M. Bell, T. J. Ostrand, and E.J. Weyuker, “Does Measuring Code Change Improve Fault Prediction?“, ACM Press, 2011.
• Files involved in a lot of bug fixing activities are most likely to be
defective
R. Moser, W. Pedrycz, and G. Succi, “A Comparative Analysis of the Efficiency of Change Metrics and Static Code Attributes for
Defect Prediction“, Proceedings of the 30th International Conference on Software Engineering, 181-190, 2008.
Changing files predict system failures
13
@IoannisKolaxis
• Do not waste your time testing mature
functionality (=components that do not
change).
• Focus all your testing efforts on the
frequently-changing parts; those are
most likely to fail!
Focus your Quality Assurance efforts
Unit
Tests
Integration
Tests
E2E
Tests
14
@IoannisKolaxis
What is the coverage of
your new/changing code?
Ask the right questions
15
@IoannisKolaxis
• Files not changed in the past years → stable
components → mature features
• Is every mature feature still used by your customers?
• If a feature is not used, then delete its code!
• Else, extract stable features in separate libraries.
Identify stable components
16
@IoannisKolaxis
• Save time from your builds.
• Achieve faster onboarding of
new developers, by:
Go faster with deleted/extracted code
• Focusing only on actively developed code.
• Not having to familiarize with old/stable code.
17
@IoannisKolaxis
• Gain more insight, by measuring code
complexity for each one of the
frequently changing files.
• Language-neutral metrics for code
complexity:
• Number of lines
• Number of tabs
Measure code complexity
18
@IoannisKolaxis
• How many times did you provide a
bug fix, by adding a nested
conditional in your code?
if (…) {
for (…) {
if (customerSpecificSetup) {
// Do some magic, so that the
// application works for this customer!
}
}
}
Tabs increase complexity
19
@IoannisKolaxis
Rising complexity calls for refactoring
227
commits
20
@IoannisKolaxis
Our #1 priority for refactoring
205
commits
21
@IoannisKolaxis
Our #1 priority for refactoring
6.767 → 8.396 lines
22.421→ 29.310 tabs
Sept 2014
205
commits
22
@IoannisKolaxis
• Released on 8th November 2006.
• > 50 million lines of code.
• ~ 2.000 developers.
Do you remember Windows Vista?
23
@IoannisKolaxis
• Microsoft measured several organizational metrics, and studied their
correlation with the defects of Windows Vista.
Organizational structure vs Quality
Organizational metric Assertion
Number of Engineers The more people who touch the code, the lower the quality.
Number of Ex-Engineers A large loss of team members affects the knowledge retention, and thus
quality.
Organization Intersection
Factor
The more diffused the different organizations contributing code, the lower is
the quality.
N. Nagappan, B. Murphy, and V.R. Basili, “The Influence of Organizational Structure on Software Quality: An Empirical Case
Study“, ACM, 2008.
• Can the structure of your organization affect the quality of your
software application?
24
@IoannisKolaxis
• Organizational metrics are better
predictors of failure-proneness than
the traditional metrics used so far,
such as code coverage, code
complexity, etc.
Organizational structure impacts Quality
Model Precision
Organizational
structure
86,2%
Code coverage 83,8%
Code complexity 79,3%
Code churn 78,6%
Dependencies 74,4%
Pre-release bugs 73,8%
N. Nagappan, B. Murphy, and V.R. Basili, “The Influence of Organizational Structure on Software Quality: An Empirical Case
Study“, ACM, 2008.
25
@IoannisKolaxis
• In another research, focused on Windows 7, Microsoft
distinguished between the following kinds of developers,
depending on their commits for a given component:
• Owner: has the most commits to that component.
• Major contributor: has more than 5% of total commits.
• Minor contributor: has less than 5% of total commits.
More organizational metrics
C.Bird, N. Nagappan, B. Murphy, H. Gall, and P. Devanbu, “Don’t Touch My Code! Examining the Effects of Code Ownership on
Software Quality“, ACM, 2011.
26
@IoannisKolaxis
• The researchers concluded that:
• “The number of minor contributors has a strong positive
relationship with both pre- and post-release failures …”
• “Higher levels of ownership for the top contributor to a
component results in fewer failures when controlling for the
same metrics, but the effect is smaller than the number of
minor contributors”
Effects of minor contributors
C.Bird, N. Nagappan, B. Murphy, H. Gall, and P. Devanbu, “Don’t Touch My Code! Examining the Effects of Code Ownership on
Software Quality“, ACM, 2011.
27
@IoannisKolaxis
• In one of our software components, we
had a total of 427 commits:
Gain insight into your components
Commits per developer
Metric Value
Minor
contributors
15
Major
contributors
6
Total
contributors
21
Ownership 20,37%
• The top contributing
developer made 87
commits:
87/427 = 20,37% ownership
28
@IoannisKolaxis
• In another software component, we had
a total of 253 commits for the same
period:
Gain insight into your components
Commits per developer
Metric Value
Minor
contributors
3
Major
contributors
6
Total
contributors
9
Ownership 28,85%
• The top contributing
developer made 73
commits:
73/253 = 28,85% ownership
29
@IoannisKolaxis
• Which component will probably
have more defects?
• Where would you focus your
testing efforts?
Know where you are standing …
Metric Component
A
Component
B
Minor
contributors
15 3
Major
contributors
6 6
Total
contributors
21 9
Ownership 20,37% 28,85%
30
@IoannisKolaxis
• More minor contributors
→ More defects
• Bigger ownership
→ Less defects
Beware of minor contributors!
Metric Component
A
Component
B
Minor
contributors
15 3
Major
contributors
6 6
Total
contributors
21 9
Ownership 20,37% 28,85%
31
@IoannisKolaxis
• Minor contributors must be consulting a
major contributor of a component before
making any changes to it.
• Pay more attention when reviewing
code submitted by minor contributors.
• More extensive testing should be
performed for components with low
ownership.
Use metrics to build better software
32
@IoannisKolaxis
• A customer asks for a new feature to be implemented,
but the major contributors of that component are not
available. What will you do?
• Ask from minor contributors, to start implementing this
new feature right away, or
• Delay the implementation of the feature, until one or
more major contributors are available?
Planning new features
33
@IoannisKolaxis
• Use git to find out all the contributors for a component:
git shortlog -s – your_component > contributors.txt
78 Ioannis Kolaxis
27 …
48 …
• Or, to limit the results to contributors after a given date
(e.g. due to an organizational restructuring)
git shortlog -s --after=2018-05-01 -- your_component > contributors.txt
Learn your contributors
Commits per
developer
Folder
34
@IoannisKolaxis
1. Stop creating new quality issues.
2. Don’t touch old code.
3. Refactor your most complex, frequently changing files.
4. Focus your testing on frequently changing files.
5. Pay attention to minor contributors.
Summary of proposed actions
35
@IoannisKolaxis
Now you know
where to start!
How to improve software quality?
Atos, the Atos logo, Atos Codex, Atos Consulting, Atos Worldgrid, Worldline, BlueKiwi, Bull, Canopy the
Open Cloud Company, Unify, Yunano, Zero Email, Zero Email Certified and The Zero Email Company are
registered trademarks of the Atos group. June 2016. © 2016 Atos. Confidential information owned by
Atos, to be used by the recipient only. This document, or any part of it, may not be reproduced, copied,
circulated and/or distributed nor quoted without prior written approval from Atos.
Thank you!
Email : ioannis.kolaxis@atos.net
Twitter : @IoannisKolaxis

More Related Content

What's hot

A "Firewall" for Bad Binaries
A "Firewall" for Bad BinariesA "Firewall" for Bad Binaries
A "Firewall" for Bad BinariesSonatype
 
How to increase the technical health of your software?
How to increase the technical health of your software?How to increase the technical health of your software?
How to increase the technical health of your software?Tom Mens
 
Keys to Continuous Delivery Success - Mark Warren, Product Director, Perforc...
Keys to Continuous  Delivery Success - Mark Warren, Product Director, Perforc...Keys to Continuous  Delivery Success - Mark Warren, Product Director, Perforc...
Keys to Continuous Delivery Success - Mark Warren, Product Director, Perforc...Perforce
 
Empircal Studies of Performance Bugs & Performance Analysis Approaches for La...
Empircal Studies of Performance Bugs & Performance Analysis Approaches for La...Empircal Studies of Performance Bugs & Performance Analysis Approaches for La...
Empircal Studies of Performance Bugs & Performance Analysis Approaches for La...SAIL_QU
 
Scaling Enterprise DevOps with CloudBees
Scaling Enterprise DevOps with CloudBeesScaling Enterprise DevOps with CloudBees
Scaling Enterprise DevOps with CloudBeesDevOps.com
 
How To Use Jenkins for Continuous Load and Mobile Testing with SOASTA & Cloud...
How To Use Jenkins for Continuous Load and Mobile Testing with SOASTA & Cloud...How To Use Jenkins for Continuous Load and Mobile Testing with SOASTA & Cloud...
How To Use Jenkins for Continuous Load and Mobile Testing with SOASTA & Cloud...SOASTA
 
Metrics Driven DevOps - Automate Scalability and Performance Into your Pipeline
Metrics Driven DevOps - Automate Scalability and Performance Into your PipelineMetrics Driven DevOps - Automate Scalability and Performance Into your Pipeline
Metrics Driven DevOps - Automate Scalability and Performance Into your PipelineAndreas Grabner
 
Troubleshooting ASP.NET and IIS Scalability Hotspots
Troubleshooting ASP.NET and IIS Scalability HotspotsTroubleshooting ASP.NET and IIS Scalability Hotspots
Troubleshooting ASP.NET and IIS Scalability HotspotsDynatrace
 
Boston DevOps Days 2016: Implementing Metrics Driven DevOps - Why and How
Boston DevOps Days 2016: Implementing Metrics Driven DevOps - Why and HowBoston DevOps Days 2016: Implementing Metrics Driven DevOps - Why and How
Boston DevOps Days 2016: Implementing Metrics Driven DevOps - Why and HowAndreas Grabner
 
Mentors View: Aligning Your Team and Your Powers for Success
Mentors View: Aligning Your Team and Your Powers for SuccessMentors View: Aligning Your Team and Your Powers for Success
Mentors View: Aligning Your Team and Your Powers for SuccessSonatype
 
Why Do We Break APIs? First Answers from Developers
Why Do We Break APIs? First Answers from DevelopersWhy Do We Break APIs? First Answers from Developers
Why Do We Break APIs? First Answers from DevelopersLaerte Xavier
 
Metrics-Driven Devops: Delivering High Quality Software Faster!
Metrics-Driven Devops: Delivering High Quality Software Faster! Metrics-Driven Devops: Delivering High Quality Software Faster!
Metrics-Driven Devops: Delivering High Quality Software Faster! Dynatrace
 
How to explain DevOps to your mom
How to explain DevOps to your momHow to explain DevOps to your mom
How to explain DevOps to your momAndreas Grabner
 
Programming languages and techniques for today’s embedded andIoT world
Programming languages and techniques for today’s embedded andIoT worldProgramming languages and techniques for today’s embedded andIoT world
Programming languages and techniques for today’s embedded andIoT worldRogue Wave Software
 
Secrets and surprises of high performance: What the data says
Secrets and surprises of high performance: What the data saysSecrets and surprises of high performance: What the data says
Secrets and surprises of high performance: What the data saysNicole Forsgren
 
Fraud Engineering, from Merchant Risk Council Annual Meeting 2012
Fraud Engineering, from Merchant Risk Council Annual Meeting 2012Fraud Engineering, from Merchant Risk Council Annual Meeting 2012
Fraud Engineering, from Merchant Risk Council Annual Meeting 2012Nick Galbreath
 
Atmosphere 2016 - Andreas Grabner - Metrics Driven-DevOps: Delivering High Qu...
Atmosphere 2016 - Andreas Grabner - Metrics Driven-DevOps: Delivering High Qu...Atmosphere 2016 - Andreas Grabner - Metrics Driven-DevOps: Delivering High Qu...
Atmosphere 2016 - Andreas Grabner - Metrics Driven-DevOps: Delivering High Qu...PROIDEA
 
Selenium Today vs. Selenium Tomorrow: Digital as the Convergence of Mobile & ...
Selenium Today vs. Selenium Tomorrow: Digital as the Convergence of Mobile & ...Selenium Today vs. Selenium Tomorrow: Digital as the Convergence of Mobile & ...
Selenium Today vs. Selenium Tomorrow: Digital as the Convergence of Mobile & ...Perfecto by Perforce
 
DevOps Fest 2020. Kohsuke Kawaguchi. GitOps, Jenkins X & the Future of CI/CD
DevOps Fest 2020. Kohsuke Kawaguchi. GitOps, Jenkins X & the Future of CI/CDDevOps Fest 2020. Kohsuke Kawaguchi. GitOps, Jenkins X & the Future of CI/CD
DevOps Fest 2020. Kohsuke Kawaguchi. GitOps, Jenkins X & the Future of CI/CDDevOps_Fest
 

What's hot (19)

A "Firewall" for Bad Binaries
A "Firewall" for Bad BinariesA "Firewall" for Bad Binaries
A "Firewall" for Bad Binaries
 
How to increase the technical health of your software?
How to increase the technical health of your software?How to increase the technical health of your software?
How to increase the technical health of your software?
 
Keys to Continuous Delivery Success - Mark Warren, Product Director, Perforc...
Keys to Continuous  Delivery Success - Mark Warren, Product Director, Perforc...Keys to Continuous  Delivery Success - Mark Warren, Product Director, Perforc...
Keys to Continuous Delivery Success - Mark Warren, Product Director, Perforc...
 
Empircal Studies of Performance Bugs & Performance Analysis Approaches for La...
Empircal Studies of Performance Bugs & Performance Analysis Approaches for La...Empircal Studies of Performance Bugs & Performance Analysis Approaches for La...
Empircal Studies of Performance Bugs & Performance Analysis Approaches for La...
 
Scaling Enterprise DevOps with CloudBees
Scaling Enterprise DevOps with CloudBeesScaling Enterprise DevOps with CloudBees
Scaling Enterprise DevOps with CloudBees
 
How To Use Jenkins for Continuous Load and Mobile Testing with SOASTA & Cloud...
How To Use Jenkins for Continuous Load and Mobile Testing with SOASTA & Cloud...How To Use Jenkins for Continuous Load and Mobile Testing with SOASTA & Cloud...
How To Use Jenkins for Continuous Load and Mobile Testing with SOASTA & Cloud...
 
Metrics Driven DevOps - Automate Scalability and Performance Into your Pipeline
Metrics Driven DevOps - Automate Scalability and Performance Into your PipelineMetrics Driven DevOps - Automate Scalability and Performance Into your Pipeline
Metrics Driven DevOps - Automate Scalability and Performance Into your Pipeline
 
Troubleshooting ASP.NET and IIS Scalability Hotspots
Troubleshooting ASP.NET and IIS Scalability HotspotsTroubleshooting ASP.NET and IIS Scalability Hotspots
Troubleshooting ASP.NET and IIS Scalability Hotspots
 
Boston DevOps Days 2016: Implementing Metrics Driven DevOps - Why and How
Boston DevOps Days 2016: Implementing Metrics Driven DevOps - Why and HowBoston DevOps Days 2016: Implementing Metrics Driven DevOps - Why and How
Boston DevOps Days 2016: Implementing Metrics Driven DevOps - Why and How
 
Mentors View: Aligning Your Team and Your Powers for Success
Mentors View: Aligning Your Team and Your Powers for SuccessMentors View: Aligning Your Team and Your Powers for Success
Mentors View: Aligning Your Team and Your Powers for Success
 
Why Do We Break APIs? First Answers from Developers
Why Do We Break APIs? First Answers from DevelopersWhy Do We Break APIs? First Answers from Developers
Why Do We Break APIs? First Answers from Developers
 
Metrics-Driven Devops: Delivering High Quality Software Faster!
Metrics-Driven Devops: Delivering High Quality Software Faster! Metrics-Driven Devops: Delivering High Quality Software Faster!
Metrics-Driven Devops: Delivering High Quality Software Faster!
 
How to explain DevOps to your mom
How to explain DevOps to your momHow to explain DevOps to your mom
How to explain DevOps to your mom
 
Programming languages and techniques for today’s embedded andIoT world
Programming languages and techniques for today’s embedded andIoT worldProgramming languages and techniques for today’s embedded andIoT world
Programming languages and techniques for today’s embedded andIoT world
 
Secrets and surprises of high performance: What the data says
Secrets and surprises of high performance: What the data saysSecrets and surprises of high performance: What the data says
Secrets and surprises of high performance: What the data says
 
Fraud Engineering, from Merchant Risk Council Annual Meeting 2012
Fraud Engineering, from Merchant Risk Council Annual Meeting 2012Fraud Engineering, from Merchant Risk Council Annual Meeting 2012
Fraud Engineering, from Merchant Risk Council Annual Meeting 2012
 
Atmosphere 2016 - Andreas Grabner - Metrics Driven-DevOps: Delivering High Qu...
Atmosphere 2016 - Andreas Grabner - Metrics Driven-DevOps: Delivering High Qu...Atmosphere 2016 - Andreas Grabner - Metrics Driven-DevOps: Delivering High Qu...
Atmosphere 2016 - Andreas Grabner - Metrics Driven-DevOps: Delivering High Qu...
 
Selenium Today vs. Selenium Tomorrow: Digital as the Convergence of Mobile & ...
Selenium Today vs. Selenium Tomorrow: Digital as the Convergence of Mobile & ...Selenium Today vs. Selenium Tomorrow: Digital as the Convergence of Mobile & ...
Selenium Today vs. Selenium Tomorrow: Digital as the Convergence of Mobile & ...
 
DevOps Fest 2020. Kohsuke Kawaguchi. GitOps, Jenkins X & the Future of CI/CD
DevOps Fest 2020. Kohsuke Kawaguchi. GitOps, Jenkins X & the Future of CI/CDDevOps Fest 2020. Kohsuke Kawaguchi. GitOps, Jenkins X & the Future of CI/CD
DevOps Fest 2020. Kohsuke Kawaguchi. GitOps, Jenkins X & the Future of CI/CD
 

Similar to Javantura v6 - How can you improve the quality of your application - Ioannis Kolaxis

Software engineering practices and software quality empirical research results
Software engineering practices and software quality empirical research resultsSoftware engineering practices and software quality empirical research results
Software engineering practices and software quality empirical research resultsNikolai Avteniev
 
Cross functional peer review preso 10-01-2013
Cross functional peer review preso 10-01-2013Cross functional peer review preso 10-01-2013
Cross functional peer review preso 10-01-2013SmartBear
 
20th Anniversary - OWASP Top 10 2021.pptx
20th Anniversary - OWASP Top 10 2021.pptx20th Anniversary - OWASP Top 10 2021.pptx
20th Anniversary - OWASP Top 10 2021.pptxDedy Hariyadi
 
Effects of Ownership on Software Quality
 Effects of Ownership on Software Quality Effects of Ownership on Software Quality
Effects of Ownership on Software QualityMd. Shafiuzzaman Hira
 
Enhancing Developer Productivity with Code Forensics
Enhancing Developer Productivity with Code ForensicsEnhancing Developer Productivity with Code Forensics
Enhancing Developer Productivity with Code ForensicsTechWell
 
Static analysis as part of the development process in Unreal Engine
Static analysis as part of the development process in Unreal EngineStatic analysis as part of the development process in Unreal Engine
Static analysis as part of the development process in Unreal EnginePVS-Studio
 
Slides for Houston iPhone Developers' Meetup (April 2012)
Slides for Houston iPhone Developers' Meetup (April 2012)Slides for Houston iPhone Developers' Meetup (April 2012)
Slides for Houston iPhone Developers' Meetup (April 2012)lqi
 
No Silver Bullet - Essence and Accidents of Software Engineering
No Silver Bullet - Essence and Accidents of Software EngineeringNo Silver Bullet - Essence and Accidents of Software Engineering
No Silver Bullet - Essence and Accidents of Software EngineeringAditi Abhang
 
Getting Ahead of Delivery Issues with Deep SDLC Analysis by Donald Belcham
Getting Ahead of Delivery Issues with Deep SDLC Analysis by Donald BelchamGetting Ahead of Delivery Issues with Deep SDLC Analysis by Donald Belcham
Getting Ahead of Delivery Issues with Deep SDLC Analysis by Donald Belcham.NET Conf UY
 
Problems of testing 64-bit applications
Problems of testing 64-bit applicationsProblems of testing 64-bit applications
Problems of testing 64-bit applicationsPVS-Studio
 
Growing an API Culture - APIdays LIVE AU 2020
Growing an API Culture - APIdays LIVE AU 2020Growing an API Culture - APIdays LIVE AU 2020
Growing an API Culture - APIdays LIVE AU 2020Saul Caganoff
 
Unsustainable Regaining Control of Uncontrollable Apps
Unsustainable Regaining Control of Uncontrollable AppsUnsustainable Regaining Control of Uncontrollable Apps
Unsustainable Regaining Control of Uncontrollable AppsCAST
 
Fast, reliable, secure @ Velocity 2015
Fast, reliable, secure @  Velocity 2015Fast, reliable, secure @  Velocity 2015
Fast, reliable, secure @ Velocity 2015Ariel Tseitlin
 
apidays LIVE Australia - Growing an API Culture by Liz Douglass & Saul Caganoff
apidays LIVE Australia - Growing an API Culture by Liz Douglass & Saul Caganoffapidays LIVE Australia - Growing an API Culture by Liz Douglass & Saul Caganoff
apidays LIVE Australia - Growing an API Culture by Liz Douglass & Saul Caganoffapidays
 
apidays LIVE Paris - Growing an API Culture by Saul Caganoff & Liz Douglass
apidays LIVE Paris - Growing an API Culture by Saul Caganoff & Liz Douglassapidays LIVE Paris - Growing an API Culture by Saul Caganoff & Liz Douglass
apidays LIVE Paris - Growing an API Culture by Saul Caganoff & Liz Douglassapidays
 
Software Mining and Software Datasets
Software Mining and Software DatasetsSoftware Mining and Software Datasets
Software Mining and Software DatasetsTao Xie
 
Hidden Speed Bumps on the Road to "Continuous"
Hidden Speed Bumps on the Road to "Continuous"Hidden Speed Bumps on the Road to "Continuous"
Hidden Speed Bumps on the Road to "Continuous"Sonatype
 
Software Analytics - Achievements and Challenges
Software Analytics - Achievements and ChallengesSoftware Analytics - Achievements and Challenges
Software Analytics - Achievements and ChallengesTao Xie
 

Similar to Javantura v6 - How can you improve the quality of your application - Ioannis Kolaxis (20)

Software engineering practices and software quality empirical research results
Software engineering practices and software quality empirical research resultsSoftware engineering practices and software quality empirical research results
Software engineering practices and software quality empirical research results
 
Cross functional peer review preso 10-01-2013
Cross functional peer review preso 10-01-2013Cross functional peer review preso 10-01-2013
Cross functional peer review preso 10-01-2013
 
20th Anniversary - OWASP Top 10 2021.pptx
20th Anniversary - OWASP Top 10 2021.pptx20th Anniversary - OWASP Top 10 2021.pptx
20th Anniversary - OWASP Top 10 2021.pptx
 
Effects of Ownership on Software Quality
 Effects of Ownership on Software Quality Effects of Ownership on Software Quality
Effects of Ownership on Software Quality
 
Code Reviews
Code ReviewsCode Reviews
Code Reviews
 
Enhancing Developer Productivity with Code Forensics
Enhancing Developer Productivity with Code ForensicsEnhancing Developer Productivity with Code Forensics
Enhancing Developer Productivity with Code Forensics
 
Static analysis as part of the development process in Unreal Engine
Static analysis as part of the development process in Unreal EngineStatic analysis as part of the development process in Unreal Engine
Static analysis as part of the development process in Unreal Engine
 
Slides for Houston iPhone Developers' Meetup (April 2012)
Slides for Houston iPhone Developers' Meetup (April 2012)Slides for Houston iPhone Developers' Meetup (April 2012)
Slides for Houston iPhone Developers' Meetup (April 2012)
 
No Silver Bullet - Essence and Accidents of Software Engineering
No Silver Bullet - Essence and Accidents of Software EngineeringNo Silver Bullet - Essence and Accidents of Software Engineering
No Silver Bullet - Essence and Accidents of Software Engineering
 
Getting Ahead of Delivery Issues with Deep SDLC Analysis by Donald Belcham
Getting Ahead of Delivery Issues with Deep SDLC Analysis by Donald BelchamGetting Ahead of Delivery Issues with Deep SDLC Analysis by Donald Belcham
Getting Ahead of Delivery Issues with Deep SDLC Analysis by Donald Belcham
 
Software testing
Software testingSoftware testing
Software testing
 
Problems of testing 64-bit applications
Problems of testing 64-bit applicationsProblems of testing 64-bit applications
Problems of testing 64-bit applications
 
Growing an API Culture - APIdays LIVE AU 2020
Growing an API Culture - APIdays LIVE AU 2020Growing an API Culture - APIdays LIVE AU 2020
Growing an API Culture - APIdays LIVE AU 2020
 
Unsustainable Regaining Control of Uncontrollable Apps
Unsustainable Regaining Control of Uncontrollable AppsUnsustainable Regaining Control of Uncontrollable Apps
Unsustainable Regaining Control of Uncontrollable Apps
 
Fast, reliable, secure @ Velocity 2015
Fast, reliable, secure @  Velocity 2015Fast, reliable, secure @  Velocity 2015
Fast, reliable, secure @ Velocity 2015
 
apidays LIVE Australia - Growing an API Culture by Liz Douglass & Saul Caganoff
apidays LIVE Australia - Growing an API Culture by Liz Douglass & Saul Caganoffapidays LIVE Australia - Growing an API Culture by Liz Douglass & Saul Caganoff
apidays LIVE Australia - Growing an API Culture by Liz Douglass & Saul Caganoff
 
apidays LIVE Paris - Growing an API Culture by Saul Caganoff & Liz Douglass
apidays LIVE Paris - Growing an API Culture by Saul Caganoff & Liz Douglassapidays LIVE Paris - Growing an API Culture by Saul Caganoff & Liz Douglass
apidays LIVE Paris - Growing an API Culture by Saul Caganoff & Liz Douglass
 
Software Mining and Software Datasets
Software Mining and Software DatasetsSoftware Mining and Software Datasets
Software Mining and Software Datasets
 
Hidden Speed Bumps on the Road to "Continuous"
Hidden Speed Bumps on the Road to "Continuous"Hidden Speed Bumps on the Road to "Continuous"
Hidden Speed Bumps on the Road to "Continuous"
 
Software Analytics - Achievements and Challenges
Software Analytics - Achievements and ChallengesSoftware Analytics - Achievements and Challenges
Software Analytics - Achievements and Challenges
 

More from HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association

More from HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association (20)

Java cro'21 the best tools for java developers in 2021 - hujak
Java cro'21   the best tools for java developers in 2021 - hujakJava cro'21   the best tools for java developers in 2021 - hujak
Java cro'21 the best tools for java developers in 2021 - hujak
 
JavaCro'21 - Java is Here To Stay - HUJAK Keynote
JavaCro'21 - Java is Here To Stay - HUJAK KeynoteJavaCro'21 - Java is Here To Stay - HUJAK Keynote
JavaCro'21 - Java is Here To Stay - HUJAK Keynote
 
Javantura v7 - Behaviour Driven Development with Cucumber - Ivan Lozić
Javantura v7 - Behaviour Driven Development with Cucumber - Ivan LozićJavantura v7 - Behaviour Driven Development with Cucumber - Ivan Lozić
Javantura v7 - Behaviour Driven Development with Cucumber - Ivan Lozić
 
Javantura v7 - The State of Java - Today and Tomowwow - HUJAK's Community Key...
Javantura v7 - The State of Java - Today and Tomowwow - HUJAK's Community Key...Javantura v7 - The State of Java - Today and Tomowwow - HUJAK's Community Key...
Javantura v7 - The State of Java - Today and Tomowwow - HUJAK's Community Key...
 
Javantura v7 - Learning to Scale Yourself: The Journey from Coder to Leader -...
Javantura v7 - Learning to Scale Yourself: The Journey from Coder to Leader -...Javantura v7 - Learning to Scale Yourself: The Journey from Coder to Leader -...
Javantura v7 - Learning to Scale Yourself: The Journey from Coder to Leader -...
 
JavaCro'19 - The State of Java and Software Development in Croatia - Communit...
JavaCro'19 - The State of Java and Software Development in Croatia - Communit...JavaCro'19 - The State of Java and Software Development in Croatia - Communit...
JavaCro'19 - The State of Java and Software Development in Croatia - Communit...
 
Javantura v6 - Java in Croatia and HUJAK - Branko Mihaljević, Aleksander Radovan
Javantura v6 - Java in Croatia and HUJAK - Branko Mihaljević, Aleksander RadovanJavantura v6 - Java in Croatia and HUJAK - Branko Mihaljević, Aleksander Radovan
Javantura v6 - Java in Croatia and HUJAK - Branko Mihaljević, Aleksander Radovan
 
Javantura v6 - On the Aspects of Polyglot Programming and Memory Management i...
Javantura v6 - On the Aspects of Polyglot Programming and Memory Management i...Javantura v6 - On the Aspects of Polyglot Programming and Memory Management i...
Javantura v6 - On the Aspects of Polyglot Programming and Memory Management i...
 
Javantura v6 - Case Study: Marketplace App with Java and Hyperledger Fabric -...
Javantura v6 - Case Study: Marketplace App with Java and Hyperledger Fabric -...Javantura v6 - Case Study: Marketplace App with Java and Hyperledger Fabric -...
Javantura v6 - Case Study: Marketplace App with Java and Hyperledger Fabric -...
 
Javantura v6 - How to help customers report bugs accurately - Miroslav Čerkez...
Javantura v6 - How to help customers report bugs accurately - Miroslav Čerkez...Javantura v6 - How to help customers report bugs accurately - Miroslav Čerkez...
Javantura v6 - How to help customers report bugs accurately - Miroslav Čerkez...
 
Javantura v6 - When remote work really works - the secrets behind successful ...
Javantura v6 - When remote work really works - the secrets behind successful ...Javantura v6 - When remote work really works - the secrets behind successful ...
Javantura v6 - When remote work really works - the secrets behind successful ...
 
Javantura v6 - Kotlin-Java Interop - Matej Vidaković
Javantura v6 - Kotlin-Java Interop - Matej VidakovićJavantura v6 - Kotlin-Java Interop - Matej Vidaković
Javantura v6 - Kotlin-Java Interop - Matej Vidaković
 
Javantura v6 - Spring HATEOAS hypermedia-driven web services, and clients tha...
Javantura v6 - Spring HATEOAS hypermedia-driven web services, and clients tha...Javantura v6 - Spring HATEOAS hypermedia-driven web services, and clients tha...
Javantura v6 - Spring HATEOAS hypermedia-driven web services, and clients tha...
 
Javantura v6 - End to End Continuous Delivery of Microservices for Kubernetes...
Javantura v6 - End to End Continuous Delivery of Microservices for Kubernetes...Javantura v6 - End to End Continuous Delivery of Microservices for Kubernetes...
Javantura v6 - End to End Continuous Delivery of Microservices for Kubernetes...
 
Javantura v6 - Istio Service Mesh - The magic between your microservices - Ma...
Javantura v6 - Istio Service Mesh - The magic between your microservices - Ma...Javantura v6 - Istio Service Mesh - The magic between your microservices - Ma...
Javantura v6 - Istio Service Mesh - The magic between your microservices - Ma...
 
Javantura v6 - Just say it v2 - Pavao Varela Petrac
Javantura v6 - Just say it v2 - Pavao Varela PetracJavantura v6 - Just say it v2 - Pavao Varela Petrac
Javantura v6 - Just say it v2 - Pavao Varela Petrac
 
Javantura v6 - Automation of web apps testing - Hrvoje Ruhek
Javantura v6 - Automation of web apps testing - Hrvoje RuhekJavantura v6 - Automation of web apps testing - Hrvoje Ruhek
Javantura v6 - Automation of web apps testing - Hrvoje Ruhek
 
Javantura v6 - Master the Concepts Behind the Java 10 Challenges and Eliminat...
Javantura v6 - Master the Concepts Behind the Java 10 Challenges and Eliminat...Javantura v6 - Master the Concepts Behind the Java 10 Challenges and Eliminat...
Javantura v6 - Master the Concepts Behind the Java 10 Challenges and Eliminat...
 
Javantura v6 - Building IoT Middleware with Microservices - Mario Kusek
Javantura v6 - Building IoT Middleware with Microservices - Mario KusekJavantura v6 - Building IoT Middleware with Microservices - Mario Kusek
Javantura v6 - Building IoT Middleware with Microservices - Mario Kusek
 
Javantura v6 - JDK 11 & JDK 12 - Dalibor Topic
Javantura v6 - JDK 11 & JDK 12 - Dalibor TopicJavantura v6 - JDK 11 & JDK 12 - Dalibor Topic
Javantura v6 - JDK 11 & JDK 12 - Dalibor Topic
 

Recently uploaded

SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfPrecisely
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 

Recently uploaded (20)

SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 

Javantura v6 - How can you improve the quality of your application - Ioannis Kolaxis

  • 1. How to improve the quality of your application A practical guide for developers Saturday 23rd February 2019, Javantura, Zagreb / Croatia Ioannis Kolaxis – Software Engineer / Senior Expert
  • 2. 1 @IoannisKolaxis What can you do? How to improve software quality? Where do you start?
  • 4. 3 @IoannisKolaxis Do not touch old code! You will probably introduce new defects! Old code is more reliable “If a module is, on the average, a year older than an otherwise similar module, the older module will have roughly a third fewer faults.” T. L. Graves, A. F. Karr, J. S. Marron and H. Siy, "Predicting fault incidence using software change history" in IEEE Transactions on Software Engineering, vol. 26, no. 7, pp. 653-661, Jul 2000.
  • 5. 4 @IoannisKolaxis Stop creating new debt • Install SonarLint plugin in your IDE. • It helps you detect, and fix quality issues as you write code. • Download at: www.sonarlint.org
  • 6. 5 @IoannisKolaxis Stop creating new debt • Setup Quality Gates in SonarQube
  • 7. 6 @IoannisKolaxis • As a developer, where do you spend most of your time? A. Reading existing code, B. Writing new code, C. Waiting for a full build to complete, D.Other Quiz
  • 8. 7 @IoannisKolaxis • As a developer, where do you spend most of your time? A. Reading existing code, B. Writing new code, C. Waiting for a full build to complete, D.Other Quiz
  • 9. 8 @IoannisKolaxis Which parts of your code do you read most often? Just think …
  • 10. 9 @IoannisKolaxis • Use git to find out where you spend most of your development efforts: git log --format=format: --name-only | egrep -v '^$' | sort | uniq -c | sort -r > files_change_frequency.txt 258 usermanagementportlet/…/UserManagement_de.properties 250 usermanagementportlet/…/UserManagement_en.properties 227 usermanagement/…/RetrieveUserTmpltForUsersDataControlImpl.java 205 usermanagement/…/UserManagementImpl.java 154 usermanagement/…/EditUserResourceTemplateRulesBean.java 135 usermanagementportlet/…/AddEditUserBean.java 109 usermanagementportlet/…/ConfigureNewUserResourceBean.java 103 usermanagementportlet/…/addEditUser.jsp Data never lies Commits per file
  • 11. 10 @IoannisKolaxis The pattern From a total of 10.007 files: • 11 files → more than 101 commits • 91 files → 31 < commits < 100 • 455 files → 10 < commits < 30 • 9.450 files → less than 10 commits • Only a few files change frequently! • This is where you spend most of your time!
  • 12. 11 @IoannisKolaxis A well-aimed refactoring will help you: • Spend less time to read code & extend functionality. • Become more productive! Refactor frequently-changing files
  • 13. 12 @IoannisKolaxis • “Churn measures based on counts of lines added, deleted, and modified are very effective for fault prediction.” R. M. Bell, T. J. Ostrand, and E.J. Weyuker, “Does Measuring Code Change Improve Fault Prediction?“, ACM Press, 2011. • Files involved in a lot of bug fixing activities are most likely to be defective R. Moser, W. Pedrycz, and G. Succi, “A Comparative Analysis of the Efficiency of Change Metrics and Static Code Attributes for Defect Prediction“, Proceedings of the 30th International Conference on Software Engineering, 181-190, 2008. Changing files predict system failures
  • 14. 13 @IoannisKolaxis • Do not waste your time testing mature functionality (=components that do not change). • Focus all your testing efforts on the frequently-changing parts; those are most likely to fail! Focus your Quality Assurance efforts Unit Tests Integration Tests E2E Tests
  • 15. 14 @IoannisKolaxis What is the coverage of your new/changing code? Ask the right questions
  • 16. 15 @IoannisKolaxis • Files not changed in the past years → stable components → mature features • Is every mature feature still used by your customers? • If a feature is not used, then delete its code! • Else, extract stable features in separate libraries. Identify stable components
  • 17. 16 @IoannisKolaxis • Save time from your builds. • Achieve faster onboarding of new developers, by: Go faster with deleted/extracted code • Focusing only on actively developed code. • Not having to familiarize with old/stable code.
  • 18. 17 @IoannisKolaxis • Gain more insight, by measuring code complexity for each one of the frequently changing files. • Language-neutral metrics for code complexity: • Number of lines • Number of tabs Measure code complexity
  • 19. 18 @IoannisKolaxis • How many times did you provide a bug fix, by adding a nested conditional in your code? if (…) { for (…) { if (customerSpecificSetup) { // Do some magic, so that the // application works for this customer! } } } Tabs increase complexity
  • 20. 19 @IoannisKolaxis Rising complexity calls for refactoring 227 commits
  • 21. 20 @IoannisKolaxis Our #1 priority for refactoring 205 commits
  • 22. 21 @IoannisKolaxis Our #1 priority for refactoring 6.767 → 8.396 lines 22.421→ 29.310 tabs Sept 2014 205 commits
  • 23. 22 @IoannisKolaxis • Released on 8th November 2006. • > 50 million lines of code. • ~ 2.000 developers. Do you remember Windows Vista?
  • 24. 23 @IoannisKolaxis • Microsoft measured several organizational metrics, and studied their correlation with the defects of Windows Vista. Organizational structure vs Quality Organizational metric Assertion Number of Engineers The more people who touch the code, the lower the quality. Number of Ex-Engineers A large loss of team members affects the knowledge retention, and thus quality. Organization Intersection Factor The more diffused the different organizations contributing code, the lower is the quality. N. Nagappan, B. Murphy, and V.R. Basili, “The Influence of Organizational Structure on Software Quality: An Empirical Case Study“, ACM, 2008. • Can the structure of your organization affect the quality of your software application?
  • 25. 24 @IoannisKolaxis • Organizational metrics are better predictors of failure-proneness than the traditional metrics used so far, such as code coverage, code complexity, etc. Organizational structure impacts Quality Model Precision Organizational structure 86,2% Code coverage 83,8% Code complexity 79,3% Code churn 78,6% Dependencies 74,4% Pre-release bugs 73,8% N. Nagappan, B. Murphy, and V.R. Basili, “The Influence of Organizational Structure on Software Quality: An Empirical Case Study“, ACM, 2008.
  • 26. 25 @IoannisKolaxis • In another research, focused on Windows 7, Microsoft distinguished between the following kinds of developers, depending on their commits for a given component: • Owner: has the most commits to that component. • Major contributor: has more than 5% of total commits. • Minor contributor: has less than 5% of total commits. More organizational metrics C.Bird, N. Nagappan, B. Murphy, H. Gall, and P. Devanbu, “Don’t Touch My Code! Examining the Effects of Code Ownership on Software Quality“, ACM, 2011.
  • 27. 26 @IoannisKolaxis • The researchers concluded that: • “The number of minor contributors has a strong positive relationship with both pre- and post-release failures …” • “Higher levels of ownership for the top contributor to a component results in fewer failures when controlling for the same metrics, but the effect is smaller than the number of minor contributors” Effects of minor contributors C.Bird, N. Nagappan, B. Murphy, H. Gall, and P. Devanbu, “Don’t Touch My Code! Examining the Effects of Code Ownership on Software Quality“, ACM, 2011.
  • 28. 27 @IoannisKolaxis • In one of our software components, we had a total of 427 commits: Gain insight into your components Commits per developer Metric Value Minor contributors 15 Major contributors 6 Total contributors 21 Ownership 20,37% • The top contributing developer made 87 commits: 87/427 = 20,37% ownership
  • 29. 28 @IoannisKolaxis • In another software component, we had a total of 253 commits for the same period: Gain insight into your components Commits per developer Metric Value Minor contributors 3 Major contributors 6 Total contributors 9 Ownership 28,85% • The top contributing developer made 73 commits: 73/253 = 28,85% ownership
  • 30. 29 @IoannisKolaxis • Which component will probably have more defects? • Where would you focus your testing efforts? Know where you are standing … Metric Component A Component B Minor contributors 15 3 Major contributors 6 6 Total contributors 21 9 Ownership 20,37% 28,85%
  • 31. 30 @IoannisKolaxis • More minor contributors → More defects • Bigger ownership → Less defects Beware of minor contributors! Metric Component A Component B Minor contributors 15 3 Major contributors 6 6 Total contributors 21 9 Ownership 20,37% 28,85%
  • 32. 31 @IoannisKolaxis • Minor contributors must be consulting a major contributor of a component before making any changes to it. • Pay more attention when reviewing code submitted by minor contributors. • More extensive testing should be performed for components with low ownership. Use metrics to build better software
  • 33. 32 @IoannisKolaxis • A customer asks for a new feature to be implemented, but the major contributors of that component are not available. What will you do? • Ask from minor contributors, to start implementing this new feature right away, or • Delay the implementation of the feature, until one or more major contributors are available? Planning new features
  • 34. 33 @IoannisKolaxis • Use git to find out all the contributors for a component: git shortlog -s – your_component > contributors.txt 78 Ioannis Kolaxis 27 … 48 … • Or, to limit the results to contributors after a given date (e.g. due to an organizational restructuring) git shortlog -s --after=2018-05-01 -- your_component > contributors.txt Learn your contributors Commits per developer Folder
  • 35. 34 @IoannisKolaxis 1. Stop creating new quality issues. 2. Don’t touch old code. 3. Refactor your most complex, frequently changing files. 4. Focus your testing on frequently changing files. 5. Pay attention to minor contributors. Summary of proposed actions
  • 36. 35 @IoannisKolaxis Now you know where to start! How to improve software quality?
  • 37. Atos, the Atos logo, Atos Codex, Atos Consulting, Atos Worldgrid, Worldline, BlueKiwi, Bull, Canopy the Open Cloud Company, Unify, Yunano, Zero Email, Zero Email Certified and The Zero Email Company are registered trademarks of the Atos group. June 2016. © 2016 Atos. Confidential information owned by Atos, to be used by the recipient only. This document, or any part of it, may not be reproduced, copied, circulated and/or distributed nor quoted without prior written approval from Atos. Thank you! Email : ioannis.kolaxis@atos.net Twitter : @IoannisKolaxis