SlideShare a Scribd company logo
provectus.com
Code quality
Developing code quality process
provectus.com
What is code quality?
• Code style
• Code complexity (size of files/functions, cyclomatic complexity)
• Duplicated code
• Documentation, comments
• Test coverage
provectus.com
Why do we need to control quality of code?
Code quality correlates with technical debt.
Big technical debt leads to bugs and additional efforts required for new functionality.
As result bad code quality means financial loss (transitive).
provectus.com
Java code quality tools
• Code style control: Checkstyle
• Code errors control: PMD, FindBugs
• Test coverage: Jacoco, EMMA, Cobertura
• SonarQube
provectus.com
What does CheckStyle check
• Formatting: indents, braces, etc.
• Unused imports
• Redundant modifiers (e.g. “public” modifier in interfaces)
• Maximum function parameters number
• Magic numbers
• Hidden fields
• Naming conventions
• hashCode() and equals() contract
• Number of lines in classes / functions
• RegExp. checks
provectus.com
Checkstyle not only for java
<module name="Checker">
<module name="RegexpSingleline">
<property name="format"
value="(?i)((VARCHAR2)|(VARCHAR))s*(s*d+s+((char)|(byte)))"/>
<property name="minimum" value="0"/>
<property name="maximum" value="0"/>
<property name="message"value="Don't specify character's size
VARCHAR2(XXX CHAR / BYTE). "/>
</module>
</module>
How we prevented columns declared like following in our SQL changesets.
columnName VARCHAR2(400 BYTE)
provectus.com
What does PMD check
• Double Checked Locking
• return statement in finally block
• Redundant checks, e.g. if (a!=null && method1().equals(a))
• Constructions like new BigInteger()
• Catching of Throwable, NPE, Exception, Error
• Usage implementation types (i.e., HashSet) instead od interface
• Usingusing implementation types (i.e., HashSet); use the interface
• Usage of System.out.println
• Unused parameters, variables, private methods
provectus.com
What does FindBugs check
• Places with defined compareTo() without Object.equals()
• Unclosed streams and Statement objects
• Potential NPE
• Redundant null checks
• Self assignment. Example from our project:
public void setInventoryManager(LocalizingInventoryManager pInventoryManager) {
this.mInventoryManager = mInventoryManager;
}
• Synchronization problems
• Duplicated code in conditional statements
• Dead local variables
provectus.com
FindBugs is really cool
• FindBugs has found that in line 59 null can be potentially passed as parameter. But in 68
line a method called on this object without checking for null.
provectus.com
provectus.com
Merge error found by FindBugs
provectus.com
Redundant check for null
provectus.com
CI build
We have CI job on Jenkins that checks repository every 30 minutes.
If changes were found, CI build runs Checkstyle, PMD, FindBugs and Unit tests.
If build fails, then Jenkins informs dev team about it via email.
provectus.com
SonarQube
First SonarQube was just a web interface for Checkstyle, PMD and FindBugs. But now SonarQube
uses it’s own analyzer and set of rules.
Also SonarQube shows errors diff between analyze runs. And it’s show author for each issue.
provectus.com
provectus.com
What can skilled developer write being in rush or
because of other objective factors
public boolean isXXX(...) {
if ( <condition> ) {
return true;
} else {
return false;
}
}
provectus.com
@Override
public void setPropertyValue(RepositoryItemImpl pItem, Object pValue) {
try {
super.setPropertyValue(pItem, pValue);
}catch(Exception e){
e.printStackTrace();
}
}
Boolean b = <some invocation>;
if (b != null && b.equals(Boolean.TRUE))
provectus.com
What we wanted to do
• Using same coding style on the project
• Prevent new “stupid” problem before code review
• Prevent issues that hardly can be found by human, but can be found automatically
provectus.com
How we started code quality process – steps:
1. Rules filtration
2. Instruction with selected rules
3. Instruction how to use tools and IDE plugins
4. Build script modification in separate branch
5. Merge to master
provectus.com
Selecting of rules for project
ATG doesn’t follow all JCC rules and best practices, that’s why some rules were filtered out, e.g.
ATG defines class version for it’s components like this:
String CLASS_VERSION = "$Id:
//product/DCS/version/9.3/Java/atg/commerce/order/Order.java#3 $$Change: 633147 $";
provectus.com
Code quality tools on our project
• ~60 000 Checkstyle violations
• ~ 2 000 PMD issues
• couldn’t fix all of them
• Rule: threshold value = current # of issues
• build fails if # of violations > threshold
• Rule for merges: threshold value = # of issues after merge
• New ANT task for updating threshold value after merge (temporary and bad solution)
provectus.com
Documentation on wiki
We created wiki pages with detailed information about rules were planning to use. Links pages
were sent to all developer so they could tell their objections.
Also we prepared guide instructions how to install and configure IDE plugins for CheckStyle and
PMD.
provectus.com
How much time has it taken
• Checkstyle:
– selecting rules for our project – 6 hour
– modifying ant script – 8 hours
– creating IDE (Eclipse + Idea) configurations – 2 hours
– Writing instruction on wiki – 2 hours
• PMD:
– selecting rules for our project – 8 hours
– modifying ant script – 2 hours
– creating IDE (Eclipse + Idea) configurations – 2 hours
– writing instruction on wiki – 1 hour
provectus.com
SonarQube on our project
SonarQube can be used to monitor new issues with their authors.
If someone decides to alter threshold value, it will be seen in SonarQube.
provectus.com
Time for developing code quality process
• Checkstyle check was developed in free time and presented as first step of code quality
process
• PMD and FindBugs checks were developed in project time
provectus.com
Managers role in code quality process
• Project manager should understand importance of code quality process, and how negative
growing technical debt is.
• Manager shouldn’t think of code quality process as minor thing that has lowest priority.
• Ideally manager should plan code quality related task as project time.
provectus.com
How to explain the need in code quality to manager
Give to a manager an example how code quality will have to improve situation on project.
E.g. it will reduce a number of bugs related to null-pointer exception.
provectus.com
Formal workflow
Formal process (related to code quality) should be defined:
• Required actions before pushing changes
• What to do if build fails on CI
provectus.com
Workflow on our project
• On our project each developer should perform Checkstyle+PMD check (using Ant task)
before pushing changes.
• FindBugs check is implemented as separate task, and it doesn’t fail build.
• If Checkstyle or PMD fails on CI, developers are informed via email and CCTray.
provectus.com
Refactoring
Code quality process has two goals:
• Don’t increase technical debt by adding new issues
• Get rid of existing problems by refactor code
Many developers afraid of refactoring because it can cause regression.
Part of code that is under refactoring should be covered with unit tests for all cases. It takes
much time, but it’s the only right way.
provectus.com
Human factor
Any rules about coding should be checked automatically. Don’t try to solve anything by
agreement.
On our project most developers ignored emails regarding Checkstyle and PMD, until their build
failed.
provectus.com
Summary
• Fix styling problems as soon as possible. Don’t use violations threshold with Checkstyle
• Both developers and managers should be involved in code quality process: metrics,
refactoring tasks
• Information about code quality process should be delivered to developers in the most
convenient (for them) way: explanation on small meeting, presentation, short article on wiki,
video

More Related Content

What's hot

Code coverage
Code coverageCode coverage
Code coverage
Vijayan Reddy
 
Code coverage & tools
Code coverage & toolsCode coverage & tools
Code coverage & tools
Rajesh Kumar
 
Quick Intro to Clean Coding
Quick Intro to Clean CodingQuick Intro to Clean Coding
Quick Intro to Clean Coding
Ecommerce Solution Provider SysIQ
 
Improving Code Quality In Medical Software Through Code Reviews - Vincit Teat...
Improving Code Quality In Medical Software Through Code Reviews - Vincit Teat...Improving Code Quality In Medical Software Through Code Reviews - Vincit Teat...
Improving Code Quality In Medical Software Through Code Reviews - Vincit Teat...
VincitOy
 
Measuring Code Quality in WTF/min.
Measuring Code Quality in WTF/min. Measuring Code Quality in WTF/min.
Measuring Code Quality in WTF/min.
David Gómez García
 
TDD refresher
TDD refresherTDD refresher
TDD refresher
Kerry Buckley
 
Code Review
Code ReviewCode Review
Code Review
Ravi Raj
 
Effective code reviews
Effective code reviewsEffective code reviews
Effective code reviews
Sebastian Marek
 
Code quality
Code quality Code quality
Code quality
Sunil Prasad
 
TDD vs. ATDD - What, Why, Which, When & Where
TDD vs. ATDD - What, Why, Which, When & WhereTDD vs. ATDD - What, Why, Which, When & Where
TDD vs. ATDD - What, Why, Which, When & Where
Daniel Davis
 
Test driven development vs Behavior driven development
Test driven development vs Behavior driven developmentTest driven development vs Behavior driven development
Test driven development vs Behavior driven development
Gallop Solutions
 
Refactoring legacy code driven by tests - ITA
Refactoring legacy code driven by tests -  ITARefactoring legacy code driven by tests -  ITA
Refactoring legacy code driven by tests - ITA
Luca Minudel
 
Big Ball of Mud: Software Maintenance Nightmares
Big Ball of Mud: Software Maintenance NightmaresBig Ball of Mud: Software Maintenance Nightmares
Big Ball of Mud: Software Maintenance Nightmares
Gonzalo Rodríguez
 
Raising the Bar
Raising the BarRaising the Bar
Raising the Bar
Alexandru Bolboaca
 
Documenting Code - Patterns and Anti-patterns - NLPW 2016
Documenting Code - Patterns and Anti-patterns - NLPW 2016Documenting Code - Patterns and Anti-patterns - NLPW 2016
Documenting Code - Patterns and Anti-patterns - NLPW 2016
Søren Lund
 
Tdd
TddTdd
Java code coverage with JCov. Implementation details and use cases.
Java code coverage with JCov. Implementation details and use cases.Java code coverage with JCov. Implementation details and use cases.
Java code coverage with JCov. Implementation details and use cases.
Alexandre (Shura) Iline
 
Designing with tests
Designing with testsDesigning with tests
Designing with tests
Dror Helper
 
Agile development with Ruby
Agile development with RubyAgile development with Ruby
Agile development with Ruby
khelll
 
TDD with RSpec
TDD with RSpecTDD with RSpec
TDD with RSpec
Rachid Calazans
 

What's hot (20)

Code coverage
Code coverageCode coverage
Code coverage
 
Code coverage & tools
Code coverage & toolsCode coverage & tools
Code coverage & tools
 
Quick Intro to Clean Coding
Quick Intro to Clean CodingQuick Intro to Clean Coding
Quick Intro to Clean Coding
 
Improving Code Quality In Medical Software Through Code Reviews - Vincit Teat...
Improving Code Quality In Medical Software Through Code Reviews - Vincit Teat...Improving Code Quality In Medical Software Through Code Reviews - Vincit Teat...
Improving Code Quality In Medical Software Through Code Reviews - Vincit Teat...
 
Measuring Code Quality in WTF/min.
Measuring Code Quality in WTF/min. Measuring Code Quality in WTF/min.
Measuring Code Quality in WTF/min.
 
TDD refresher
TDD refresherTDD refresher
TDD refresher
 
Code Review
Code ReviewCode Review
Code Review
 
Effective code reviews
Effective code reviewsEffective code reviews
Effective code reviews
 
Code quality
Code quality Code quality
Code quality
 
TDD vs. ATDD - What, Why, Which, When & Where
TDD vs. ATDD - What, Why, Which, When & WhereTDD vs. ATDD - What, Why, Which, When & Where
TDD vs. ATDD - What, Why, Which, When & Where
 
Test driven development vs Behavior driven development
Test driven development vs Behavior driven developmentTest driven development vs Behavior driven development
Test driven development vs Behavior driven development
 
Refactoring legacy code driven by tests - ITA
Refactoring legacy code driven by tests -  ITARefactoring legacy code driven by tests -  ITA
Refactoring legacy code driven by tests - ITA
 
Big Ball of Mud: Software Maintenance Nightmares
Big Ball of Mud: Software Maintenance NightmaresBig Ball of Mud: Software Maintenance Nightmares
Big Ball of Mud: Software Maintenance Nightmares
 
Raising the Bar
Raising the BarRaising the Bar
Raising the Bar
 
Documenting Code - Patterns and Anti-patterns - NLPW 2016
Documenting Code - Patterns and Anti-patterns - NLPW 2016Documenting Code - Patterns and Anti-patterns - NLPW 2016
Documenting Code - Patterns and Anti-patterns - NLPW 2016
 
Tdd
TddTdd
Tdd
 
Java code coverage with JCov. Implementation details and use cases.
Java code coverage with JCov. Implementation details and use cases.Java code coverage with JCov. Implementation details and use cases.
Java code coverage with JCov. Implementation details and use cases.
 
Designing with tests
Designing with testsDesigning with tests
Designing with tests
 
Agile development with Ruby
Agile development with RubyAgile development with Ruby
Agile development with Ruby
 
TDD with RSpec
TDD with RSpecTDD with RSpec
TDD with RSpec
 

Viewers also liked

Всеволод Поляков: “Организованный DevOps”
Всеволод Поляков: “Организованный DevOps”Всеволод Поляков: “Организованный DevOps”
Всеволод Поляков: “Организованный DevOps”
Provectus
 
Ростислав Фридман: “Kubernetes как средство управления микросервисами"
Ростислав Фридман: “Kubernetes как средство управления микросервисами"Ростислав Фридман: “Kubernetes как средство управления микросервисами"
Ростислав Фридман: “Kubernetes как средство управления микросервисами"
Provectus
 
Станислав Иващенок: "Serverless в dev ops на примере сервисов amazon"
Станислав Иващенок: "Serverless в dev ops на примере сервисов amazon"Станислав Иващенок: "Serverless в dev ops на примере сервисов amazon"
Станислав Иващенок: "Serverless в dev ops на примере сервисов amazon"
Provectus
 
Oles’ Petriv (Data Scientist at VideoGorillas): “ Visualization Methods and D...
Oles’ Petriv (Data Scientist at VideoGorillas): “ Visualization Methods and D...Oles’ Petriv (Data Scientist at VideoGorillas): “ Visualization Methods and D...
Oles’ Petriv (Data Scientist at VideoGorillas): “ Visualization Methods and D...
Provectus
 
Improving Code Quality Through Effective Review Process
Improving Code Quality Through Effective  Review ProcessImproving Code Quality Through Effective  Review Process
Improving Code Quality Through Effective Review Process
Dr. Syed Hassan Amin
 
SonarQube - The leading platform for Continuous Code Quality
SonarQube - The leading platform for Continuous Code QualitySonarQube - The leading platform for Continuous Code Quality
SonarQube - The leading platform for Continuous Code Quality
Larry Nung
 
Тимофей Лавренюк (Provectus): "Progressive Web Apps in Production"
Тимофей Лавренюк (Provectus): "Progressive Web Apps in Production"Тимофей Лавренюк (Provectus): "Progressive Web Apps in Production"
Тимофей Лавренюк (Provectus): "Progressive Web Apps in Production"
Provectus
 
Agile transformation_keynote
Agile transformation_keynoteAgile transformation_keynote
Agile transformation_keynote
Provectus
 
[Expert Fridays] Python MeetUp - Леонид Блохин: "Нейросети на питоне: пфф easy"
[Expert Fridays] Python MeetUp - Леонид Блохин: "Нейросети на питоне: пфф  easy"[Expert Fridays] Python MeetUp - Леонид Блохин: "Нейросети на питоне: пфф  easy"
[Expert Fridays] Python MeetUp - Леонид Блохин: "Нейросети на питоне: пфф easy"
Provectus
 
Code Quality Analysis
Code Quality AnalysisCode Quality Analysis
Code Quality Analysis
martin_j_andrews
 
Code Quality Learn, Measure And Organize Awareness
Code Quality   Learn, Measure And Organize AwarenessCode Quality   Learn, Measure And Organize Awareness
Code Quality Learn, Measure And Organize Awareness
Jaibeer Malik
 
Code Quality Assurance v4 (2013)
Code Quality Assurance v4 (2013)Code Quality Assurance v4 (2013)
Code Quality Assurance v4 (2013)
Peter Kofler
 
Managing code quality with SonarQube - Radu Vunvulea
Managing code quality with SonarQube - Radu VunvuleaManaging code quality with SonarQube - Radu Vunvulea
Managing code quality with SonarQube - Radu Vunvulea
ITSpark Community
 
User-Perceived Source Code Quality Estimation based on Static Analysis Metrics
User-Perceived Source Code Quality Estimation based on Static Analysis MetricsUser-Perceived Source Code Quality Estimation based on Static Analysis Metrics
User-Perceived Source Code Quality Estimation based on Static Analysis Metrics
ISSEL
 
Track code quality with SonarQube
Track code quality with SonarQubeTrack code quality with SonarQube
Track code quality with SonarQube
Dmytro Patserkovskyi
 
Measuring the Code Quality Using Software Metrics
Measuring the Code Quality Using Software MetricsMeasuring the Code Quality Using Software Metrics
Measuring the Code Quality Using Software Metrics
Geetha Anjali
 
Grigol modebadze. cv
Grigol modebadze. cvGrigol modebadze. cv
Grigol modebadze. cv
Grigol Modebadze
 
Станислав Иващенко: “Kubernetes как облако для CI”
Станислав Иващенко: “Kubernetes как облако для CI” Станислав Иващенко: “Kubernetes как облако для CI”
Станислав Иващенко: “Kubernetes как облако для CI”
Provectus
 
Fundamentals of Investments Summary
Fundamentals of Investments SummaryFundamentals of Investments Summary
Fundamentals of Investments Summary
Josue654
 
883 THISTLE DOWN CIRCLE - Sept 10 (EXISTING)
883 THISTLE DOWN CIRCLE - Sept 10 (EXISTING)883 THISTLE DOWN CIRCLE - Sept 10 (EXISTING)
883 THISTLE DOWN CIRCLE - Sept 10 (EXISTING)Jonathan Mohabir
 

Viewers also liked (20)

Всеволод Поляков: “Организованный DevOps”
Всеволод Поляков: “Организованный DevOps”Всеволод Поляков: “Организованный DevOps”
Всеволод Поляков: “Организованный DevOps”
 
Ростислав Фридман: “Kubernetes как средство управления микросервисами"
Ростислав Фридман: “Kubernetes как средство управления микросервисами"Ростислав Фридман: “Kubernetes как средство управления микросервисами"
Ростислав Фридман: “Kubernetes как средство управления микросервисами"
 
Станислав Иващенок: "Serverless в dev ops на примере сервисов amazon"
Станислав Иващенок: "Serverless в dev ops на примере сервисов amazon"Станислав Иващенок: "Serverless в dev ops на примере сервисов amazon"
Станислав Иващенок: "Serverless в dev ops на примере сервисов amazon"
 
Oles’ Petriv (Data Scientist at VideoGorillas): “ Visualization Methods and D...
Oles’ Petriv (Data Scientist at VideoGorillas): “ Visualization Methods and D...Oles’ Petriv (Data Scientist at VideoGorillas): “ Visualization Methods and D...
Oles’ Petriv (Data Scientist at VideoGorillas): “ Visualization Methods and D...
 
Improving Code Quality Through Effective Review Process
Improving Code Quality Through Effective  Review ProcessImproving Code Quality Through Effective  Review Process
Improving Code Quality Through Effective Review Process
 
SonarQube - The leading platform for Continuous Code Quality
SonarQube - The leading platform for Continuous Code QualitySonarQube - The leading platform for Continuous Code Quality
SonarQube - The leading platform for Continuous Code Quality
 
Тимофей Лавренюк (Provectus): "Progressive Web Apps in Production"
Тимофей Лавренюк (Provectus): "Progressive Web Apps in Production"Тимофей Лавренюк (Provectus): "Progressive Web Apps in Production"
Тимофей Лавренюк (Provectus): "Progressive Web Apps in Production"
 
Agile transformation_keynote
Agile transformation_keynoteAgile transformation_keynote
Agile transformation_keynote
 
[Expert Fridays] Python MeetUp - Леонид Блохин: "Нейросети на питоне: пфф easy"
[Expert Fridays] Python MeetUp - Леонид Блохин: "Нейросети на питоне: пфф  easy"[Expert Fridays] Python MeetUp - Леонид Блохин: "Нейросети на питоне: пфф  easy"
[Expert Fridays] Python MeetUp - Леонид Блохин: "Нейросети на питоне: пфф easy"
 
Code Quality Analysis
Code Quality AnalysisCode Quality Analysis
Code Quality Analysis
 
Code Quality Learn, Measure And Organize Awareness
Code Quality   Learn, Measure And Organize AwarenessCode Quality   Learn, Measure And Organize Awareness
Code Quality Learn, Measure And Organize Awareness
 
Code Quality Assurance v4 (2013)
Code Quality Assurance v4 (2013)Code Quality Assurance v4 (2013)
Code Quality Assurance v4 (2013)
 
Managing code quality with SonarQube - Radu Vunvulea
Managing code quality with SonarQube - Radu VunvuleaManaging code quality with SonarQube - Radu Vunvulea
Managing code quality with SonarQube - Radu Vunvulea
 
User-Perceived Source Code Quality Estimation based on Static Analysis Metrics
User-Perceived Source Code Quality Estimation based on Static Analysis MetricsUser-Perceived Source Code Quality Estimation based on Static Analysis Metrics
User-Perceived Source Code Quality Estimation based on Static Analysis Metrics
 
Track code quality with SonarQube
Track code quality with SonarQubeTrack code quality with SonarQube
Track code quality with SonarQube
 
Measuring the Code Quality Using Software Metrics
Measuring the Code Quality Using Software MetricsMeasuring the Code Quality Using Software Metrics
Measuring the Code Quality Using Software Metrics
 
Grigol modebadze. cv
Grigol modebadze. cvGrigol modebadze. cv
Grigol modebadze. cv
 
Станислав Иващенко: “Kubernetes как облако для CI”
Станислав Иващенко: “Kubernetes как облако для CI” Станислав Иващенко: “Kubernetes как облако для CI”
Станислав Иващенко: “Kubernetes как облако для CI”
 
Fundamentals of Investments Summary
Fundamentals of Investments SummaryFundamentals of Investments Summary
Fundamentals of Investments Summary
 
883 THISTLE DOWN CIRCLE - Sept 10 (EXISTING)
883 THISTLE DOWN CIRCLE - Sept 10 (EXISTING)883 THISTLE DOWN CIRCLE - Sept 10 (EXISTING)
883 THISTLE DOWN CIRCLE - Sept 10 (EXISTING)
 

Similar to Code quality

Technical debt management strategies
Technical debt management strategiesTechnical debt management strategies
Technical debt management strategies
Raquel Pau
 
10 Reasons You MUST Consider Pattern-Aware Programming
10 Reasons You MUST Consider Pattern-Aware Programming10 Reasons You MUST Consider Pattern-Aware Programming
10 Reasons You MUST Consider Pattern-Aware Programming
PostSharp Technologies
 
How to improve code quality for iOS apps?
How to improve code quality for iOS apps?How to improve code quality for iOS apps?
How to improve code quality for iOS apps?
Kate Semizhon
 
High Productivity Web Development Workflow
High Productivity Web Development WorkflowHigh Productivity Web Development Workflow
High Productivity Web Development Workflow
Vũ Nguyễn
 
High productivity web development workflow - JavaScript Meetup Saigon 2014
High productivity web development workflow - JavaScript Meetup Saigon 2014High productivity web development workflow - JavaScript Meetup Saigon 2014
High productivity web development workflow - JavaScript Meetup Saigon 2014
Oliver N
 
Dev ops presentation
Dev ops presentationDev ops presentation
Dev ops presentation
Ahmed Kamel
 
Test-Driven Code Review: An Empirical Study
Test-Driven Code Review: An Empirical StudyTest-Driven Code Review: An Empirical Study
Test-Driven Code Review: An Empirical Study
Delft University of Technology
 
AdaCore Paris Tech Day 2016: Jose Ruiz - QGen Tech Update
AdaCore Paris Tech Day 2016: Jose Ruiz - QGen Tech UpdateAdaCore Paris Tech Day 2016: Jose Ruiz - QGen Tech Update
AdaCore Paris Tech Day 2016: Jose Ruiz - QGen Tech Update
jamieayre
 
Enhance Your Code Quality with Code Contracts
Enhance Your Code Quality with Code ContractsEnhance Your Code Quality with Code Contracts
Enhance Your Code Quality with Code Contracts
Eran Stiller
 
Pragmatic Code Coverage
Pragmatic Code CoveragePragmatic Code Coverage
Pragmatic Code Coverage
Alexandre (Shura) Iline
 
Old code doesn't stink
Old code doesn't stinkOld code doesn't stink
Old code doesn't stink
Martin Gutenbrunner
 
Code Refactoring
Code RefactoringCode Refactoring
Code Refactoring
Milan Vukoje
 
How to write good quality code
How to write good quality codeHow to write good quality code
How to write good quality code
Hayden Bleasel
 
What’s eating python performance
What’s eating python performanceWhat’s eating python performance
What’s eating python performance
Piotr Przymus
 
Bag it Tag It Put it : Project Tracking One Click away
Bag it Tag It Put it : Project Tracking One Click away Bag it Tag It Put it : Project Tracking One Click away
Bag it Tag It Put it : Project Tracking One Click away
Abhishek Bakshi
 
Enter the Team City
Enter the Team CityEnter the Team City
Enter the Team City
Kashif Ali Siddiqui
 
Использование AzureDevOps при разработке микросервисных приложений
Использование AzureDevOps при разработке микросервисных приложенийИспользование AzureDevOps при разработке микросервисных приложений
Использование AzureDevOps при разработке микросервисных приложений
Vitebsk Miniq
 
Groovy In the Cloud
Groovy In the CloudGroovy In the Cloud
Groovy In the Cloud
Jim Driscoll
 
Functional verification techniques EW16 session
Functional verification techniques  EW16 sessionFunctional verification techniques  EW16 session
Functional verification techniques EW16 session
Sameh El-Ashry
 
(automatic) Testing: from business to university and back
(automatic) Testing: from business to university and back(automatic) Testing: from business to university and back
(automatic) Testing: from business to university and back
David Rodenas
 

Similar to Code quality (20)

Technical debt management strategies
Technical debt management strategiesTechnical debt management strategies
Technical debt management strategies
 
10 Reasons You MUST Consider Pattern-Aware Programming
10 Reasons You MUST Consider Pattern-Aware Programming10 Reasons You MUST Consider Pattern-Aware Programming
10 Reasons You MUST Consider Pattern-Aware Programming
 
How to improve code quality for iOS apps?
How to improve code quality for iOS apps?How to improve code quality for iOS apps?
How to improve code quality for iOS apps?
 
High Productivity Web Development Workflow
High Productivity Web Development WorkflowHigh Productivity Web Development Workflow
High Productivity Web Development Workflow
 
High productivity web development workflow - JavaScript Meetup Saigon 2014
High productivity web development workflow - JavaScript Meetup Saigon 2014High productivity web development workflow - JavaScript Meetup Saigon 2014
High productivity web development workflow - JavaScript Meetup Saigon 2014
 
Dev ops presentation
Dev ops presentationDev ops presentation
Dev ops presentation
 
Test-Driven Code Review: An Empirical Study
Test-Driven Code Review: An Empirical StudyTest-Driven Code Review: An Empirical Study
Test-Driven Code Review: An Empirical Study
 
AdaCore Paris Tech Day 2016: Jose Ruiz - QGen Tech Update
AdaCore Paris Tech Day 2016: Jose Ruiz - QGen Tech UpdateAdaCore Paris Tech Day 2016: Jose Ruiz - QGen Tech Update
AdaCore Paris Tech Day 2016: Jose Ruiz - QGen Tech Update
 
Enhance Your Code Quality with Code Contracts
Enhance Your Code Quality with Code ContractsEnhance Your Code Quality with Code Contracts
Enhance Your Code Quality with Code Contracts
 
Pragmatic Code Coverage
Pragmatic Code CoveragePragmatic Code Coverage
Pragmatic Code Coverage
 
Old code doesn't stink
Old code doesn't stinkOld code doesn't stink
Old code doesn't stink
 
Code Refactoring
Code RefactoringCode Refactoring
Code Refactoring
 
How to write good quality code
How to write good quality codeHow to write good quality code
How to write good quality code
 
What’s eating python performance
What’s eating python performanceWhat’s eating python performance
What’s eating python performance
 
Bag it Tag It Put it : Project Tracking One Click away
Bag it Tag It Put it : Project Tracking One Click away Bag it Tag It Put it : Project Tracking One Click away
Bag it Tag It Put it : Project Tracking One Click away
 
Enter the Team City
Enter the Team CityEnter the Team City
Enter the Team City
 
Использование AzureDevOps при разработке микросервисных приложений
Использование AzureDevOps при разработке микросервисных приложенийИспользование AzureDevOps при разработке микросервисных приложений
Использование AzureDevOps при разработке микросервисных приложений
 
Groovy In the Cloud
Groovy In the CloudGroovy In the Cloud
Groovy In the Cloud
 
Functional verification techniques EW16 session
Functional verification techniques  EW16 sessionFunctional verification techniques  EW16 session
Functional verification techniques EW16 session
 
(automatic) Testing: from business to university and back
(automatic) Testing: from business to university and back(automatic) Testing: from business to university and back
(automatic) Testing: from business to university and back
 

More from Provectus

Choosing the right IDP Solution
Choosing the right IDP SolutionChoosing the right IDP Solution
Choosing the right IDP Solution
Provectus
 
Intelligent Document Processing in Healthcare. Choosing the Right Solutions.
Intelligent Document Processing in Healthcare. Choosing the Right Solutions.Intelligent Document Processing in Healthcare. Choosing the Right Solutions.
Intelligent Document Processing in Healthcare. Choosing the Right Solutions.
Provectus
 
Choosing the Right Document Processing Solution for Healthcare Organizations
Choosing the Right Document Processing Solution for Healthcare OrganizationsChoosing the Right Document Processing Solution for Healthcare Organizations
Choosing the Right Document Processing Solution for Healthcare Organizations
Provectus
 
MLOps and Data Quality: Deploying Reliable ML Models in Production
MLOps and Data Quality: Deploying Reliable ML Models in ProductionMLOps and Data Quality: Deploying Reliable ML Models in Production
MLOps and Data Quality: Deploying Reliable ML Models in Production
Provectus
 
AI Stack on AWS: Amazon SageMaker and Beyond
AI Stack on AWS: Amazon SageMaker and BeyondAI Stack on AWS: Amazon SageMaker and Beyond
AI Stack on AWS: Amazon SageMaker and Beyond
Provectus
 
Feature Store as a Data Foundation for Machine Learning
Feature Store as a Data Foundation for Machine LearningFeature Store as a Data Foundation for Machine Learning
Feature Store as a Data Foundation for Machine Learning
Provectus
 
MLOps and Reproducible ML on AWS with Kubeflow and SageMaker
MLOps and Reproducible ML on AWS with Kubeflow and SageMakerMLOps and Reproducible ML on AWS with Kubeflow and SageMaker
MLOps and Reproducible ML on AWS with Kubeflow and SageMaker
Provectus
 
Cost Optimization for Apache Hadoop/Spark Workloads with Amazon EMR
Cost Optimization for Apache Hadoop/Spark Workloads with Amazon EMRCost Optimization for Apache Hadoop/Spark Workloads with Amazon EMR
Cost Optimization for Apache Hadoop/Spark Workloads with Amazon EMR
Provectus
 
ODSC webinar "Kubeflow, MLFlow and Beyond — augmenting ML delivery" Stepan Pu...
ODSC webinar "Kubeflow, MLFlow and Beyond — augmenting ML delivery" Stepan Pu...ODSC webinar "Kubeflow, MLFlow and Beyond — augmenting ML delivery" Stepan Pu...
ODSC webinar "Kubeflow, MLFlow and Beyond — augmenting ML delivery" Stepan Pu...
Provectus
 
"Building a Modern Data platform in the Cloud", Alex Casalboni, AWS Dev Day K...
"Building a Modern Data platform in the Cloud", Alex Casalboni, AWS Dev Day K..."Building a Modern Data platform in the Cloud", Alex Casalboni, AWS Dev Day K...
"Building a Modern Data platform in the Cloud", Alex Casalboni, AWS Dev Day K...
Provectus
 
"How to build a global serverless service", Alex Casalboni, AWS Dev Day Kyiv ...
"How to build a global serverless service", Alex Casalboni, AWS Dev Day Kyiv ..."How to build a global serverless service", Alex Casalboni, AWS Dev Day Kyiv ...
"How to build a global serverless service", Alex Casalboni, AWS Dev Day Kyiv ...
Provectus
 
"Automating AWS Infrastructure with PowerShell", Martin Beeby, AWS Dev Day Ky...
"Automating AWS Infrastructure with PowerShell", Martin Beeby, AWS Dev Day Ky..."Automating AWS Infrastructure with PowerShell", Martin Beeby, AWS Dev Day Ky...
"Automating AWS Infrastructure with PowerShell", Martin Beeby, AWS Dev Day Ky...
Provectus
 
"Analyzing your web and application logs", Javier Ramirez, AWS Dev Day Kyiv 2...
"Analyzing your web and application logs", Javier Ramirez, AWS Dev Day Kyiv 2..."Analyzing your web and application logs", Javier Ramirez, AWS Dev Day Kyiv 2...
"Analyzing your web and application logs", Javier Ramirez, AWS Dev Day Kyiv 2...
Provectus
 
"Resiliency and Availability Design Patterns for the Cloud", Sebastien Storma...
"Resiliency and Availability Design Patterns for the Cloud", Sebastien Storma..."Resiliency and Availability Design Patterns for the Cloud", Sebastien Storma...
"Resiliency and Availability Design Patterns for the Cloud", Sebastien Storma...
Provectus
 
"Architecting SaaS solutions on AWS", Oleksandr Mykhalchuk, AWS Dev Day Kyiv ...
"Architecting SaaS solutions on AWS", Oleksandr Mykhalchuk, AWS Dev Day Kyiv ..."Architecting SaaS solutions on AWS", Oleksandr Mykhalchuk, AWS Dev Day Kyiv ...
"Architecting SaaS solutions on AWS", Oleksandr Mykhalchuk, AWS Dev Day Kyiv ...
Provectus
 
"Developing with .NET Core on AWS", Martin Beeby, AWS Dev Day Kyiv 2019
"Developing with .NET Core on AWS", Martin Beeby, AWS Dev Day Kyiv 2019"Developing with .NET Core on AWS", Martin Beeby, AWS Dev Day Kyiv 2019
"Developing with .NET Core on AWS", Martin Beeby, AWS Dev Day Kyiv 2019
Provectus
 
"How to build real-time backends", Martin Beeby, AWS Dev Day Kyiv 2019
"How to build real-time backends", Martin Beeby, AWS Dev Day Kyiv 2019"How to build real-time backends", Martin Beeby, AWS Dev Day Kyiv 2019
"How to build real-time backends", Martin Beeby, AWS Dev Day Kyiv 2019
Provectus
 
"Integrate your front end apps with serverless backend in the cloud", Sebasti...
"Integrate your front end apps with serverless backend in the cloud", Sebasti..."Integrate your front end apps with serverless backend in the cloud", Sebasti...
"Integrate your front end apps with serverless backend in the cloud", Sebasti...
Provectus
 
"Scaling ML from 0 to millions of users", Julien Simon, AWS Dev Day Kyiv 2019
"Scaling ML from 0 to millions of users", Julien Simon, AWS Dev Day Kyiv 2019"Scaling ML from 0 to millions of users", Julien Simon, AWS Dev Day Kyiv 2019
"Scaling ML from 0 to millions of users", Julien Simon, AWS Dev Day Kyiv 2019
Provectus
 
How to implement authorization in your backend with AWS IAM
How to implement authorization in your backend with AWS IAMHow to implement authorization in your backend with AWS IAM
How to implement authorization in your backend with AWS IAM
Provectus
 

More from Provectus (20)

Choosing the right IDP Solution
Choosing the right IDP SolutionChoosing the right IDP Solution
Choosing the right IDP Solution
 
Intelligent Document Processing in Healthcare. Choosing the Right Solutions.
Intelligent Document Processing in Healthcare. Choosing the Right Solutions.Intelligent Document Processing in Healthcare. Choosing the Right Solutions.
Intelligent Document Processing in Healthcare. Choosing the Right Solutions.
 
Choosing the Right Document Processing Solution for Healthcare Organizations
Choosing the Right Document Processing Solution for Healthcare OrganizationsChoosing the Right Document Processing Solution for Healthcare Organizations
Choosing the Right Document Processing Solution for Healthcare Organizations
 
MLOps and Data Quality: Deploying Reliable ML Models in Production
MLOps and Data Quality: Deploying Reliable ML Models in ProductionMLOps and Data Quality: Deploying Reliable ML Models in Production
MLOps and Data Quality: Deploying Reliable ML Models in Production
 
AI Stack on AWS: Amazon SageMaker and Beyond
AI Stack on AWS: Amazon SageMaker and BeyondAI Stack on AWS: Amazon SageMaker and Beyond
AI Stack on AWS: Amazon SageMaker and Beyond
 
Feature Store as a Data Foundation for Machine Learning
Feature Store as a Data Foundation for Machine LearningFeature Store as a Data Foundation for Machine Learning
Feature Store as a Data Foundation for Machine Learning
 
MLOps and Reproducible ML on AWS with Kubeflow and SageMaker
MLOps and Reproducible ML on AWS with Kubeflow and SageMakerMLOps and Reproducible ML on AWS with Kubeflow and SageMaker
MLOps and Reproducible ML on AWS with Kubeflow and SageMaker
 
Cost Optimization for Apache Hadoop/Spark Workloads with Amazon EMR
Cost Optimization for Apache Hadoop/Spark Workloads with Amazon EMRCost Optimization for Apache Hadoop/Spark Workloads with Amazon EMR
Cost Optimization for Apache Hadoop/Spark Workloads with Amazon EMR
 
ODSC webinar "Kubeflow, MLFlow and Beyond — augmenting ML delivery" Stepan Pu...
ODSC webinar "Kubeflow, MLFlow and Beyond — augmenting ML delivery" Stepan Pu...ODSC webinar "Kubeflow, MLFlow and Beyond — augmenting ML delivery" Stepan Pu...
ODSC webinar "Kubeflow, MLFlow and Beyond — augmenting ML delivery" Stepan Pu...
 
"Building a Modern Data platform in the Cloud", Alex Casalboni, AWS Dev Day K...
"Building a Modern Data platform in the Cloud", Alex Casalboni, AWS Dev Day K..."Building a Modern Data platform in the Cloud", Alex Casalboni, AWS Dev Day K...
"Building a Modern Data platform in the Cloud", Alex Casalboni, AWS Dev Day K...
 
"How to build a global serverless service", Alex Casalboni, AWS Dev Day Kyiv ...
"How to build a global serverless service", Alex Casalboni, AWS Dev Day Kyiv ..."How to build a global serverless service", Alex Casalboni, AWS Dev Day Kyiv ...
"How to build a global serverless service", Alex Casalboni, AWS Dev Day Kyiv ...
 
"Automating AWS Infrastructure with PowerShell", Martin Beeby, AWS Dev Day Ky...
"Automating AWS Infrastructure with PowerShell", Martin Beeby, AWS Dev Day Ky..."Automating AWS Infrastructure with PowerShell", Martin Beeby, AWS Dev Day Ky...
"Automating AWS Infrastructure with PowerShell", Martin Beeby, AWS Dev Day Ky...
 
"Analyzing your web and application logs", Javier Ramirez, AWS Dev Day Kyiv 2...
"Analyzing your web and application logs", Javier Ramirez, AWS Dev Day Kyiv 2..."Analyzing your web and application logs", Javier Ramirez, AWS Dev Day Kyiv 2...
"Analyzing your web and application logs", Javier Ramirez, AWS Dev Day Kyiv 2...
 
"Resiliency and Availability Design Patterns for the Cloud", Sebastien Storma...
"Resiliency and Availability Design Patterns for the Cloud", Sebastien Storma..."Resiliency and Availability Design Patterns for the Cloud", Sebastien Storma...
"Resiliency and Availability Design Patterns for the Cloud", Sebastien Storma...
 
"Architecting SaaS solutions on AWS", Oleksandr Mykhalchuk, AWS Dev Day Kyiv ...
"Architecting SaaS solutions on AWS", Oleksandr Mykhalchuk, AWS Dev Day Kyiv ..."Architecting SaaS solutions on AWS", Oleksandr Mykhalchuk, AWS Dev Day Kyiv ...
"Architecting SaaS solutions on AWS", Oleksandr Mykhalchuk, AWS Dev Day Kyiv ...
 
"Developing with .NET Core on AWS", Martin Beeby, AWS Dev Day Kyiv 2019
"Developing with .NET Core on AWS", Martin Beeby, AWS Dev Day Kyiv 2019"Developing with .NET Core on AWS", Martin Beeby, AWS Dev Day Kyiv 2019
"Developing with .NET Core on AWS", Martin Beeby, AWS Dev Day Kyiv 2019
 
"How to build real-time backends", Martin Beeby, AWS Dev Day Kyiv 2019
"How to build real-time backends", Martin Beeby, AWS Dev Day Kyiv 2019"How to build real-time backends", Martin Beeby, AWS Dev Day Kyiv 2019
"How to build real-time backends", Martin Beeby, AWS Dev Day Kyiv 2019
 
"Integrate your front end apps with serverless backend in the cloud", Sebasti...
"Integrate your front end apps with serverless backend in the cloud", Sebasti..."Integrate your front end apps with serverless backend in the cloud", Sebasti...
"Integrate your front end apps with serverless backend in the cloud", Sebasti...
 
"Scaling ML from 0 to millions of users", Julien Simon, AWS Dev Day Kyiv 2019
"Scaling ML from 0 to millions of users", Julien Simon, AWS Dev Day Kyiv 2019"Scaling ML from 0 to millions of users", Julien Simon, AWS Dev Day Kyiv 2019
"Scaling ML from 0 to millions of users", Julien Simon, AWS Dev Day Kyiv 2019
 
How to implement authorization in your backend with AWS IAM
How to implement authorization in your backend with AWS IAMHow to implement authorization in your backend with AWS IAM
How to implement authorization in your backend with AWS IAM
 

Recently uploaded

Liberal Approach to the Study of Indian Politics.pdf
Liberal Approach to the Study of Indian Politics.pdfLiberal Approach to the Study of Indian Politics.pdf
Liberal Approach to the Study of Indian Politics.pdf
WaniBasim
 
Digital Artefact 1 - Tiny Home Environmental Design
Digital Artefact 1 - Tiny Home Environmental DesignDigital Artefact 1 - Tiny Home Environmental Design
Digital Artefact 1 - Tiny Home Environmental Design
amberjdewit93
 
How to Build a Module in Odoo 17 Using the Scaffold Method
How to Build a Module in Odoo 17 Using the Scaffold MethodHow to Build a Module in Odoo 17 Using the Scaffold Method
How to Build a Module in Odoo 17 Using the Scaffold Method
Celine George
 
PCOS corelations and management through Ayurveda.
PCOS corelations and management through Ayurveda.PCOS corelations and management through Ayurveda.
PCOS corelations and management through Ayurveda.
Dr. Shivangi Singh Parihar
 
South African Journal of Science: Writing with integrity workshop (2024)
South African Journal of Science: Writing with integrity workshop (2024)South African Journal of Science: Writing with integrity workshop (2024)
South African Journal of Science: Writing with integrity workshop (2024)
Academy of Science of South Africa
 
Main Java[All of the Base Concepts}.docx
Main Java[All of the Base Concepts}.docxMain Java[All of the Base Concepts}.docx
Main Java[All of the Base Concepts}.docx
adhitya5119
 
Pollock and Snow "DEIA in the Scholarly Landscape, Session One: Setting Expec...
Pollock and Snow "DEIA in the Scholarly Landscape, Session One: Setting Expec...Pollock and Snow "DEIA in the Scholarly Landscape, Session One: Setting Expec...
Pollock and Snow "DEIA in the Scholarly Landscape, Session One: Setting Expec...
National Information Standards Organization (NISO)
 
S1-Introduction-Biopesticides in ICM.pptx
S1-Introduction-Biopesticides in ICM.pptxS1-Introduction-Biopesticides in ICM.pptx
S1-Introduction-Biopesticides in ICM.pptx
tarandeep35
 
Digital Artifact 1 - 10VCD Environments Unit
Digital Artifact 1 - 10VCD Environments UnitDigital Artifact 1 - 10VCD Environments Unit
Digital Artifact 1 - 10VCD Environments Unit
chanes7
 
BBR 2024 Summer Sessions Interview Training
BBR  2024 Summer Sessions Interview TrainingBBR  2024 Summer Sessions Interview Training
BBR 2024 Summer Sessions Interview Training
Katrina Pritchard
 
BÀI TẬP BỔ TRỢ TIẾNG ANH 8 CẢ NĂM - GLOBAL SUCCESS - NĂM HỌC 2023-2024 (CÓ FI...
BÀI TẬP BỔ TRỢ TIẾNG ANH 8 CẢ NĂM - GLOBAL SUCCESS - NĂM HỌC 2023-2024 (CÓ FI...BÀI TẬP BỔ TRỢ TIẾNG ANH 8 CẢ NĂM - GLOBAL SUCCESS - NĂM HỌC 2023-2024 (CÓ FI...
BÀI TẬP BỔ TRỢ TIẾNG ANH 8 CẢ NĂM - GLOBAL SUCCESS - NĂM HỌC 2023-2024 (CÓ FI...
Nguyen Thanh Tu Collection
 
Natural birth techniques - Mrs.Akanksha Trivedi Rama University
Natural birth techniques - Mrs.Akanksha Trivedi Rama UniversityNatural birth techniques - Mrs.Akanksha Trivedi Rama University
Natural birth techniques - Mrs.Akanksha Trivedi Rama University
Akanksha trivedi rama nursing college kanpur.
 
How to Fix the Import Error in the Odoo 17
How to Fix the Import Error in the Odoo 17How to Fix the Import Error in the Odoo 17
How to Fix the Import Error in the Odoo 17
Celine George
 
Advanced Java[Extra Concepts, Not Difficult].docx
Advanced Java[Extra Concepts, Not Difficult].docxAdvanced Java[Extra Concepts, Not Difficult].docx
Advanced Java[Extra Concepts, Not Difficult].docx
adhitya5119
 
ANATOMY AND BIOMECHANICS OF HIP JOINT.pdf
ANATOMY AND BIOMECHANICS OF HIP JOINT.pdfANATOMY AND BIOMECHANICS OF HIP JOINT.pdf
ANATOMY AND BIOMECHANICS OF HIP JOINT.pdf
Priyankaranawat4
 
World environment day ppt For 5 June 2024
World environment day ppt For 5 June 2024World environment day ppt For 5 June 2024
World environment day ppt For 5 June 2024
ak6969907
 
Cognitive Development Adolescence Psychology
Cognitive Development Adolescence PsychologyCognitive Development Adolescence Psychology
Cognitive Development Adolescence Psychology
paigestewart1632
 
Executive Directors Chat Leveraging AI for Diversity, Equity, and Inclusion
Executive Directors Chat  Leveraging AI for Diversity, Equity, and InclusionExecutive Directors Chat  Leveraging AI for Diversity, Equity, and Inclusion
Executive Directors Chat Leveraging AI for Diversity, Equity, and Inclusion
TechSoup
 
ISO/IEC 27001, ISO/IEC 42001, and GDPR: Best Practices for Implementation and...
ISO/IEC 27001, ISO/IEC 42001, and GDPR: Best Practices for Implementation and...ISO/IEC 27001, ISO/IEC 42001, and GDPR: Best Practices for Implementation and...
ISO/IEC 27001, ISO/IEC 42001, and GDPR: Best Practices for Implementation and...
PECB
 
Life upper-Intermediate B2 Workbook for student
Life upper-Intermediate B2 Workbook for studentLife upper-Intermediate B2 Workbook for student
Life upper-Intermediate B2 Workbook for student
NgcHiNguyn25
 

Recently uploaded (20)

Liberal Approach to the Study of Indian Politics.pdf
Liberal Approach to the Study of Indian Politics.pdfLiberal Approach to the Study of Indian Politics.pdf
Liberal Approach to the Study of Indian Politics.pdf
 
Digital Artefact 1 - Tiny Home Environmental Design
Digital Artefact 1 - Tiny Home Environmental DesignDigital Artefact 1 - Tiny Home Environmental Design
Digital Artefact 1 - Tiny Home Environmental Design
 
How to Build a Module in Odoo 17 Using the Scaffold Method
How to Build a Module in Odoo 17 Using the Scaffold MethodHow to Build a Module in Odoo 17 Using the Scaffold Method
How to Build a Module in Odoo 17 Using the Scaffold Method
 
PCOS corelations and management through Ayurveda.
PCOS corelations and management through Ayurveda.PCOS corelations and management through Ayurveda.
PCOS corelations and management through Ayurveda.
 
South African Journal of Science: Writing with integrity workshop (2024)
South African Journal of Science: Writing with integrity workshop (2024)South African Journal of Science: Writing with integrity workshop (2024)
South African Journal of Science: Writing with integrity workshop (2024)
 
Main Java[All of the Base Concepts}.docx
Main Java[All of the Base Concepts}.docxMain Java[All of the Base Concepts}.docx
Main Java[All of the Base Concepts}.docx
 
Pollock and Snow "DEIA in the Scholarly Landscape, Session One: Setting Expec...
Pollock and Snow "DEIA in the Scholarly Landscape, Session One: Setting Expec...Pollock and Snow "DEIA in the Scholarly Landscape, Session One: Setting Expec...
Pollock and Snow "DEIA in the Scholarly Landscape, Session One: Setting Expec...
 
S1-Introduction-Biopesticides in ICM.pptx
S1-Introduction-Biopesticides in ICM.pptxS1-Introduction-Biopesticides in ICM.pptx
S1-Introduction-Biopesticides in ICM.pptx
 
Digital Artifact 1 - 10VCD Environments Unit
Digital Artifact 1 - 10VCD Environments UnitDigital Artifact 1 - 10VCD Environments Unit
Digital Artifact 1 - 10VCD Environments Unit
 
BBR 2024 Summer Sessions Interview Training
BBR  2024 Summer Sessions Interview TrainingBBR  2024 Summer Sessions Interview Training
BBR 2024 Summer Sessions Interview Training
 
BÀI TẬP BỔ TRỢ TIẾNG ANH 8 CẢ NĂM - GLOBAL SUCCESS - NĂM HỌC 2023-2024 (CÓ FI...
BÀI TẬP BỔ TRỢ TIẾNG ANH 8 CẢ NĂM - GLOBAL SUCCESS - NĂM HỌC 2023-2024 (CÓ FI...BÀI TẬP BỔ TRỢ TIẾNG ANH 8 CẢ NĂM - GLOBAL SUCCESS - NĂM HỌC 2023-2024 (CÓ FI...
BÀI TẬP BỔ TRỢ TIẾNG ANH 8 CẢ NĂM - GLOBAL SUCCESS - NĂM HỌC 2023-2024 (CÓ FI...
 
Natural birth techniques - Mrs.Akanksha Trivedi Rama University
Natural birth techniques - Mrs.Akanksha Trivedi Rama UniversityNatural birth techniques - Mrs.Akanksha Trivedi Rama University
Natural birth techniques - Mrs.Akanksha Trivedi Rama University
 
How to Fix the Import Error in the Odoo 17
How to Fix the Import Error in the Odoo 17How to Fix the Import Error in the Odoo 17
How to Fix the Import Error in the Odoo 17
 
Advanced Java[Extra Concepts, Not Difficult].docx
Advanced Java[Extra Concepts, Not Difficult].docxAdvanced Java[Extra Concepts, Not Difficult].docx
Advanced Java[Extra Concepts, Not Difficult].docx
 
ANATOMY AND BIOMECHANICS OF HIP JOINT.pdf
ANATOMY AND BIOMECHANICS OF HIP JOINT.pdfANATOMY AND BIOMECHANICS OF HIP JOINT.pdf
ANATOMY AND BIOMECHANICS OF HIP JOINT.pdf
 
World environment day ppt For 5 June 2024
World environment day ppt For 5 June 2024World environment day ppt For 5 June 2024
World environment day ppt For 5 June 2024
 
Cognitive Development Adolescence Psychology
Cognitive Development Adolescence PsychologyCognitive Development Adolescence Psychology
Cognitive Development Adolescence Psychology
 
Executive Directors Chat Leveraging AI for Diversity, Equity, and Inclusion
Executive Directors Chat  Leveraging AI for Diversity, Equity, and InclusionExecutive Directors Chat  Leveraging AI for Diversity, Equity, and Inclusion
Executive Directors Chat Leveraging AI for Diversity, Equity, and Inclusion
 
ISO/IEC 27001, ISO/IEC 42001, and GDPR: Best Practices for Implementation and...
ISO/IEC 27001, ISO/IEC 42001, and GDPR: Best Practices for Implementation and...ISO/IEC 27001, ISO/IEC 42001, and GDPR: Best Practices for Implementation and...
ISO/IEC 27001, ISO/IEC 42001, and GDPR: Best Practices for Implementation and...
 
Life upper-Intermediate B2 Workbook for student
Life upper-Intermediate B2 Workbook for studentLife upper-Intermediate B2 Workbook for student
Life upper-Intermediate B2 Workbook for student
 

Code quality

  • 2. provectus.com What is code quality? • Code style • Code complexity (size of files/functions, cyclomatic complexity) • Duplicated code • Documentation, comments • Test coverage
  • 3. provectus.com Why do we need to control quality of code? Code quality correlates with technical debt. Big technical debt leads to bugs and additional efforts required for new functionality. As result bad code quality means financial loss (transitive).
  • 4. provectus.com Java code quality tools • Code style control: Checkstyle • Code errors control: PMD, FindBugs • Test coverage: Jacoco, EMMA, Cobertura • SonarQube
  • 5. provectus.com What does CheckStyle check • Formatting: indents, braces, etc. • Unused imports • Redundant modifiers (e.g. “public” modifier in interfaces) • Maximum function parameters number • Magic numbers • Hidden fields • Naming conventions • hashCode() and equals() contract • Number of lines in classes / functions • RegExp. checks
  • 6. provectus.com Checkstyle not only for java <module name="Checker"> <module name="RegexpSingleline"> <property name="format" value="(?i)((VARCHAR2)|(VARCHAR))s*(s*d+s+((char)|(byte)))"/> <property name="minimum" value="0"/> <property name="maximum" value="0"/> <property name="message"value="Don't specify character's size VARCHAR2(XXX CHAR / BYTE). "/> </module> </module> How we prevented columns declared like following in our SQL changesets. columnName VARCHAR2(400 BYTE)
  • 7. provectus.com What does PMD check • Double Checked Locking • return statement in finally block • Redundant checks, e.g. if (a!=null && method1().equals(a)) • Constructions like new BigInteger() • Catching of Throwable, NPE, Exception, Error • Usage implementation types (i.e., HashSet) instead od interface • Usingusing implementation types (i.e., HashSet); use the interface • Usage of System.out.println • Unused parameters, variables, private methods
  • 8. provectus.com What does FindBugs check • Places with defined compareTo() without Object.equals() • Unclosed streams and Statement objects • Potential NPE • Redundant null checks • Self assignment. Example from our project: public void setInventoryManager(LocalizingInventoryManager pInventoryManager) { this.mInventoryManager = mInventoryManager; } • Synchronization problems • Duplicated code in conditional statements • Dead local variables
  • 9. provectus.com FindBugs is really cool • FindBugs has found that in line 59 null can be potentially passed as parameter. But in 68 line a method called on this object without checking for null.
  • 13. provectus.com CI build We have CI job on Jenkins that checks repository every 30 minutes. If changes were found, CI build runs Checkstyle, PMD, FindBugs and Unit tests. If build fails, then Jenkins informs dev team about it via email.
  • 14. provectus.com SonarQube First SonarQube was just a web interface for Checkstyle, PMD and FindBugs. But now SonarQube uses it’s own analyzer and set of rules. Also SonarQube shows errors diff between analyze runs. And it’s show author for each issue.
  • 16. provectus.com What can skilled developer write being in rush or because of other objective factors public boolean isXXX(...) { if ( <condition> ) { return true; } else { return false; } }
  • 17. provectus.com @Override public void setPropertyValue(RepositoryItemImpl pItem, Object pValue) { try { super.setPropertyValue(pItem, pValue); }catch(Exception e){ e.printStackTrace(); } } Boolean b = <some invocation>; if (b != null && b.equals(Boolean.TRUE))
  • 18. provectus.com What we wanted to do • Using same coding style on the project • Prevent new “stupid” problem before code review • Prevent issues that hardly can be found by human, but can be found automatically
  • 19. provectus.com How we started code quality process – steps: 1. Rules filtration 2. Instruction with selected rules 3. Instruction how to use tools and IDE plugins 4. Build script modification in separate branch 5. Merge to master
  • 20. provectus.com Selecting of rules for project ATG doesn’t follow all JCC rules and best practices, that’s why some rules were filtered out, e.g. ATG defines class version for it’s components like this: String CLASS_VERSION = "$Id: //product/DCS/version/9.3/Java/atg/commerce/order/Order.java#3 $$Change: 633147 $";
  • 21. provectus.com Code quality tools on our project • ~60 000 Checkstyle violations • ~ 2 000 PMD issues • couldn’t fix all of them • Rule: threshold value = current # of issues • build fails if # of violations > threshold • Rule for merges: threshold value = # of issues after merge • New ANT task for updating threshold value after merge (temporary and bad solution)
  • 22. provectus.com Documentation on wiki We created wiki pages with detailed information about rules were planning to use. Links pages were sent to all developer so they could tell their objections. Also we prepared guide instructions how to install and configure IDE plugins for CheckStyle and PMD.
  • 23. provectus.com How much time has it taken • Checkstyle: – selecting rules for our project – 6 hour – modifying ant script – 8 hours – creating IDE (Eclipse + Idea) configurations – 2 hours – Writing instruction on wiki – 2 hours • PMD: – selecting rules for our project – 8 hours – modifying ant script – 2 hours – creating IDE (Eclipse + Idea) configurations – 2 hours – writing instruction on wiki – 1 hour
  • 24. provectus.com SonarQube on our project SonarQube can be used to monitor new issues with their authors. If someone decides to alter threshold value, it will be seen in SonarQube.
  • 25. provectus.com Time for developing code quality process • Checkstyle check was developed in free time and presented as first step of code quality process • PMD and FindBugs checks were developed in project time
  • 26. provectus.com Managers role in code quality process • Project manager should understand importance of code quality process, and how negative growing technical debt is. • Manager shouldn’t think of code quality process as minor thing that has lowest priority. • Ideally manager should plan code quality related task as project time.
  • 27. provectus.com How to explain the need in code quality to manager Give to a manager an example how code quality will have to improve situation on project. E.g. it will reduce a number of bugs related to null-pointer exception.
  • 28. provectus.com Formal workflow Formal process (related to code quality) should be defined: • Required actions before pushing changes • What to do if build fails on CI
  • 29. provectus.com Workflow on our project • On our project each developer should perform Checkstyle+PMD check (using Ant task) before pushing changes. • FindBugs check is implemented as separate task, and it doesn’t fail build. • If Checkstyle or PMD fails on CI, developers are informed via email and CCTray.
  • 30. provectus.com Refactoring Code quality process has two goals: • Don’t increase technical debt by adding new issues • Get rid of existing problems by refactor code Many developers afraid of refactoring because it can cause regression. Part of code that is under refactoring should be covered with unit tests for all cases. It takes much time, but it’s the only right way.
  • 31. provectus.com Human factor Any rules about coding should be checked automatically. Don’t try to solve anything by agreement. On our project most developers ignored emails regarding Checkstyle and PMD, until their build failed.
  • 32. provectus.com Summary • Fix styling problems as soon as possible. Don’t use violations threshold with Checkstyle • Both developers and managers should be involved in code quality process: metrics, refactoring tasks • Information about code quality process should be delivered to developers in the most convenient (for them) way: explanation on small meeting, presentation, short article on wiki, video

Editor's Notes

  1. We already had about 60 000 Checkstyle violations and about 2 000 PMD issues. We couldn’t fix all of them, so we have defined a threshold value equal to current number of issues. If number of found violations is greater than threshold, then build fails. For merges we created task that sets threshold to current violations number.