SlideShare a Scribd company logo
HIGH MAINTAINABLE SOFTWARE
Nguyen Cuong viet
@ Septeni Technology
Ha noi - 12/2013
make it changeable
ABOUT ME
 8 years- experiences software developer, basically
base on LAMP environment
 ..
 Tratu.soha.vn
 Go.vn
 Pyxis-social.com
AGENDA
1. Understanding the important of “maintainability”
2. How to improve
 Design patterns
 Code refactor
 Jenkins
3. Discussion
I. WHAT, WHO, WHEN, WHY
THE MAINTAINABILITY PROBLEM
 Software systems are built under high pressure to meet
deadlines, and with initial emphasis on performance,
reliability, and usability.
 The software attributes relating to later changes in the
software => maintainability
SOFTWARE QUALITY FACTORS
 ISO 9126
SOFTWARE QUALITY FACTORS
 ISO 9126
->WHO ?
WHEN - DEPENDENCIES
 Do you need to care about Maintainability?
It depend on:
Project size
Life time of project
Quality of code
Design
THE MAINTAINABLE CODE CHECKLIST..
PYXIS USECASE
 20 developers
 +2 years
 10 lines of code/days x 20 x365 = 70.000 line of code/ year?
COMPLAINS..
 Bug fixes: ask Mr.A because he developed it!!
 Readable: New Member?
 understand project business by researching source
code ?
 everyone is new member with other modules!
 Simple development still has a lot of bugs!
 Throw it away, let rebuild this function!
SO..
• Imagine about our source code this
time next year..
READABLE?
CHANGEABLE?
HOW TO
Design pattern
Refactoring source code
Jenkins..
DESIGN PATTERNS
Design patterns can speed up the development process by
providing tested, proven development paradigms
PATTERNS
CODE REVIEW
Bad Smells in Code ..
CODE SMELLS ..
 Duplicated Code
 Long Method
 Large Class
 Long Parameter list
 Divergent Change
 Shotgun Surgery
 Feature Envy
 Feature Envy
 Data Clumn ..
 Primitive bsession
 Switch tatements
 Parallel
 Inheritance
 Hierarchies Lazy
 Class Speculative
 Generality
 Temporary Field
 Message Chains ..
REFACTOR - EXAMPLE
String foundPerson(String[] people){
for (int i = 0; i < people.length; i++) {
if (people[i].equals ("Don")){
return "Don";
}
if (people[i].equals ("John")){
return "John";
}
if (people[i].equals ("Kent")){
return "Kent";
}
}
return "";
}
String foundPerson(String[] people){
List candidates = Arrays.asList(new
String[] {"Don", "John", "Kent"});
for (int i=0; i &lt; people.length; i++)
if (candidates.contains(people[i]))
return people[i];
return "";
}
source refactored
REFACTOR - EXAMPLE
void printOwing(double amount) {
printBanner();
//print details
System.out.println ("name:" +
_name);
System.out.println ("amount" +
amount);
}
void printOwing(double amount) {
printBanner();
printDetails(amount);
}
void printDetails (double amount) {
System.out.println ("name:" +
_name);
System.out.println ("amount" +
amount);
}
source refactored
JENKINS
Automation tool..
JENKINS
 CHECKSTYLE(for processing PHP_CodeSniffer logfiles in
Checkstyle format)
 CLOVER(for processing PHPUnit code coverage xml output)
 DRY(for processing phpcpd logfiles in PMD-CPD format)
 JDepend (for processing PHP_Depend logfiles in JDepend
format)
 PMD (for processing PHPMD logfiles in PMD format)
 Violations (for processing various logfiles)
 xUnit (for processing PHPUnit logfiles in JUnit format)
JENKINS - SAMPLE
 Duplication
JENKINS - SAMPLE
 Duplication
JENKINS- SAMPLE: JDEPEND
 JDepend traverses Java class file directories and
generates design quality metrics for each Java
package. JDepend allows you to automatically measure
the quality of a design in terms of its extensibility,
reusability, and maintainability to manage package
dependencies effectively.
JDEPEND REPORT
REFERENCE
 Maintainbility in software engineering
 http://codebetter.com/jeremymiller/2006/12/06/on-
writing-maintainable-code/ (check list)
 A practice model for mesuaring maintainability
 http://sourcemaking.com/ very good resource for high
quality code
 http://jenkins-php.org/
THANK YOU!
Discussion..

More Related Content

Viewers also liked

Hr manager competencies
Hr manager competencies Hr manager competencies
Hr manager competencies
Confidential
 
Մխիթար Սեբաստացու կենսագրությունը
Մխիթար Սեբաստացու կենսագրությունըՄխիթար Սեբաստացու կենսագրությունը
Մխիթար Սեբաստացու կենսագրությունըganyan
 
IMC Institute's Training Schedule Q2 2014
IMC Institute's Training Schedule Q2 2014IMC Institute's Training Schedule Q2 2014
IMC Institute's Training Schedule Q2 2014
IMC Institute
 
RUMI and me
RUMI and me RUMI and me
RUMI and me
Asgar Fakhrudin
 
Comet: by pushing server data, we push the web forward
Comet: by pushing server data, we push the web forwardComet: by pushing server data, we push the web forward
Comet: by pushing server data, we push the web forward
NOLOH LLC.
 
3 fracture healing
3 fracture healing3 fracture healing
3 fracture healing
Shrikant Gore
 
13 user experience commandments
13 user experience commandments13 user experience commandments
13 user experience commandments
WITFLOW
 
Get Your Head in the Cloud
Get Your Head in the CloudGet Your Head in the Cloud
Get Your Head in the CloudClaris Networks
 
ENERGY STREETFIGHT. Play for Purpose: An Augmented Venture.
ENERGY STREETFIGHT. Play for Purpose: An Augmented Venture.ENERGY STREETFIGHT. Play for Purpose: An Augmented Venture.
ENERGY STREETFIGHT. Play for Purpose: An Augmented Venture.
vicventures
 
Securing Syslog On FreeBSD
Securing Syslog On FreeBSDSecuring Syslog On FreeBSD
Securing Syslog On FreeBSD
Albert Mietus
 
A Healthier Appetite
A Healthier AppetiteA Healthier Appetite
A Healthier Appetite
Thrive! Meetings & Events
 

Viewers also liked (12)

Home depotdisputev4
Home depotdisputev4Home depotdisputev4
Home depotdisputev4
 
Hr manager competencies
Hr manager competencies Hr manager competencies
Hr manager competencies
 
Մխիթար Սեբաստացու կենսագրությունը
Մխիթար Սեբաստացու կենսագրությունըՄխիթար Սեբաստացու կենսագրությունը
Մխիթար Սեբաստացու կենսագրությունը
 
IMC Institute's Training Schedule Q2 2014
IMC Institute's Training Schedule Q2 2014IMC Institute's Training Schedule Q2 2014
IMC Institute's Training Schedule Q2 2014
 
RUMI and me
RUMI and me RUMI and me
RUMI and me
 
Comet: by pushing server data, we push the web forward
Comet: by pushing server data, we push the web forwardComet: by pushing server data, we push the web forward
Comet: by pushing server data, we push the web forward
 
3 fracture healing
3 fracture healing3 fracture healing
3 fracture healing
 
13 user experience commandments
13 user experience commandments13 user experience commandments
13 user experience commandments
 
Get Your Head in the Cloud
Get Your Head in the CloudGet Your Head in the Cloud
Get Your Head in the Cloud
 
ENERGY STREETFIGHT. Play for Purpose: An Augmented Venture.
ENERGY STREETFIGHT. Play for Purpose: An Augmented Venture.ENERGY STREETFIGHT. Play for Purpose: An Augmented Venture.
ENERGY STREETFIGHT. Play for Purpose: An Augmented Venture.
 
Securing Syslog On FreeBSD
Securing Syslog On FreeBSDSecuring Syslog On FreeBSD
Securing Syslog On FreeBSD
 
A Healthier Appetite
A Healthier AppetiteA Healthier Appetite
A Healthier Appetite
 

Similar to High maitainablesoftware

Fast REST APIs Development with MongoDB
Fast REST APIs Development with MongoDBFast REST APIs Development with MongoDB
Fast REST APIs Development with MongoDB
MongoDB
 
Human scaling on the front end
Human scaling on the front endHuman scaling on the front end
Human scaling on the front end
Rudy Rigot
 
Where are yours vertexes and what are they talking about?
Where are yours vertexes and what are they talking about?Where are yours vertexes and what are they talking about?
Where are yours vertexes and what are they talking about?
Roberto Franchini
 
Building Services With gRPC, Docker and Go
Building Services With gRPC, Docker and GoBuilding Services With gRPC, Docker and Go
Building Services With gRPC, Docker and Go
Martin Kess
 
Human computer interaction research at ibm t
Human computer interaction research at ibm tHuman computer interaction research at ibm t
Human computer interaction research at ibm t
John Thomas
 
Reactive Stream Processing Using DDS and Rx
Reactive Stream Processing Using DDS and RxReactive Stream Processing Using DDS and Rx
Reactive Stream Processing Using DDS and Rx
Sumant Tambe
 
Services for Science
Services for ScienceServices for Science
Services for Science
Ian Foster
 
After test Barcelona 20160303
After test Barcelona 20160303After test Barcelona 20160303
After test Barcelona 20160303
Almudena Vivanco
 
Cassandra & puppet, scaling data at $15 per month
Cassandra & puppet, scaling data at $15 per monthCassandra & puppet, scaling data at $15 per month
Cassandra & puppet, scaling data at $15 per month
daveconnors
 
Benefits of Using MongoDB Over RDBMSs
Benefits of Using MongoDB Over RDBMSsBenefits of Using MongoDB Over RDBMSs
Benefits of Using MongoDB Over RDBMSs
MongoDB
 
Modelling performance tests
Modelling performance testsModelling performance tests
Modelling performance tests
Almudena Vivanco
 
MWLUG 2014: Modern Domino (workshop)
MWLUG 2014: Modern Domino (workshop)MWLUG 2014: Modern Domino (workshop)
MWLUG 2014: Modern Domino (workshop)
Peter Presnell
 
Building Modern Data Pipelines for Time Series Data on GCP with InfluxData by...
Building Modern Data Pipelines for Time Series Data on GCP with InfluxData by...Building Modern Data Pipelines for Time Series Data on GCP with InfluxData by...
Building Modern Data Pipelines for Time Series Data on GCP with InfluxData by...
InfluxData
 
Introduction-to-Csharp.ppt
Introduction-to-Csharp.pptIntroduction-to-Csharp.ppt
Introduction-to-Csharp.ppt
Almamoon
 
Introduction-to-Csharp.ppt
Introduction-to-Csharp.pptIntroduction-to-Csharp.ppt
Introduction-to-Csharp.ppt
mothertheressa
 
Introduction to-csharp
Introduction to-csharpIntroduction to-csharp
Introduction to-csharp
SDFG5
 
Introduction to Csharp (C-Sharp) is a programming language developed by Micro...
Introduction to Csharp (C-Sharp) is a programming language developed by Micro...Introduction to Csharp (C-Sharp) is a programming language developed by Micro...
Introduction to Csharp (C-Sharp) is a programming language developed by Micro...
NALESVPMEngg
 
CTD307_Case Study How Mobile Device Service Company Asurion Architected Its A...
CTD307_Case Study How Mobile Device Service Company Asurion Architected Its A...CTD307_Case Study How Mobile Device Service Company Asurion Architected Its A...
CTD307_Case Study How Mobile Device Service Company Asurion Architected Its A...
Amazon Web Services
 
Discovering User's Topics of Interest in Recommender Systems
Discovering User's Topics of Interest in Recommender SystemsDiscovering User's Topics of Interest in Recommender Systems
Discovering User's Topics of Interest in Recommender Systems
Gabriel Moreira
 
MongoDB Days Silicon Valley: Building an Artificial Intelligence Startup with...
MongoDB Days Silicon Valley: Building an Artificial Intelligence Startup with...MongoDB Days Silicon Valley: Building an Artificial Intelligence Startup with...
MongoDB Days Silicon Valley: Building an Artificial Intelligence Startup with...
MongoDB
 

Similar to High maitainablesoftware (20)

Fast REST APIs Development with MongoDB
Fast REST APIs Development with MongoDBFast REST APIs Development with MongoDB
Fast REST APIs Development with MongoDB
 
Human scaling on the front end
Human scaling on the front endHuman scaling on the front end
Human scaling on the front end
 
Where are yours vertexes and what are they talking about?
Where are yours vertexes and what are they talking about?Where are yours vertexes and what are they talking about?
Where are yours vertexes and what are they talking about?
 
Building Services With gRPC, Docker and Go
Building Services With gRPC, Docker and GoBuilding Services With gRPC, Docker and Go
Building Services With gRPC, Docker and Go
 
Human computer interaction research at ibm t
Human computer interaction research at ibm tHuman computer interaction research at ibm t
Human computer interaction research at ibm t
 
Reactive Stream Processing Using DDS and Rx
Reactive Stream Processing Using DDS and RxReactive Stream Processing Using DDS and Rx
Reactive Stream Processing Using DDS and Rx
 
Services for Science
Services for ScienceServices for Science
Services for Science
 
After test Barcelona 20160303
After test Barcelona 20160303After test Barcelona 20160303
After test Barcelona 20160303
 
Cassandra & puppet, scaling data at $15 per month
Cassandra & puppet, scaling data at $15 per monthCassandra & puppet, scaling data at $15 per month
Cassandra & puppet, scaling data at $15 per month
 
Benefits of Using MongoDB Over RDBMSs
Benefits of Using MongoDB Over RDBMSsBenefits of Using MongoDB Over RDBMSs
Benefits of Using MongoDB Over RDBMSs
 
Modelling performance tests
Modelling performance testsModelling performance tests
Modelling performance tests
 
MWLUG 2014: Modern Domino (workshop)
MWLUG 2014: Modern Domino (workshop)MWLUG 2014: Modern Domino (workshop)
MWLUG 2014: Modern Domino (workshop)
 
Building Modern Data Pipelines for Time Series Data on GCP with InfluxData by...
Building Modern Data Pipelines for Time Series Data on GCP with InfluxData by...Building Modern Data Pipelines for Time Series Data on GCP with InfluxData by...
Building Modern Data Pipelines for Time Series Data on GCP with InfluxData by...
 
Introduction-to-Csharp.ppt
Introduction-to-Csharp.pptIntroduction-to-Csharp.ppt
Introduction-to-Csharp.ppt
 
Introduction-to-Csharp.ppt
Introduction-to-Csharp.pptIntroduction-to-Csharp.ppt
Introduction-to-Csharp.ppt
 
Introduction to-csharp
Introduction to-csharpIntroduction to-csharp
Introduction to-csharp
 
Introduction to Csharp (C-Sharp) is a programming language developed by Micro...
Introduction to Csharp (C-Sharp) is a programming language developed by Micro...Introduction to Csharp (C-Sharp) is a programming language developed by Micro...
Introduction to Csharp (C-Sharp) is a programming language developed by Micro...
 
CTD307_Case Study How Mobile Device Service Company Asurion Architected Its A...
CTD307_Case Study How Mobile Device Service Company Asurion Architected Its A...CTD307_Case Study How Mobile Device Service Company Asurion Architected Its A...
CTD307_Case Study How Mobile Device Service Company Asurion Architected Its A...
 
Discovering User's Topics of Interest in Recommender Systems
Discovering User's Topics of Interest in Recommender SystemsDiscovering User's Topics of Interest in Recommender Systems
Discovering User's Topics of Interest in Recommender Systems
 
MongoDB Days Silicon Valley: Building an Artificial Intelligence Startup with...
MongoDB Days Silicon Valley: Building an Artificial Intelligence Startup with...MongoDB Days Silicon Valley: Building an Artificial Intelligence Startup with...
MongoDB Days Silicon Valley: Building an Artificial Intelligence Startup with...
 

More from Duy Tan Geek

Amazon Elastic Load Balancing
Amazon Elastic Load BalancingAmazon Elastic Load Balancing
Amazon Elastic Load BalancingDuy Tan Geek
 
Cloud - FOSS & Challenge
Cloud - FOSS & ChallengeCloud - FOSS & Challenge
Cloud - FOSS & ChallengeDuy Tan Geek
 
AWS, is it interesting?
AWS, is it interesting?AWS, is it interesting?
AWS, is it interesting?Duy Tan Geek
 
Cloud DC Transforming
Cloud DC TransformingCloud DC Transforming
Cloud DC TransformingDuy Tan Geek
 
Becoming a better programmer - unit testing
Becoming a better programmer - unit testingBecoming a better programmer - unit testing
Becoming a better programmer - unit testingDuy Tan Geek
 
Practical TDD in Septeni Technology
Practical TDD in Septeni TechnologyPractical TDD in Septeni Technology
Practical TDD in Septeni TechnologyDuy Tan Geek
 
Build Quality In with TDD
Build Quality In with TDDBuild Quality In with TDD
Build Quality In with TDDDuy Tan Geek
 
Sharing bridge SE working experience of myself
Sharing bridge SE working experience of myselfSharing bridge SE working experience of myself
Sharing bridge SE working experience of myselfDuy Tan Geek
 
Game development with Cocos2d-x Engine
Game development with Cocos2d-x EngineGame development with Cocos2d-x Engine
Game development with Cocos2d-x EngineDuy Tan Geek
 
HTML5 mobile games
HTML5 mobile gamesHTML5 mobile games
HTML5 mobile gamesDuy Tan Geek
 
Game engine introduction and approach
Game engine introduction and approachGame engine introduction and approach
Game engine introduction and approachDuy Tan Geek
 
10 things you need to know about doing business with Japanese
10 things you need to know about doing business with Japanese10 things you need to know about doing business with Japanese
10 things you need to know about doing business with JapaneseDuy Tan Geek
 
Enjoy Japanese work style
Enjoy Japanese work styleEnjoy Japanese work style
Enjoy Japanese work styleDuy Tan Geek
 
A cup of coffee worth 10 dollars is what we are going to sell!
A cup of coffee worth 10 dollars is what we are going to sell!A cup of coffee worth 10 dollars is what we are going to sell!
A cup of coffee worth 10 dollars is what we are going to sell!Duy Tan Geek
 
Introduction to pmp
Introduction to pmpIntroduction to pmp
Introduction to pmpDuy Tan Geek
 
Beyond project management
Beyond project managementBeyond project management
Beyond project managementDuy Tan Geek
 
The way to set automation testing
The way to set automation testingThe way to set automation testing
The way to set automation testingDuy Tan Geek
 
Quality Management Introduction
Quality Management IntroductionQuality Management Introduction
Quality Management IntroductionDuy Tan Geek
 
Techniques in black box testing
Techniques in black box testingTechniques in black box testing
Techniques in black box testingDuy Tan Geek
 

More from Duy Tan Geek (20)

Amazon Elastic Load Balancing
Amazon Elastic Load BalancingAmazon Elastic Load Balancing
Amazon Elastic Load Balancing
 
Cloud - FOSS & Challenge
Cloud - FOSS & ChallengeCloud - FOSS & Challenge
Cloud - FOSS & Challenge
 
AWS, is it interesting?
AWS, is it interesting?AWS, is it interesting?
AWS, is it interesting?
 
Cloud DC Transforming
Cloud DC TransformingCloud DC Transforming
Cloud DC Transforming
 
Becoming a better programmer - unit testing
Becoming a better programmer - unit testingBecoming a better programmer - unit testing
Becoming a better programmer - unit testing
 
Practical TDD in Septeni Technology
Practical TDD in Septeni TechnologyPractical TDD in Septeni Technology
Practical TDD in Septeni Technology
 
Build Quality In with TDD
Build Quality In with TDDBuild Quality In with TDD
Build Quality In with TDD
 
Sharing bridge SE working experience of myself
Sharing bridge SE working experience of myselfSharing bridge SE working experience of myself
Sharing bridge SE working experience of myself
 
Game development with Cocos2d-x Engine
Game development with Cocos2d-x EngineGame development with Cocos2d-x Engine
Game development with Cocos2d-x Engine
 
HTML5 mobile games
HTML5 mobile gamesHTML5 mobile games
HTML5 mobile games
 
Game engine introduction and approach
Game engine introduction and approachGame engine introduction and approach
Game engine introduction and approach
 
10 things you need to know about doing business with Japanese
10 things you need to know about doing business with Japanese10 things you need to know about doing business with Japanese
10 things you need to know about doing business with Japanese
 
Enjoy Japanese work style
Enjoy Japanese work styleEnjoy Japanese work style
Enjoy Japanese work style
 
A cup of coffee worth 10 dollars is what we are going to sell!
A cup of coffee worth 10 dollars is what we are going to sell!A cup of coffee worth 10 dollars is what we are going to sell!
A cup of coffee worth 10 dollars is what we are going to sell!
 
Leader ship value
Leader ship valueLeader ship value
Leader ship value
 
Introduction to pmp
Introduction to pmpIntroduction to pmp
Introduction to pmp
 
Beyond project management
Beyond project managementBeyond project management
Beyond project management
 
The way to set automation testing
The way to set automation testingThe way to set automation testing
The way to set automation testing
 
Quality Management Introduction
Quality Management IntroductionQuality Management Introduction
Quality Management Introduction
 
Techniques in black box testing
Techniques in black box testingTechniques in black box testing
Techniques in black box testing
 

Recently uploaded

Navigating the Metaverse: A Journey into Virtual Evolution"
Navigating the Metaverse: A Journey into Virtual Evolution"Navigating the Metaverse: A Journey into Virtual Evolution"
Navigating the Metaverse: A Journey into Virtual Evolution"
Donna Lenk
 
Enterprise Resource Planning System in Telangana
Enterprise Resource Planning System in TelanganaEnterprise Resource Planning System in Telangana
Enterprise Resource Planning System in Telangana
NYGGS Automation Suite
 
AI Genie Review: World’s First Open AI WordPress Website Creator
AI Genie Review: World’s First Open AI WordPress Website CreatorAI Genie Review: World’s First Open AI WordPress Website Creator
AI Genie Review: World’s First Open AI WordPress Website Creator
Google
 
Game Development with Unity3D (Game Development lecture 3)
Game Development  with Unity3D (Game Development lecture 3)Game Development  with Unity3D (Game Development lecture 3)
Game Development with Unity3D (Game Development lecture 3)
abdulrafaychaudhry
 
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket ManagementUtilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
Safe Software
 
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Crescat
 
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of CodeA Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
Aftab Hussain
 
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing SuiteAI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
Google
 
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Łukasz Chruściel
 
Quarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden ExtensionsQuarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden Extensions
Max Andersen
 
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI AppAI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
Google
 
Graspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code AnalysisGraspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code Analysis
Aftab Hussain
 
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Mind IT Systems
 
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOMLORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
lorraineandreiamcidl
 
E-commerce Application Development Company.pdf
E-commerce Application Development Company.pdfE-commerce Application Development Company.pdf
E-commerce Application Development Company.pdf
Hornet Dynamics
 
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data AnalysisProviding Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Globus
 
Mobile App Development Company In Noida | Drona Infotech
Mobile App Development Company In Noida | Drona InfotechMobile App Development Company In Noida | Drona Infotech
Mobile App Development Company In Noida | Drona Infotech
Drona Infotech
 
Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604
Fermin Galan
 
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
Juraj Vysvader
 

Recently uploaded (20)

Navigating the Metaverse: A Journey into Virtual Evolution"
Navigating the Metaverse: A Journey into Virtual Evolution"Navigating the Metaverse: A Journey into Virtual Evolution"
Navigating the Metaverse: A Journey into Virtual Evolution"
 
Enterprise Resource Planning System in Telangana
Enterprise Resource Planning System in TelanganaEnterprise Resource Planning System in Telangana
Enterprise Resource Planning System in Telangana
 
AI Genie Review: World’s First Open AI WordPress Website Creator
AI Genie Review: World’s First Open AI WordPress Website CreatorAI Genie Review: World’s First Open AI WordPress Website Creator
AI Genie Review: World’s First Open AI WordPress Website Creator
 
Game Development with Unity3D (Game Development lecture 3)
Game Development  with Unity3D (Game Development lecture 3)Game Development  with Unity3D (Game Development lecture 3)
Game Development with Unity3D (Game Development lecture 3)
 
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket ManagementUtilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
Utilocate provides Smarter, Better, Faster, Safer Locate Ticket Management
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
 
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
 
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of CodeA Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
 
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing SuiteAI Pilot Review: The World’s First Virtual Assistant Marketing Suite
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
 
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
 
Quarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden ExtensionsQuarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden Extensions
 
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI AppAI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
 
Graspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code AnalysisGraspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code Analysis
 
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
Custom Healthcare Software for Managing Chronic Conditions and Remote Patient...
 
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOMLORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
 
E-commerce Application Development Company.pdf
E-commerce Application Development Company.pdfE-commerce Application Development Company.pdf
E-commerce Application Development Company.pdf
 
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data AnalysisProviding Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
 
Mobile App Development Company In Noida | Drona Infotech
Mobile App Development Company In Noida | Drona InfotechMobile App Development Company In Noida | Drona Infotech
Mobile App Development Company In Noida | Drona Infotech
 
Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604Orion Context Broker introduction 20240604
Orion Context Broker introduction 20240604
 
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...
 

High maitainablesoftware

  • 1. HIGH MAINTAINABLE SOFTWARE Nguyen Cuong viet @ Septeni Technology Ha noi - 12/2013 make it changeable
  • 2. ABOUT ME  8 years- experiences software developer, basically base on LAMP environment  ..  Tratu.soha.vn  Go.vn  Pyxis-social.com
  • 3. AGENDA 1. Understanding the important of “maintainability” 2. How to improve  Design patterns  Code refactor  Jenkins 3. Discussion
  • 4. I. WHAT, WHO, WHEN, WHY
  • 5. THE MAINTAINABILITY PROBLEM  Software systems are built under high pressure to meet deadlines, and with initial emphasis on performance, reliability, and usability.  The software attributes relating to later changes in the software => maintainability
  • 7. SOFTWARE QUALITY FACTORS  ISO 9126 ->WHO ?
  • 8. WHEN - DEPENDENCIES  Do you need to care about Maintainability? It depend on: Project size Life time of project Quality of code Design
  • 9. THE MAINTAINABLE CODE CHECKLIST..
  • 10. PYXIS USECASE  20 developers  +2 years  10 lines of code/days x 20 x365 = 70.000 line of code/ year?
  • 11. COMPLAINS..  Bug fixes: ask Mr.A because he developed it!!  Readable: New Member?  understand project business by researching source code ?  everyone is new member with other modules!  Simple development still has a lot of bugs!  Throw it away, let rebuild this function!
  • 12. SO.. • Imagine about our source code this time next year.. READABLE? CHANGEABLE?
  • 13. HOW TO Design pattern Refactoring source code Jenkins..
  • 14. DESIGN PATTERNS Design patterns can speed up the development process by providing tested, proven development paradigms
  • 17. CODE SMELLS ..  Duplicated Code  Long Method  Large Class  Long Parameter list  Divergent Change  Shotgun Surgery  Feature Envy  Feature Envy  Data Clumn ..  Primitive bsession  Switch tatements  Parallel  Inheritance  Hierarchies Lazy  Class Speculative  Generality  Temporary Field  Message Chains ..
  • 18. REFACTOR - EXAMPLE String foundPerson(String[] people){ for (int i = 0; i < people.length; i++) { if (people[i].equals ("Don")){ return "Don"; } if (people[i].equals ("John")){ return "John"; } if (people[i].equals ("Kent")){ return "Kent"; } } return ""; } String foundPerson(String[] people){ List candidates = Arrays.asList(new String[] {"Don", "John", "Kent"}); for (int i=0; i &lt; people.length; i++) if (candidates.contains(people[i])) return people[i]; return ""; } source refactored
  • 19. REFACTOR - EXAMPLE void printOwing(double amount) { printBanner(); //print details System.out.println ("name:" + _name); System.out.println ("amount" + amount); } void printOwing(double amount) { printBanner(); printDetails(amount); } void printDetails (double amount) { System.out.println ("name:" + _name); System.out.println ("amount" + amount); } source refactored
  • 21. JENKINS  CHECKSTYLE(for processing PHP_CodeSniffer logfiles in Checkstyle format)  CLOVER(for processing PHPUnit code coverage xml output)  DRY(for processing phpcpd logfiles in PMD-CPD format)  JDepend (for processing PHP_Depend logfiles in JDepend format)  PMD (for processing PHPMD logfiles in PMD format)  Violations (for processing various logfiles)  xUnit (for processing PHPUnit logfiles in JUnit format)
  • 22. JENKINS - SAMPLE  Duplication
  • 23. JENKINS - SAMPLE  Duplication
  • 24. JENKINS- SAMPLE: JDEPEND  JDepend traverses Java class file directories and generates design quality metrics for each Java package. JDepend allows you to automatically measure the quality of a design in terms of its extensibility, reusability, and maintainability to manage package dependencies effectively.
  • 26. REFERENCE  Maintainbility in software engineering  http://codebetter.com/jeremymiller/2006/12/06/on- writing-maintainable-code/ (check list)  A practice model for mesuaring maintainability  http://sourcemaking.com/ very good resource for high quality code  http://jenkins-php.org/