SlideShare une entreprise Scribd logo
1  sur  42
Building rock solid software in  the real world Improving team workflow to improve your  software http://www.flickr.com/photos/preef/32995286/
[object Object],[object Object]
About me
About me
About me
About me
About me
http://www.flickr.com/photos/nagamori/56038263/
 
Planning
Coding http://www.angryduck.com/pictures/2010_11/Coding_Drunk.jpg
Automated checks http://www.bbc.co.uk/comedy/littlebritain/images/gallery/sunsearchers.jpg
Code reviews
Submitting your code
[object Object],[object Object],Code gets built You get tanked After code is submitted
Automatic checks
Automated checks ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Automatic checks http://www.inquisitr.com/88424/a-hint-you-might-really-need-to-find-a-life-collect-bellybutton-lint/ Lint php -l
Automatic checks PHPUnit
Automatic checks PHPCode_Sniffer
Automatic checks http://itsnotenoughitstoomuch.blogspot.com/2011/02/real-mess.html http://phpmd.org/ 
Automatic checks PHPCPD
Automatic checks PHPDCD
Automatic checks Code Coverage
Code reviews http://cache.ohinternet.com/images/b/b1/Doing-it-wrong.jpg
Code reviews http://www.reviewboard.org
Code reviews http://codereview.appspot.com
Code reviews
Code reviews
Code reviews
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Code reviews
Style guides http://www.forwardyouremails.com/wp-content/uploads/2010/09/Funny-Hair-Style.jpg
Style guides
Style guides ,[object Object],[object Object]
Style guides
Style guides
Style guides <?php or <? or <% $variableName or $variable_name ClassName or Class_Name Line length Ternary operator Documentation
Submitting code
After submitting
After submitting
After submitting
 

Contenu connexe

Tendances

Django の認証処理実装パターン / Django Authentication Patterns
Django の認証処理実装パターン / Django Authentication PatternsDjango の認証処理実装パターン / Django Authentication Patterns
Django の認証処理実装パターン / Django Authentication PatternsMasashi Shibata
 
Djangoアプリのデプロイに関するプラクティス / Deploy django application
Djangoアプリのデプロイに関するプラクティス / Deploy django applicationDjangoアプリのデプロイに関するプラクティス / Deploy django application
Djangoアプリのデプロイに関するプラクティス / Deploy django applicationMasashi Shibata
 
Pecha Kucha - Spiders
Pecha Kucha - SpidersPecha Kucha - Spiders
Pecha Kucha - Spidersdbredmiles
 
Essential Guide to Website Usability Testing
Essential Guide to Website Usability TestingEssential Guide to Website Usability Testing
Essential Guide to Website Usability TestingPlacester
 
Prieto Ruiz Joshua 4.4_final slides
Prieto Ruiz Joshua 4.4_final slidesPrieto Ruiz Joshua 4.4_final slides
Prieto Ruiz Joshua 4.4_final slidesJoshua_Che_Prieto
 
Don't just do agile, do it right! - Simon Storm + Mary Lynn
Don't just do agile, do it right! - Simon Storm + Mary LynnDon't just do agile, do it right! - Simon Storm + Mary Lynn
Don't just do agile, do it right! - Simon Storm + Mary LynnExoLeaders.com
 
Wind Pad 100w NUI interface PK
Wind Pad 100w NUI interface PKWind Pad 100w NUI interface PK
Wind Pad 100w NUI interface PKIM450ROCKS
 
JavaScript as a First Class Language
JavaScript as a First Class LanguageJavaScript as a First Class Language
JavaScript as a First Class Languagefabiopereirame
 
Blogs 101 and Websites for Free
Blogs 101 and Websites for Free Blogs 101 and Websites for Free
Blogs 101 and Websites for Free cat509
 
Technieken & tools @ Joomla! Performance Expert Sessie
Technieken & tools @ Joomla! Performance Expert SessieTechnieken & tools @ Joomla! Performance Expert Sessie
Technieken & tools @ Joomla! Performance Expert SessieSander Potjer
 
Hacker, you shall not pass!
Hacker, you shall not pass!Hacker, you shall not pass!
Hacker, you shall not pass!Cláudio André
 
Moodboard
MoodboardMoodboard
Moodboardeduriez
 
Taming the Testing Beast - AgileDC 2012
Taming the Testing Beast - AgileDC 2012Taming the Testing Beast - AgileDC 2012
Taming the Testing Beast - AgileDC 2012Daniel Doubrovkine
 
Bootstrap Presentation
Bootstrap PresentationBootstrap Presentation
Bootstrap PresentationSahil Verma
 

Tendances (20)

Fav
FavFav
Fav
 
Django の認証処理実装パターン / Django Authentication Patterns
Django の認証処理実装パターン / Django Authentication PatternsDjango の認証処理実装パターン / Django Authentication Patterns
Django の認証処理実装パターン / Django Authentication Patterns
 
Djangoアプリのデプロイに関するプラクティス / Deploy django application
Djangoアプリのデプロイに関するプラクティス / Deploy django applicationDjangoアプリのデプロイに関するプラクティス / Deploy django application
Djangoアプリのデプロイに関するプラクティス / Deploy django application
 
Word press plugins
Word press pluginsWord press plugins
Word press plugins
 
Pecha Kucha - Spiders
Pecha Kucha - SpidersPecha Kucha - Spiders
Pecha Kucha - Spiders
 
Essential Guide to Website Usability Testing
Essential Guide to Website Usability TestingEssential Guide to Website Usability Testing
Essential Guide to Website Usability Testing
 
Prieto Ruiz Joshua 4.4_final slides
Prieto Ruiz Joshua 4.4_final slidesPrieto Ruiz Joshua 4.4_final slides
Prieto Ruiz Joshua 4.4_final slides
 
Don't just do agile, do it right! - Simon Storm + Mary Lynn
Don't just do agile, do it right! - Simon Storm + Mary LynnDon't just do agile, do it right! - Simon Storm + Mary Lynn
Don't just do agile, do it right! - Simon Storm + Mary Lynn
 
Wind Pad 100w NUI interface PK
Wind Pad 100w NUI interface PKWind Pad 100w NUI interface PK
Wind Pad 100w NUI interface PK
 
JavaScript as a First Class Language
JavaScript as a First Class LanguageJavaScript as a First Class Language
JavaScript as a First Class Language
 
Blogs 101 and Websites for Free
Blogs 101 and Websites for Free Blogs 101 and Websites for Free
Blogs 101 and Websites for Free
 
Task 3 mood board
Task 3   mood boardTask 3   mood board
Task 3 mood board
 
Technieken & tools @ Joomla! Performance Expert Sessie
Technieken & tools @ Joomla! Performance Expert SessieTechnieken & tools @ Joomla! Performance Expert Sessie
Technieken & tools @ Joomla! Performance Expert Sessie
 
Pair Programming
Pair ProgrammingPair Programming
Pair Programming
 
Hacker, you shall not pass!
Hacker, you shall not pass!Hacker, you shall not pass!
Hacker, you shall not pass!
 
Sails.js - Overview
Sails.js - OverviewSails.js - Overview
Sails.js - Overview
 
Moodboard
MoodboardMoodboard
Moodboard
 
Taming the Testing Beast - AgileDC 2012
Taming the Testing Beast - AgileDC 2012Taming the Testing Beast - AgileDC 2012
Taming the Testing Beast - AgileDC 2012
 
Bootstrap Presentation
Bootstrap PresentationBootstrap Presentation
Bootstrap Presentation
 
Progressive Enhancement
Progressive EnhancementProgressive Enhancement
Progressive Enhancement
 

Similaire à Building rock solid software in the real world

Google I/O 2012 - Protecting your user experience while integrating 3rd party...
Google I/O 2012 - Protecting your user experience while integrating 3rd party...Google I/O 2012 - Protecting your user experience while integrating 3rd party...
Google I/O 2012 - Protecting your user experience while integrating 3rd party...Patrick Meenan
 
Working with Images in WordPress
Working with Images in WordPress Working with Images in WordPress
Working with Images in WordPress randyhoyt
 
WordPress common SEO issues by Olesia Korobka
WordPress common SEO issues by Olesia KorobkaWordPress common SEO issues by Olesia Korobka
WordPress common SEO issues by Olesia KorobkaAnton Shulke
 
10 Things Webdesigners tend to do Wrong in SEO - SMX 2014
10 Things Webdesigners tend to do Wrong in SEO  - SMX 201410 Things Webdesigners tend to do Wrong in SEO  - SMX 2014
10 Things Webdesigners tend to do Wrong in SEO - SMX 2014Timon Hartung
 
Google Chronicles: Analytics And Chrome
Google Chronicles: Analytics And ChromeGoogle Chronicles: Analytics And Chrome
Google Chronicles: Analytics And ChromeSarah Dutkiewicz
 
Workshop: Functional testing made easy with PHPUnit & Selenium (phpCE Poland,...
Workshop: Functional testing made easy with PHPUnit & Selenium (phpCE Poland,...Workshop: Functional testing made easy with PHPUnit & Selenium (phpCE Poland,...
Workshop: Functional testing made easy with PHPUnit & Selenium (phpCE Poland,...Ondřej Machulda
 
GDD Japan 2009 - Designing OpenSocial Apps For Speed and Scale
GDD Japan 2009 - Designing OpenSocial Apps For Speed and ScaleGDD Japan 2009 - Designing OpenSocial Apps For Speed and Scale
GDD Japan 2009 - Designing OpenSocial Apps For Speed and ScalePatrick Chanezon
 
Fix me if you can - DrupalCon prague
Fix me if you can - DrupalCon pragueFix me if you can - DrupalCon prague
Fix me if you can - DrupalCon praguehernanibf
 
20 tips to Improving Your WordPress Site...for Beginners
20 tips to Improving Your WordPress Site...for Beginners20 tips to Improving Your WordPress Site...for Beginners
20 tips to Improving Your WordPress Site...for BeginnersTRB Design, Inc.
 
Google-image poisoning: How hackers use images to spread malware
Google-image poisoning: How hackers use images to spread malwareGoogle-image poisoning: How hackers use images to spread malware
Google-image poisoning: How hackers use images to spread malwareAvast
 
The Internet of Insecure Things: 10 Most Wanted List
The Internet of Insecure Things: 10 Most Wanted ListThe Internet of Insecure Things: 10 Most Wanted List
The Internet of Insecure Things: 10 Most Wanted ListSecurity Weekly
 
Debugging, Monitoring and Profiling in TYPO3
Debugging, Monitoring and Profiling in TYPO3Debugging, Monitoring and Profiling in TYPO3
Debugging, Monitoring and Profiling in TYPO3AOE
 
Developing web applications in 2010
Developing web applications in 2010Developing web applications in 2010
Developing web applications in 2010Ignacio Coloma
 
Codeigniter : The Introduction
Codeigniter  : The IntroductionCodeigniter  : The Introduction
Codeigniter : The IntroductionAbdul Malik Ikhsan
 
WordPress Performance
WordPress PerformanceWordPress Performance
WordPress Performancedsero
 
Tightrope a11yto-rydberg
Tightrope a11yto-rydbergTightrope a11yto-rydberg
Tightrope a11yto-rydbergKevin Rydberg
 
Deep crawl the chaotic landscape of JavaScript
Deep crawl the chaotic landscape of JavaScript Deep crawl the chaotic landscape of JavaScript
Deep crawl the chaotic landscape of JavaScript Onely
 

Similaire à Building rock solid software in the real world (20)

Google I/O 2012 - Protecting your user experience while integrating 3rd party...
Google I/O 2012 - Protecting your user experience while integrating 3rd party...Google I/O 2012 - Protecting your user experience while integrating 3rd party...
Google I/O 2012 - Protecting your user experience while integrating 3rd party...
 
Working with Images in WordPress
Working with Images in WordPress Working with Images in WordPress
Working with Images in WordPress
 
WordPress common SEO issues by Olesia Korobka
WordPress common SEO issues by Olesia KorobkaWordPress common SEO issues by Olesia Korobka
WordPress common SEO issues by Olesia Korobka
 
10 Things Webdesigners tend to do Wrong in SEO - SMX 2014
10 Things Webdesigners tend to do Wrong in SEO  - SMX 201410 Things Webdesigners tend to do Wrong in SEO  - SMX 2014
10 Things Webdesigners tend to do Wrong in SEO - SMX 2014
 
Google Chronicles: Analytics And Chrome
Google Chronicles: Analytics And ChromeGoogle Chronicles: Analytics And Chrome
Google Chronicles: Analytics And Chrome
 
Workshop: Functional testing made easy with PHPUnit & Selenium (phpCE Poland,...
Workshop: Functional testing made easy with PHPUnit & Selenium (phpCE Poland,...Workshop: Functional testing made easy with PHPUnit & Selenium (phpCE Poland,...
Workshop: Functional testing made easy with PHPUnit & Selenium (phpCE Poland,...
 
GDD Japan 2009 - Designing OpenSocial Apps For Speed and Scale
GDD Japan 2009 - Designing OpenSocial Apps For Speed and ScaleGDD Japan 2009 - Designing OpenSocial Apps For Speed and Scale
GDD Japan 2009 - Designing OpenSocial Apps For Speed and Scale
 
Fix me if you can - DrupalCon prague
Fix me if you can - DrupalCon pragueFix me if you can - DrupalCon prague
Fix me if you can - DrupalCon prague
 
URL Design
URL DesignURL Design
URL Design
 
20 tips to Improving Your WordPress Site...for Beginners
20 tips to Improving Your WordPress Site...for Beginners20 tips to Improving Your WordPress Site...for Beginners
20 tips to Improving Your WordPress Site...for Beginners
 
Google-image poisoning: How hackers use images to spread malware
Google-image poisoning: How hackers use images to spread malwareGoogle-image poisoning: How hackers use images to spread malware
Google-image poisoning: How hackers use images to spread malware
 
The Internet of Insecure Things: 10 Most Wanted List
The Internet of Insecure Things: 10 Most Wanted ListThe Internet of Insecure Things: 10 Most Wanted List
The Internet of Insecure Things: 10 Most Wanted List
 
Debugging, Monitoring and Profiling in TYPO3
Debugging, Monitoring and Profiling in TYPO3Debugging, Monitoring and Profiling in TYPO3
Debugging, Monitoring and Profiling in TYPO3
 
Developing web applications in 2010
Developing web applications in 2010Developing web applications in 2010
Developing web applications in 2010
 
Technical Introduction to YDN
Technical Introduction to YDNTechnical Introduction to YDN
Technical Introduction to YDN
 
Codeigniter : The Introduction
Codeigniter  : The IntroductionCodeigniter  : The Introduction
Codeigniter : The Introduction
 
Hacking Wordpress Plugins
Hacking Wordpress PluginsHacking Wordpress Plugins
Hacking Wordpress Plugins
 
WordPress Performance
WordPress PerformanceWordPress Performance
WordPress Performance
 
Tightrope a11yto-rydberg
Tightrope a11yto-rydbergTightrope a11yto-rydberg
Tightrope a11yto-rydberg
 
Deep crawl the chaotic landscape of JavaScript
Deep crawl the chaotic landscape of JavaScript Deep crawl the chaotic landscape of JavaScript
Deep crawl the chaotic landscape of JavaScript
 

Dernier

Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...HostedbyConfluent
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphNeo4j
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions
 
Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAndikSusilo4
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 

Dernier (20)

Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food Manufacturing
 
Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & Application
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 

Building rock solid software in the real world

Notes de l'éditeur

  1. Title screen
  2. About me follow on twitter --&gt;I work at
  3. I work at Ning (reveal) 1. acquired by Glam. 2. sorry 3. Glam Media --&gt;I write code
  4. I write code mainly PHP and javascript --&gt; I play
  5. hockey --&gt; I have
  6. wife, kid, cat --&gt; I drink
  7. beer, especially when there are clouds around. Enough about me --&gt; this talk is about
  8. how to build better software as a team * not perfect * can be better * improve process to improve software --&gt;here&apos;s a typical
  9. software lifecycle: * Plan * Code * Run automated checks * Get a peer review * Submit your code * While your CI server builds it, you get beer --&gt;This talk is not
  10. about planning --&gt; nor is it about
  11. coding * sure you&apos;re great coders * don&apos;t need any help * never make mistakes but I bet your team members do --&gt; We&apos;ll talk a bit about
  12. automated checks to QA code before it gets submitted. --&gt; Quite a bit about 
  13. code reviews, your chance to head off facepalm worthy code before it causes damage. --&gt; We&apos;ll talk some about
  14. submitting code and possibly blocking bad code there. --&gt; And finally a bit about
  15. what happens after code gets submitted.
  16. First up: automated checks some things are easy to catch. You need HAL 9000... (reveal X3) * sorry dave * I can&apos;t let * you do that most of these can also run in your CB
  17. Here&apos;s an alphabet soup of checks you can run. We&apos;ll go through these individually. All help coders fix mistakes before they submit them. (reveal X3) * computer * says * no --&gt; the first tool is
  18. lint * bare minimum * finds syntax errors * many things that might cause a fatal error --&gt; a more rigorous tool for catching problems is
  19. phpunit * defacto standard for unit testing, or you can use simple test * too many other talks on PHPUnit, so I&apos;ll gloss over * those two should be run in pre-commit and in the CI server * the following should be available to run before commit * and run always as part of CI --&gt; The first tool is PHP code sniffer
  20. code sniffer * statically analyzes code for &amp;quot;smells&amp;quot; or bad things * missing docblocks * bad indentation * braces in the wrong place * most things in your style guide can be coded as a smell --&gt; next is PHPMD
  21. the mess detector Finds: * too long methods * bad language constructs (eval, goto) * unused variables * excessive complexity --&gt; the PHPCPD or
  22. copy paste detector * finds code blocks that are similar * should be refactored so the common code is in one place * keeps from having to remember --&gt; the there&apos;s the PHPDCD
  23. or dead code detector * find unreachable or uncalled code * code after return * code after exit * code in a conditional never fires --&gt; finally, there&apos;s
  24. code coverage * not really an automated check * you may want to run as part of the pre-flight check * shouldn&apos;t block submission --&gt; moving on to code reviews
  25. which are your chance to say DOIN IT RONG * used two code review packages * free as in speech and beer -&gt; the first is
  26. review board * written in Python and Django pros: * You host on your server * code never leaves your network cons: * you host on your server --&gt; the second is
  27. codereview.appspot.com * hosted on Google AppEngine * base on Mondrian (from Google) * Written by Guido Van Rossum (python) upload to Google&apos;s servers three types of review --&gt; pre review
  28. Stops bad code --&gt; or post review
  29. bad things have already happened You can guess which I prefer --&gt; there is also
  30. a team review with a projector has problems * can embarrass the coder * can split the team * build groupthink --&gt; what you&apos;re looking for
  31. anything the tools couldn&apos;t catch * logic errors (like ifs that don&apos;t make sense) * loops with off-by-one * performance problems (SQL in a loop) * things to refactor (large methods) or things they missed: * Style problems (not really wrong, but you know, wrong) * Typos (variable names, documentation) * Tests that don&apos;t have assertions * Methods without tests Again, your chance to say (reveal X4) YORE DOIN IT RONG --&gt; To really do code reviews right, you need a good 
  32. Some people don&apos;t have style --&gt; some do
  33. -- so how do we create a style
  34. two options: * roll your own * use an existing
  35. build your own * look at your code * build guide off that Pros: * don&apos;t have to change your code Cons: * More changes to code sniffer to use it, if you even can * New developers will argue against it * can be difficult to agree on styles --&gt;or you can
  36. use an existing guide Like pear or zend Pros: * well established * smart people made them * code sniffer may already have sniffs * very explicit Cons: * Your team probably won&apos;t agree * your existing code probably doesn&apos;t already follow guide --&gt; what to include
  37. in your style guide * what kind of php tags to allow * variable and class names * line length * forbidden code * how documentation is created --&gt; Moving on to submitting code
  38. * Run automated checks again * Good time to run even more checks (slow tests) Use repository hooks * Unit tests pass * Submitted code has a review Last chance to keep bad code out -- Code then goes to
  39. continuous build which * builds documentation * runs unit tests * calculates code coverage * builds reports * sends emails * updates dashboards --&gt;breaking the build
  40. should have consequences * can&apos;t leave until it&apos;s fixed * become the build master until next break --&gt; another helpful thing is
  41. to make it visible build orbs
  42. Questions?