SlideShare uma empresa Scribd logo
1 de 63
CCCE 2014 
WORKING ON A SKYSCRAPER IN THE EARLY 
YEARS OF THE XX CENTURY 
CCCE – 2014 – Budapest 
Talk: Miguel Ferreira (SBP) 
CloudStack evaluation: Dennis Bijlsma (SIG)
CCCE 2014 
THIS TALK 
It’s about how I’ve experienced CloudStack development
CCCE 2014 
WHO AM I 
Portuguese 
Mission Critical Engineer at Schuberg Philis 
Interests: 
• Software maintainability 
• Metrics-driven engineering 
• Testing
Studied systems and software engineering
Computer science research
Learned to see code as mathematical structures
Focus on building the right software
Real world software was not so mathematical
Software is a mess of building blocks
/legacy
Focus on building software right
Tremendous mental shift!
Code as building blocks
Complexity 
Size 
Duplication 
Coupling
Categorize & Compare
CloudStack
CCCE 2014 
WHAT SOFTWARE TAUGHT ME 
Maintainable software is made of tiny blocks of code 
Simple blocks, with meaningful names 
That blend in together to create a consistent picture 
Each piece is independently testable
CCCE 2014 
MAINTAINABILITY IS THE ENABLER 
Maintainability enables all other software quality characteristics 
Security, Reliability, Performance, Portability, …
CCCE 2014 
MAINTAINABLE SOFTWARE 
Changes often 
Changes fast 
by Arthur John Picton, source http://www.flickr.com/, licensed under CC BY 2.0
CCCE 2014 
UNIT-TESTS ENABLE MAINTAINABILITY 
The single most effective feedback loop 
Without it the risk of continuously grooming 
code is prohibitive 
System 
Integration 
Unit
Wasn’t this about CloudStack?
Healthcare domain
Mission critical cloud (with CloudStack)
CCCE 2014 
CLOUDSTACK 
What kind of software system is it? 
“CloudStack is an open source software 
platform that pools computing resources to build 
public, private, and hybrid Infrastructure as a 
Service (IaaS) clouds.”
CCCE 2014 
IN OTHER WORDS 
CloudStack coordinates the work of multiple computing systems in order to offer computing 
resources in a seemingly integrated fashion 
What kind of systems are we talking about? 
• Hypervisors 
• Storage devices 
• Network devices 
Pretty complex stuff
CCCE 2014 
MY FIRST REACTION 
Excitement to work on such an important piece of software 
It must be really good, given the adoption
CCCE 2014 
MY FIRST REACTION 
Excitement to work on such an important piece of software 
It must be really good, given the adoption 
CloudStack is “the Bomb”!!
CCCE 2014 
THEN I LOOKED UNDER THE HOOD 
Code is cluttered 
• Poor conventions (e.g. naming: ‘_*’, ‘s_*’) 
• Commented out code 
Poor domain model 
• Long methods 
• “God classes” 
• Duplicated objects 
• “Stringly typed” methods 
Poor error handling 
• “Pokémon” exception handling 
Build system adoption was left halfway
CCCE 2014 
THEN I LOOKED UNDER THE HOOD 
Code is cluttered 
• Poor conventions (e.g. naming: ‘_*’, ‘s_*’) 
• Commented out code 
Poor domain model 
• Long methods 
• “God classes” 
• Duplicated objects 
• “Stringly typed” methods 
Barely any unit-testing 
Poor error handling 
• “Pokémon” exception handling 
Build system adoption was left halfway
How can that be?
Code is my work environment
CCCE 2014 
CLOUDSTACKWORK ENVIRONMENT 
Is not a safe work environment 
The feedback loop is way too long 
It requires extensive amount of debugging 
It lacks unit-tests (which keep me sane)
CCCE 2014 
TESTING CHALLENGES 
CloudStack code is tightly coupled to specific hardware devices 
It has a database 
Plug-in architecture 
Distributed development teams
CCCE 2014 
HOW DO YOU TEST SUCH A SYSTEM? 
There are other plug-in system out there 
Lets look at a study of test practices within the Eclipse project
CCCE 2014 
TEST PRACTICES IN ECLIPSE 
Test responsibilities 
• “Tester and developer, that’s one person. (…)” 
Unit testing 
• “We have unit testing, and that’s where we put the main effort” 
• “Ultimately, unit tests are our best friends, and everything else is already 
difficult.” 
• “What cannot be encapsulated is not tested.” 
Influence of the plug-in architecture 
• “The small glue code (..), that’s not tested, because it is just hard to test 
that. And for these untested glue code parts we had the most bugs.”
CCCE 2014 
GETTING BACK TO CLOUDSTACK 
Why doesn’t it have more unit tests? 
The code does not lend itself to 
be unit-tested!
CCCE 2014 
SOURCE CODE EVALUATION 
According to model used for certifying software maintainability 
Focus on simple low-level source code metrics 
Aggregation of metrics to system level respecting statistical properties
CCCE 2014 
MAINTAINABILITY RATING 
http://www.sig.eu
CCCE 2014 
VOLUME 
Java 670 KLOC 
JavaScript 70 KLOC 
C# 44 KLOC 
SQL 16 KLOC
CCCE 2014 
DUPLICATION 
Not Duplicated 
Duplicated
CCCE 2014 
UNIT SIZE 
1 - 20 
21 - 50 
51 - 100 
101 +
CCCE 2014 
MODULE COUPLING 
0 - 10 
11 - 20 
21 - 50 
51 +
CCCE 2014 
HOW DOES THIS TIE IN WITH UNIT-TESTING?
CCCE 2014 
LET’S WRITE A UNIT TEST TOGETHER
CCCE 2014 
WHAT DOES A UNIT-TEST LOOK LIKE 
Low complexity (barely no branching at all) 
3 blocks 
• Setup: define the input 
• Execution: call the method under test 
• Verification: check expectations
CCCE 2014 
UPDATE GUEST NETWORK 
com.cloud.network.NetworkServiceImpl 
updateGuestNetwork(…) 
• 11 parameters, 
• 286 lines of code 
• 15 blocks of code (with header comments) 
Unit test 
• Setup: build/mock/abstract 11 input parameters (if you consider that 10 can be null, combinations = 2^10!) 
• Execution: call updateGuestNetwork(…) 
• Verification: what to expect from a 200+ line long method? 
Easy answer: an updated guest network!
CCCE 2014 
UPDATE GUEST NETWORK 
In which state was it? Was it a system network? Was it any other kind of network? 
Did it already have a name? Display name? Custom ID? 
Did the network offering change? 
Changing from VPC to non-VPC? 
Network domain, IP reservation, … 
Update life-cycle: shutdown all elements, make the update, turn back on
CCCE 2014 
NOW WHAT? 
I have some ideas…
CCCE 2014 
APACHE IS ALL ABOUT THE COMMUNITY 
There must be something the community can do 
Wants: 
• Better code, more tests, happier developers 
Don’t wants: 
• Strangle innovation, chase current developers away
CCCE 2014 
LTS MODEL 
Popular in several open-source projects 
Allows for cutting-edge innovation 
Allows for better structure and quality control
Freeze the current 
master branch
Freeze the current 
master branch 
Automate code 
quality checks
Refactor on a need-to 
basis
Development as 
usual in innovation 
branches
When releasing in 
LTS, code has to 
meet quality standard
At some point, swap 
devs between the 
two teams
CCCE 2014 
HOW TO MAKE IT WORK 
Freeze the current release branch 
Automate code quality standard 
• Measure unit size, complexity, coupling, duplication, etc. 
• Measure unit-testing coverage 
Keep the code as is, but 
• Every time the code is touched it is refactored according to the defined quality standard 
• No new code gets in the LTS branch without meeting the tech quality requirements 
Maintain two groups of developers (LTS and Innovation) 
• As time progresses swap people between the two
CCCE 2014 
SUMMARY 
CloudStack is functionally quite good, but the code is not keeping up 
Feedback loops for developers are way too long 
More and better unit testing will help to increase quality and developer satisfaction 
Only the CloudStack community has the power to change the game 
Schuberg Philis is more than interested in helping
Thank you!
CCCE 2014 
CREDITS 
Skyscraper construction work photos by Charles C. Ebbets, source http://nowyorkcity.com/, © All rights reserved 
Photo (and sand castle!) on slides 5 and 6, by Calvin Seibert, source http://www.flickr.com, © All rights reserved 
Photo on slide 7, by Pedro Moura Pinheiro, source http://www.flickr.com, licensed under CC BY 2.0 
Photo on slides 8 to 10, by Benjamin Esham, source http://www.flickr.com/, licensed under CC BY 2.0 
Photo on slides 12 to 14, source http://legoquestkids.blogspot.nl/, © All rights reserved 
Photo on slide 19, by Arthur John Picton, source http://www.flickr.com/, licensed under CC BY 2.0 
Photo on slide 10, by Steven Zucker, source http://www.flickr.com/, licensed under CC BY 2.0 
Photo on slide 22, by Murray Barnes, source http://www.flickr.com/, licensed under CC BY 2.0 
Photo on slides 27 and 28, by Kristian, source http://www.flickr.com/, licensed under CC BY 2.0 
Photo on slides 29 and 30, by Ben Wojdyla source http://jalopnik.com/5182381/adventures-with-wildlife-surprise-underhood-opossum-nest, © 
All rights reserved
CCCE 2014 
CONTACTS 
Miguel Ferreira, SBP, mferreira@schubergphilis.com, @miguel_f 
Dennis Bijlsma, SIG, d.bijlsma@sig.eu 
Ping us!

Mais conteúdo relacionado

Mais procurados

Introduction to DevOps Tools | DevOps Training | DevOps Tutorial for Beginner...
Introduction to DevOps Tools | DevOps Training | DevOps Tutorial for Beginner...Introduction to DevOps Tools | DevOps Training | DevOps Tutorial for Beginner...
Introduction to DevOps Tools | DevOps Training | DevOps Tutorial for Beginner...Edureka!
 
Jumping from Continuous Integration to Continuous Delivery with Jenkins Enter...
Jumping from Continuous Integration to Continuous Delivery with Jenkins Enter...Jumping from Continuous Integration to Continuous Delivery with Jenkins Enter...
Jumping from Continuous Integration to Continuous Delivery with Jenkins Enter...CloudBees
 
Jenkins talk at Silicon valley DevOps meetup
Jenkins talk at Silicon valley DevOps meetupJenkins talk at Silicon valley DevOps meetup
Jenkins talk at Silicon valley DevOps meetupCloudBees
 
Continuous integration / deployment with Jenkins
Continuous integration / deployment with JenkinsContinuous integration / deployment with Jenkins
Continuous integration / deployment with Jenkinscherryhillco
 
Ci jenkins maven svn
Ci jenkins maven svnCi jenkins maven svn
Ci jenkins maven svnAnkur Goyal
 
Devops syllabus
Devops syllabusDevops syllabus
Devops syllabusLen Bass
 
PuppetConf 2016: Continuous Delivery and DevOps with Jenkins and Puppet Enter...
PuppetConf 2016: Continuous Delivery and DevOps with Jenkins and Puppet Enter...PuppetConf 2016: Continuous Delivery and DevOps with Jenkins and Puppet Enter...
PuppetConf 2016: Continuous Delivery and DevOps with Jenkins and Puppet Enter...Puppet
 
DevOps Syllabus summer 2020
DevOps Syllabus summer 2020DevOps Syllabus summer 2020
DevOps Syllabus summer 2020Len Bass
 
Guide To Jenkins Management Continuous Integration And Useful Plugins Complet...
Guide To Jenkins Management Continuous Integration And Useful Plugins Complet...Guide To Jenkins Management Continuous Integration And Useful Plugins Complet...
Guide To Jenkins Management Continuous Integration And Useful Plugins Complet...SlideTeam
 
Automating the build and deployment of legacy applications
Automating the build and deployment of legacy applicationsAutomating the build and deployment of legacy applications
Automating the build and deployment of legacy applicationsCachet Software Solutions Ltd
 
Transforming Organizations with CI/CD
Transforming Organizations with CI/CDTransforming Organizations with CI/CD
Transforming Organizations with CI/CDCprime
 
Hudson
HudsonHudson
Hudson8x8
 
Introduction to Continuous Integration with Jenkins
Introduction to Continuous Integration with JenkinsIntroduction to Continuous Integration with Jenkins
Introduction to Continuous Integration with JenkinsBrice Argenson
 
Continuous Integration, Build Pipelines and Continuous Deployment
Continuous Integration, Build Pipelines and Continuous DeploymentContinuous Integration, Build Pipelines and Continuous Deployment
Continuous Integration, Build Pipelines and Continuous DeploymentChristopher Read
 
JavaLand 2022 - Software architecture in a DevOps world
JavaLand 2022 - Software architecture in a DevOps worldJavaLand 2022 - Software architecture in a DevOps world
JavaLand 2022 - Software architecture in a DevOps worldBert Jan Schrijver
 
CI/CD with Jenkins and Docker - DevOps Meetup Day Thailand
CI/CD with Jenkins and Docker - DevOps Meetup Day ThailandCI/CD with Jenkins and Docker - DevOps Meetup Day Thailand
CI/CD with Jenkins and Docker - DevOps Meetup Day ThailandTroublemaker Khunpech
 
CI CD Pipeline Using Jenkins | Continuous Integration and Deployment | DevOps...
CI CD Pipeline Using Jenkins | Continuous Integration and Deployment | DevOps...CI CD Pipeline Using Jenkins | Continuous Integration and Deployment | DevOps...
CI CD Pipeline Using Jenkins | Continuous Integration and Deployment | DevOps...Edureka!
 
How To Be a Java Automated Testing Superstar
How To Be a Java Automated Testing SuperstarHow To Be a Java Automated Testing Superstar
How To Be a Java Automated Testing SuperstarVMware Tanzu
 

Mais procurados (20)

Introduction to DevOps Tools | DevOps Training | DevOps Tutorial for Beginner...
Introduction to DevOps Tools | DevOps Training | DevOps Tutorial for Beginner...Introduction to DevOps Tools | DevOps Training | DevOps Tutorial for Beginner...
Introduction to DevOps Tools | DevOps Training | DevOps Tutorial for Beginner...
 
How to Build a DevOps Toolchain
How to Build a DevOps ToolchainHow to Build a DevOps Toolchain
How to Build a DevOps Toolchain
 
Jumping from Continuous Integration to Continuous Delivery with Jenkins Enter...
Jumping from Continuous Integration to Continuous Delivery with Jenkins Enter...Jumping from Continuous Integration to Continuous Delivery with Jenkins Enter...
Jumping from Continuous Integration to Continuous Delivery with Jenkins Enter...
 
Jenkins talk at Silicon valley DevOps meetup
Jenkins talk at Silicon valley DevOps meetupJenkins talk at Silicon valley DevOps meetup
Jenkins talk at Silicon valley DevOps meetup
 
Continuous integration / deployment with Jenkins
Continuous integration / deployment with JenkinsContinuous integration / deployment with Jenkins
Continuous integration / deployment with Jenkins
 
Ci jenkins maven svn
Ci jenkins maven svnCi jenkins maven svn
Ci jenkins maven svn
 
Devops syllabus
Devops syllabusDevops syllabus
Devops syllabus
 
PuppetConf 2016: Continuous Delivery and DevOps with Jenkins and Puppet Enter...
PuppetConf 2016: Continuous Delivery and DevOps with Jenkins and Puppet Enter...PuppetConf 2016: Continuous Delivery and DevOps with Jenkins and Puppet Enter...
PuppetConf 2016: Continuous Delivery and DevOps with Jenkins and Puppet Enter...
 
DevOps Syllabus summer 2020
DevOps Syllabus summer 2020DevOps Syllabus summer 2020
DevOps Syllabus summer 2020
 
Guide To Jenkins Management Continuous Integration And Useful Plugins Complet...
Guide To Jenkins Management Continuous Integration And Useful Plugins Complet...Guide To Jenkins Management Continuous Integration And Useful Plugins Complet...
Guide To Jenkins Management Continuous Integration And Useful Plugins Complet...
 
Automating the build and deployment of legacy applications
Automating the build and deployment of legacy applicationsAutomating the build and deployment of legacy applications
Automating the build and deployment of legacy applications
 
Transforming Organizations with CI/CD
Transforming Organizations with CI/CDTransforming Organizations with CI/CD
Transforming Organizations with CI/CD
 
Hudson
HudsonHudson
Hudson
 
Introduction to Continuous Integration with Jenkins
Introduction to Continuous Integration with JenkinsIntroduction to Continuous Integration with Jenkins
Introduction to Continuous Integration with Jenkins
 
Continuous Integration, Build Pipelines and Continuous Deployment
Continuous Integration, Build Pipelines and Continuous DeploymentContinuous Integration, Build Pipelines and Continuous Deployment
Continuous Integration, Build Pipelines and Continuous Deployment
 
Jenkins
JenkinsJenkins
Jenkins
 
JavaLand 2022 - Software architecture in a DevOps world
JavaLand 2022 - Software architecture in a DevOps worldJavaLand 2022 - Software architecture in a DevOps world
JavaLand 2022 - Software architecture in a DevOps world
 
CI/CD with Jenkins and Docker - DevOps Meetup Day Thailand
CI/CD with Jenkins and Docker - DevOps Meetup Day ThailandCI/CD with Jenkins and Docker - DevOps Meetup Day Thailand
CI/CD with Jenkins and Docker - DevOps Meetup Day Thailand
 
CI CD Pipeline Using Jenkins | Continuous Integration and Deployment | DevOps...
CI CD Pipeline Using Jenkins | Continuous Integration and Deployment | DevOps...CI CD Pipeline Using Jenkins | Continuous Integration and Deployment | DevOps...
CI CD Pipeline Using Jenkins | Continuous Integration and Deployment | DevOps...
 
How To Be a Java Automated Testing Superstar
How To Be a Java Automated Testing SuperstarHow To Be a Java Automated Testing Superstar
How To Be a Java Automated Testing Superstar
 

Destaque (17)

Edificio Ermita
Edificio ErmitaEdificio Ermita
Edificio Ermita
 
Art deco
Art  decoArt  deco
Art deco
 
The Influence Report - Milan Design Week 2015
The Influence Report - Milan Design Week 2015The Influence Report - Milan Design Week 2015
The Influence Report - Milan Design Week 2015
 
Arquitectura Art Deco
Arquitectura Art DecoArquitectura Art Deco
Arquitectura Art Deco
 
Skyscrapers
Skyscrapers Skyscrapers
Skyscrapers
 
Skyscraper
SkyscraperSkyscraper
Skyscraper
 
Skyscrapers
SkyscrapersSkyscrapers
Skyscrapers
 
Construction Planning and Techniques used in skyscrapers
Construction Planning and Techniques used in skyscrapersConstruction Planning and Techniques used in skyscrapers
Construction Planning and Techniques used in skyscrapers
 
Skyscrapers
SkyscrapersSkyscrapers
Skyscrapers
 
Designing a Super Tall Skyscraper
Designing a Super Tall Skyscraper Designing a Super Tall Skyscraper
Designing a Super Tall Skyscraper
 
Skyscrapers
SkyscrapersSkyscrapers
Skyscrapers
 
Art Deco
Art DecoArt Deco
Art Deco
 
Arte deco
Arte decoArte deco
Arte deco
 
Art deco
Art decoArt deco
Art deco
 
Skyscrapers
SkyscrapersSkyscrapers
Skyscrapers
 
Tall buildings
Tall buildingsTall buildings
Tall buildings
 
High-rise structural systems
High-rise structural systemsHigh-rise structural systems
High-rise structural systems
 

Semelhante a Working on a Skyscraper in the Early Years of the XX Century

Continuos Integration and Delivery: from Zero to Hero with TeamCity, Docker a...
Continuos Integration and Delivery: from Zero to Hero with TeamCity, Docker a...Continuos Integration and Delivery: from Zero to Hero with TeamCity, Docker a...
Continuos Integration and Delivery: from Zero to Hero with TeamCity, Docker a...Lean IT Consulting
 
OpenStack Enabling DevOps
OpenStack Enabling DevOpsOpenStack Enabling DevOps
OpenStack Enabling DevOpsCisco DevNet
 
DevOps on AWS: Deep Dive on Continuous Delivery and the AWS Developer Tools
DevOps on AWS: Deep Dive on Continuous Delivery and the AWS Developer ToolsDevOps on AWS: Deep Dive on Continuous Delivery and the AWS Developer Tools
DevOps on AWS: Deep Dive on Continuous Delivery and the AWS Developer ToolsAmazon Web Services
 
DockerCon 15 Keynote - Day 2
DockerCon 15 Keynote - Day 2DockerCon 15 Keynote - Day 2
DockerCon 15 Keynote - Day 2Docker, Inc.
 
Continuous Load Testing with CloudTest and Jenkins
Continuous Load Testing with CloudTest and JenkinsContinuous Load Testing with CloudTest and Jenkins
Continuous Load Testing with CloudTest and JenkinsSOASTA
 
Software Architecture and Architectors: useless VS valuable
Software Architecture and Architectors: useless VS valuableSoftware Architecture and Architectors: useless VS valuable
Software Architecture and Architectors: useless VS valuableComsysto Reply GmbH
 
Application Lifecycle Management
Application Lifecycle ManagementApplication Lifecycle Management
Application Lifecycle ManagementAmazon Web Services
 
AWS ECS Copilot DevOps Presentation
AWS ECS Copilot DevOps PresentationAWS ECS Copilot DevOps Presentation
AWS ECS Copilot DevOps PresentationVarun Manik
 
My personal story from azure it pro to azure dev ops
My personal story from azure it pro to azure dev opsMy personal story from azure it pro to azure dev ops
My personal story from azure it pro to azure dev opsnj-azure
 
Continuous Load Testing with CloudTest and Jenkins
Continuous Load Testing with CloudTest and JenkinsContinuous Load Testing with CloudTest and Jenkins
Continuous Load Testing with CloudTest and JenkinsSOASTA
 
Experience in teaching devops
Experience in teaching devopsExperience in teaching devops
Experience in teaching devopsLen Bass
 
Confoo-Montreal-2016: Controlling Your Environments using Infrastructure as Code
Confoo-Montreal-2016: Controlling Your Environments using Infrastructure as CodeConfoo-Montreal-2016: Controlling Your Environments using Infrastructure as Code
Confoo-Montreal-2016: Controlling Your Environments using Infrastructure as CodeSteve Mercier
 
Application Delivery Patterns for Developers - Technical 401
Application Delivery Patterns for Developers - Technical 401Application Delivery Patterns for Developers - Technical 401
Application Delivery Patterns for Developers - Technical 401Amazon Web Services
 
Status Quo on the automation support in SOA Suite OGhTech17
Status Quo on the automation support in SOA Suite OGhTech17Status Quo on the automation support in SOA Suite OGhTech17
Status Quo on the automation support in SOA Suite OGhTech17Jon Petter Hjulstad
 
Moving a Monolith to Kubernetes
Moving a Monolith to KubernetesMoving a Monolith to Kubernetes
Moving a Monolith to KubernetesM. Scott Ford
 
Advanced Techniques for Initiating the DevOps Journey
Advanced Techniques for Initiating the DevOps JourneyAdvanced Techniques for Initiating the DevOps Journey
Advanced Techniques for Initiating the DevOps JourneyCA Technologies
 
Continuous Integration with Cloud Foundry Concourse and Docker on OpenPOWER
Continuous Integration with Cloud Foundry Concourse and Docker on OpenPOWERContinuous Integration with Cloud Foundry Concourse and Docker on OpenPOWER
Continuous Integration with Cloud Foundry Concourse and Docker on OpenPOWERIndrajit Poddar
 
Continuous Deployment of your Application - SpringOne Tour Dallas
Continuous Deployment of your Application - SpringOne Tour DallasContinuous Deployment of your Application - SpringOne Tour Dallas
Continuous Deployment of your Application - SpringOne Tour DallasVMware Tanzu
 
Dev/Test scenarios in DevOps world
Dev/Test scenarios in DevOps worldDev/Test scenarios in DevOps world
Dev/Test scenarios in DevOps worldDavide Benvegnù
 

Semelhante a Working on a Skyscraper in the Early Years of the XX Century (20)

Continuos Integration and Delivery: from Zero to Hero with TeamCity, Docker a...
Continuos Integration and Delivery: from Zero to Hero with TeamCity, Docker a...Continuos Integration and Delivery: from Zero to Hero with TeamCity, Docker a...
Continuos Integration and Delivery: from Zero to Hero with TeamCity, Docker a...
 
OpenStack Enabling DevOps
OpenStack Enabling DevOpsOpenStack Enabling DevOps
OpenStack Enabling DevOps
 
DevOps on AWS: Deep Dive on Continuous Delivery and the AWS Developer Tools
DevOps on AWS: Deep Dive on Continuous Delivery and the AWS Developer ToolsDevOps on AWS: Deep Dive on Continuous Delivery and the AWS Developer Tools
DevOps on AWS: Deep Dive on Continuous Delivery and the AWS Developer Tools
 
DockerCon 15 Keynote - Day 2
DockerCon 15 Keynote - Day 2DockerCon 15 Keynote - Day 2
DockerCon 15 Keynote - Day 2
 
Continuous Load Testing with CloudTest and Jenkins
Continuous Load Testing with CloudTest and JenkinsContinuous Load Testing with CloudTest and Jenkins
Continuous Load Testing with CloudTest and Jenkins
 
Software Architecture and Architectors: useless VS valuable
Software Architecture and Architectors: useless VS valuableSoftware Architecture and Architectors: useless VS valuable
Software Architecture and Architectors: useless VS valuable
 
Application Lifecycle Management
Application Lifecycle ManagementApplication Lifecycle Management
Application Lifecycle Management
 
AWS ECS Copilot DevOps Presentation
AWS ECS Copilot DevOps PresentationAWS ECS Copilot DevOps Presentation
AWS ECS Copilot DevOps Presentation
 
My personal story from azure it pro to azure dev ops
My personal story from azure it pro to azure dev opsMy personal story from azure it pro to azure dev ops
My personal story from azure it pro to azure dev ops
 
Continuous Load Testing with CloudTest and Jenkins
Continuous Load Testing with CloudTest and JenkinsContinuous Load Testing with CloudTest and Jenkins
Continuous Load Testing with CloudTest and Jenkins
 
Experience in teaching devops
Experience in teaching devopsExperience in teaching devops
Experience in teaching devops
 
Confoo-Montreal-2016: Controlling Your Environments using Infrastructure as Code
Confoo-Montreal-2016: Controlling Your Environments using Infrastructure as CodeConfoo-Montreal-2016: Controlling Your Environments using Infrastructure as Code
Confoo-Montreal-2016: Controlling Your Environments using Infrastructure as Code
 
Application Delivery Patterns for Developers - Technical 401
Application Delivery Patterns for Developers - Technical 401Application Delivery Patterns for Developers - Technical 401
Application Delivery Patterns for Developers - Technical 401
 
Status Quo on the automation support in SOA Suite OGhTech17
Status Quo on the automation support in SOA Suite OGhTech17Status Quo on the automation support in SOA Suite OGhTech17
Status Quo on the automation support in SOA Suite OGhTech17
 
Moving a Monolith to Kubernetes
Moving a Monolith to KubernetesMoving a Monolith to Kubernetes
Moving a Monolith to Kubernetes
 
Advanced Techniques for Initiating the DevOps Journey
Advanced Techniques for Initiating the DevOps JourneyAdvanced Techniques for Initiating the DevOps Journey
Advanced Techniques for Initiating the DevOps Journey
 
Azure DevOps in Action
Azure DevOps in ActionAzure DevOps in Action
Azure DevOps in Action
 
Continuous Integration with Cloud Foundry Concourse and Docker on OpenPOWER
Continuous Integration with Cloud Foundry Concourse and Docker on OpenPOWERContinuous Integration with Cloud Foundry Concourse and Docker on OpenPOWER
Continuous Integration with Cloud Foundry Concourse and Docker on OpenPOWER
 
Continuous Deployment of your Application - SpringOne Tour Dallas
Continuous Deployment of your Application - SpringOne Tour DallasContinuous Deployment of your Application - SpringOne Tour Dallas
Continuous Deployment of your Application - SpringOne Tour Dallas
 
Dev/Test scenarios in DevOps world
Dev/Test scenarios in DevOps worldDev/Test scenarios in DevOps world
Dev/Test scenarios in DevOps world
 

Último

Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsAlberto González Trastoy
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...OnePlan Solutions
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providermohitmore19
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfkalichargn70th171
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxComplianceQuest1
 
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfThe Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfkalichargn70th171
 
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️anilsa9823
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...OnePlan Solutions
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerThousandEyes
 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataBradBedford3
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsArshad QA
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxbodapatigopi8531
 
why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfwhy an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfjoe51371421
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackVICTOR MAESTRE RAMIREZ
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AIABDERRAOUF MEHENNI
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...kellynguyen01
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVshikhaohhpro
 
Active Directory Penetration Testing, cionsystems.com.pdf
Active Directory Penetration Testing, cionsystems.com.pdfActive Directory Penetration Testing, cionsystems.com.pdf
Active Directory Penetration Testing, cionsystems.com.pdfCionsystems
 

Último (20)

Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
 
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS LiveVip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
 
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfThe Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
 
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptx
 
why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfwhy an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdf
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStack
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
Active Directory Penetration Testing, cionsystems.com.pdf
Active Directory Penetration Testing, cionsystems.com.pdfActive Directory Penetration Testing, cionsystems.com.pdf
Active Directory Penetration Testing, cionsystems.com.pdf
 

Working on a Skyscraper in the Early Years of the XX Century

  • 1. CCCE 2014 WORKING ON A SKYSCRAPER IN THE EARLY YEARS OF THE XX CENTURY CCCE – 2014 – Budapest Talk: Miguel Ferreira (SBP) CloudStack evaluation: Dennis Bijlsma (SIG)
  • 2. CCCE 2014 THIS TALK It’s about how I’ve experienced CloudStack development
  • 3. CCCE 2014 WHO AM I Portuguese Mission Critical Engineer at Schuberg Philis Interests: • Software maintainability • Metrics-driven engineering • Testing
  • 4. Studied systems and software engineering
  • 6. Learned to see code as mathematical structures
  • 7. Focus on building the right software
  • 8. Real world software was not so mathematical
  • 9. Software is a mess of building blocks
  • 11. Focus on building software right
  • 16.
  • 18. CCCE 2014 WHAT SOFTWARE TAUGHT ME Maintainable software is made of tiny blocks of code Simple blocks, with meaningful names That blend in together to create a consistent picture Each piece is independently testable
  • 19. CCCE 2014 MAINTAINABILITY IS THE ENABLER Maintainability enables all other software quality characteristics Security, Reliability, Performance, Portability, …
  • 20. CCCE 2014 MAINTAINABLE SOFTWARE Changes often Changes fast by Arthur John Picton, source http://www.flickr.com/, licensed under CC BY 2.0
  • 21. CCCE 2014 UNIT-TESTS ENABLE MAINTAINABILITY The single most effective feedback loop Without it the risk of continuously grooming code is prohibitive System Integration Unit
  • 22. Wasn’t this about CloudStack?
  • 24.
  • 25. Mission critical cloud (with CloudStack)
  • 26. CCCE 2014 CLOUDSTACK What kind of software system is it? “CloudStack is an open source software platform that pools computing resources to build public, private, and hybrid Infrastructure as a Service (IaaS) clouds.”
  • 27. CCCE 2014 IN OTHER WORDS CloudStack coordinates the work of multiple computing systems in order to offer computing resources in a seemingly integrated fashion What kind of systems are we talking about? • Hypervisors • Storage devices • Network devices Pretty complex stuff
  • 28. CCCE 2014 MY FIRST REACTION Excitement to work on such an important piece of software It must be really good, given the adoption
  • 29. CCCE 2014 MY FIRST REACTION Excitement to work on such an important piece of software It must be really good, given the adoption CloudStack is “the Bomb”!!
  • 30. CCCE 2014 THEN I LOOKED UNDER THE HOOD Code is cluttered • Poor conventions (e.g. naming: ‘_*’, ‘s_*’) • Commented out code Poor domain model • Long methods • “God classes” • Duplicated objects • “Stringly typed” methods Poor error handling • “Pokémon” exception handling Build system adoption was left halfway
  • 31. CCCE 2014 THEN I LOOKED UNDER THE HOOD Code is cluttered • Poor conventions (e.g. naming: ‘_*’, ‘s_*’) • Commented out code Poor domain model • Long methods • “God classes” • Duplicated objects • “Stringly typed” methods Barely any unit-testing Poor error handling • “Pokémon” exception handling Build system adoption was left halfway
  • 33. Code is my work environment
  • 34. CCCE 2014 CLOUDSTACKWORK ENVIRONMENT Is not a safe work environment The feedback loop is way too long It requires extensive amount of debugging It lacks unit-tests (which keep me sane)
  • 35. CCCE 2014 TESTING CHALLENGES CloudStack code is tightly coupled to specific hardware devices It has a database Plug-in architecture Distributed development teams
  • 36. CCCE 2014 HOW DO YOU TEST SUCH A SYSTEM? There are other plug-in system out there Lets look at a study of test practices within the Eclipse project
  • 37. CCCE 2014 TEST PRACTICES IN ECLIPSE Test responsibilities • “Tester and developer, that’s one person. (…)” Unit testing • “We have unit testing, and that’s where we put the main effort” • “Ultimately, unit tests are our best friends, and everything else is already difficult.” • “What cannot be encapsulated is not tested.” Influence of the plug-in architecture • “The small glue code (..), that’s not tested, because it is just hard to test that. And for these untested glue code parts we had the most bugs.”
  • 38. CCCE 2014 GETTING BACK TO CLOUDSTACK Why doesn’t it have more unit tests? The code does not lend itself to be unit-tested!
  • 39. CCCE 2014 SOURCE CODE EVALUATION According to model used for certifying software maintainability Focus on simple low-level source code metrics Aggregation of metrics to system level respecting statistical properties
  • 40. CCCE 2014 MAINTAINABILITY RATING http://www.sig.eu
  • 41. CCCE 2014 VOLUME Java 670 KLOC JavaScript 70 KLOC C# 44 KLOC SQL 16 KLOC
  • 42. CCCE 2014 DUPLICATION Not Duplicated Duplicated
  • 43. CCCE 2014 UNIT SIZE 1 - 20 21 - 50 51 - 100 101 +
  • 44. CCCE 2014 MODULE COUPLING 0 - 10 11 - 20 21 - 50 51 +
  • 45. CCCE 2014 HOW DOES THIS TIE IN WITH UNIT-TESTING?
  • 46. CCCE 2014 LET’S WRITE A UNIT TEST TOGETHER
  • 47. CCCE 2014 WHAT DOES A UNIT-TEST LOOK LIKE Low complexity (barely no branching at all) 3 blocks • Setup: define the input • Execution: call the method under test • Verification: check expectations
  • 48. CCCE 2014 UPDATE GUEST NETWORK com.cloud.network.NetworkServiceImpl updateGuestNetwork(…) • 11 parameters, • 286 lines of code • 15 blocks of code (with header comments) Unit test • Setup: build/mock/abstract 11 input parameters (if you consider that 10 can be null, combinations = 2^10!) • Execution: call updateGuestNetwork(…) • Verification: what to expect from a 200+ line long method? Easy answer: an updated guest network!
  • 49. CCCE 2014 UPDATE GUEST NETWORK In which state was it? Was it a system network? Was it any other kind of network? Did it already have a name? Display name? Custom ID? Did the network offering change? Changing from VPC to non-VPC? Network domain, IP reservation, … Update life-cycle: shutdown all elements, make the update, turn back on
  • 50. CCCE 2014 NOW WHAT? I have some ideas…
  • 51. CCCE 2014 APACHE IS ALL ABOUT THE COMMUNITY There must be something the community can do Wants: • Better code, more tests, happier developers Don’t wants: • Strangle innovation, chase current developers away
  • 52. CCCE 2014 LTS MODEL Popular in several open-source projects Allows for cutting-edge innovation Allows for better structure and quality control
  • 53. Freeze the current master branch
  • 54. Freeze the current master branch Automate code quality checks
  • 55. Refactor on a need-to basis
  • 56. Development as usual in innovation branches
  • 57. When releasing in LTS, code has to meet quality standard
  • 58. At some point, swap devs between the two teams
  • 59. CCCE 2014 HOW TO MAKE IT WORK Freeze the current release branch Automate code quality standard • Measure unit size, complexity, coupling, duplication, etc. • Measure unit-testing coverage Keep the code as is, but • Every time the code is touched it is refactored according to the defined quality standard • No new code gets in the LTS branch without meeting the tech quality requirements Maintain two groups of developers (LTS and Innovation) • As time progresses swap people between the two
  • 60. CCCE 2014 SUMMARY CloudStack is functionally quite good, but the code is not keeping up Feedback loops for developers are way too long More and better unit testing will help to increase quality and developer satisfaction Only the CloudStack community has the power to change the game Schuberg Philis is more than interested in helping
  • 62. CCCE 2014 CREDITS Skyscraper construction work photos by Charles C. Ebbets, source http://nowyorkcity.com/, © All rights reserved Photo (and sand castle!) on slides 5 and 6, by Calvin Seibert, source http://www.flickr.com, © All rights reserved Photo on slide 7, by Pedro Moura Pinheiro, source http://www.flickr.com, licensed under CC BY 2.0 Photo on slides 8 to 10, by Benjamin Esham, source http://www.flickr.com/, licensed under CC BY 2.0 Photo on slides 12 to 14, source http://legoquestkids.blogspot.nl/, © All rights reserved Photo on slide 19, by Arthur John Picton, source http://www.flickr.com/, licensed under CC BY 2.0 Photo on slide 10, by Steven Zucker, source http://www.flickr.com/, licensed under CC BY 2.0 Photo on slide 22, by Murray Barnes, source http://www.flickr.com/, licensed under CC BY 2.0 Photo on slides 27 and 28, by Kristian, source http://www.flickr.com/, licensed under CC BY 2.0 Photo on slides 29 and 30, by Ben Wojdyla source http://jalopnik.com/5182381/adventures-with-wildlife-surprise-underhood-opossum-nest, © All rights reserved
  • 63. CCCE 2014 CONTACTS Miguel Ferreira, SBP, mferreira@schubergphilis.com, @miguel_f Dennis Bijlsma, SIG, d.bijlsma@sig.eu Ping us!

Notas do Editor

  1. Made my first few €s with software. Had my first paid development gig making small programs for research. Had my first real development project, hired by the university for a government project
  2. Image: https://www.flickr.com/photos/45648531@N00/3343486124/in/set-72157594166672630 Went into research myself. Formally built and verified software models Idea is to refine until code Although I know people and projects where this happens, I never got there myself Build the right software!
  3. Image: https://www.flickr.com/photos/45648531@N00/3343486124/in/set-72157594166672630 Went into research myself. Formally built and verified software models Idea is to refine until code Although I know people and projects where this happens, I never got there myself Build the right software!
  4. Image source: https://www.flickr.com/photos/pedromourapinheiro/5075612989 Got a job as in the R&D department of a company specialized in software quality In my mind software quality meant correct-by-construction… The perspective of my new employer was totally different.
  5. Image source: https://www.flickr.com/photos/bdesham/2432400623 Some code is created, much code is re-used
  6. Image source: https://www.flickr.com/photos/bdesham/2432400623 We called it legacy…
  7. Image source: https://www.flickr.com/photos/bdesham/2432400623 The mind shift for me was tremendous… instead of defining through formal-mathematics what good quality code is, I learned to observe existing software to learn what good software looks like!
  8. http://legoquestkids.blogspot.nl/2011/02/30-pieces-quest-34.html Pending permission Empirical approach to software quality, using real-world software to understand how maintainable software looks like Evaluation based purely on source code. No expert opinion! Assess individual software elements (a.k.a units), sort and categorize them At this point I was building software to analyze/measure other software Focused on building the software right (engineering) Learning process: how to survive as a Software Engineer?
  9. http://legoquestkids.blogspot.nl/2011/02/30-pieces-quest-34.html Pending permission Empirical approach to software quality, using real-world software to understand how maintainable software looks like Evaluation based purely on source code. No expert opinion! Assess individual software elements (a.k.a units), sort and categorize them At this point I was building software to analyze/measure other software Focused on building the software right (engineering) Learning process: how to survive as a Software Engineer?
  10. http://legoquestkids.blogspot.nl/2011/02/30-pieces-quest-34.html Pending permission Learn from software itself what good quality software looks like!
  11. Without the ability to change a software system dies!
  12. Image source: https://www.flickr.com/photos/arthurjohnpicton/4383221264
  13. Image source: https://www.flickr.com/photos/profzucker/15179450153 Feedback even without executing test Especially in a system with distributed development teams Especially in a system with runtime dependencies that are hard to get together
  14. Image source: https://www.flickr.com/photos/aeu04117/2478514667/in/photostream/ CC Things get quite strict and bureaucratic when software becomes a medical device
  15. Then I landed at SBP as a Mission Critical Engineer
  16. SBP uses CloudStack for its Mission Critical Cloud 100% functionally available cloud! I landed in the toolkit team which is engaged in CloudStack development (Daan & Hugo, VPC refactoring, etc) This was my first contact with ClouStack
  17. Image source: https://www.flickr.com/photos/kristian20/400019662 I was already putting my Engineer hat on…
  18. Image source: https://www.flickr.com/photos/kristian20/400019662 I was already putting my Engineer hat on…
  19. Image source: http://jalopnik.com/5182381/adventures-with-wildlife-surprise-underhood-opossum-nest Pending permission http://blog.codinghorror.com/new-programming-jargon/ Duplicated objects: HostDetailsDaoImpl is in two packages (1) engine/schema and (2) engine/orchestration Stringly typed: HostVO constructor has 27 parameters Pokémon: 1794 cases of catch exception 455 empty catches
  20. Image source: http://jalopnik.com/5182381/adventures-with-wildlife-surprise-underhood-opossum-nest Pending permission http://blog.codinghorror.com/new-programming-jargon/ Duplicated objects: HostDetailsDaoImpl is in two packages (1) engine/schema and (2) engine/orchestration Stringly typed: HostVO constructor has 27 parameters Pokémon: 1794 cases of catch exception 455 empty catches
  21. CloudStack is functionally very good, best of breed! #cloudtsackworks! But the technical quality of the code falls behind! Let it sink… I will come back to this in a moment
  22. Plug-in architecture introduces integration challenge Distributed development teams introduces communication challenge And also a culture clash (?)
  23. Lots and lots of small entities with high levels of duplication
  24. We found cases of cyclic class dependencies That makes it extremely tricky to test in isolation.
  25. HostDetailsDaoImpl exists in both engine/schema and engine/orchestration
  26. Considering also that in CloudStack code null is not simply an initialization value, it caries a lot of meaning throughout very long paths of execution
  27. Ubuntu, sonarqube, jenkins