SlideShare une entreprise Scribd logo
1  sur  41
Télécharger pour lire hors ligne
Peer Code Review:
   In a Nutshell

       Matt Quail, Atlassian
Patrick Coleman, Dash Navigation
Agenda

     Introduction (Matt)
      o Code Review, Crucible and Atlassian

     Code Review at Dash (Patrick)
      o Introduction of Crucible to SW Engineering
      o Addition of Fisheye for Code Reviews

     Q&A
Introduction
Fisheye & Crucible
At Dash Navigation

    Patrick Coleman
Tools Used By Dash Prior to Adding
Crucible

     Source Control – Perforce

     Issue Tracking – JIRA

     Wiki – Confluence

     Repository Viewer – Fisheye

     Continuous Build – Pulse

     Static Code Analysis – Coverity

     Code Coverage - Clover

     Code Review – Manual (i.e. no SW Tool)
Objectives for Adding Crucible to
Dash
 
     Increase Code Quality
       o Catch Defects in the source versus QA filing
         bugs
       o Facilitate non-defect code improvements by
         engaging more than one SW Engineer on a
         piece of SW
 
     Minimize Impact to SW Engineers
       o Reviews take place when Engineers want
       o Remote Engineers are not penalized
Step 1 – Crucible Evaluation

     Installed a 30 day evaluation of Crucible

     Recruited a handful of Senior Engineers to
      use Crucible

     Performed real reviews on current projects

     Discussed with trial users what they liked/
      disliked
      o  From this feedback we identified points of
         confusion that needed documentation on our Wiki
      o  Found task of creating a pre-commit review to be
         too time consuming (i.e. engineers wouldn’t do it)
Step 2 – Prepare for Team Wide
Rollout
 
     Created Wiki Page with basic
       instructions on how to create and
       participate in a Crucible Review
 
     Created a script to simplify the task of
       creating a diff file for pre-commit reviews
Step 3 – Crucible Rollout

     Announced to Entire SW Team the Addition of
      Crucible

     Intentionally did not have SW Managers
      create reviews

     Senior Engineers who participated in
      evaluation created reviews against their own
      submissions (this was not planned it just
      occurred organically)

     Most of the time an engineer was introduced
      to Crucible as a reviewer rather than having
      their own code reviewed
Crucible – 12+ Months Later

     Crucible is broadly viewed as an effective way
      to review both code changes and new code

     Majority of reviews are created by the author

     Release Managers selectively create reviews
      for changes made near to release points

     Marking reviews as complete has never fully
      taken hold but does not appear to detract from
      the value of conducting reviews in Crucible
Review Example
Fisheye - Continuous Code Review
via Email Notifications

     Hyperlink to Changelist in Fisheye

     Hyperlink to Issue in JIRA

     Submission Comment

     Magnitude of Change

     Hyperlink to File by File Diffs

     Superior to SCM Notifications for above reasons
Fisheye - Release Management Code
Review

 
     Use Fisheye to approve each code
       submission into weekly QA Build
Fisheye – Build to Build Reviews

     Use Fisheye to bracket changes from build to
      build

     Identify likely sources of defects by inspecting
      code changes
Build Automation: How to do Bamboo

            Rik Tamm-Daniels
             VP, Engineering
             June 2nd, 2009
About Attivio

 •      Located in Newton, MA
 •      Founded August 2007
 •      45+ Employees
 •      What we do: Unified Information Access




©
2007
Confiden,al
&
Proprietary.
All
Rights
Reserved.

What are we building?

 •  Attivioʼs Active Intelligence Engine
          –  Unified Information Access Platform
          –  Query Unstructured and Structured Information with
             the Precision of SQL and the Fuzziness of Search
 •  Shipped Product (OEM and Direct)
          –  Maintenance Release Window at the end of each
             sprint
          –  Minor Release every 3-4 months
          –  Major Releases Every 12-18 months



©
2007
Confiden,al
&
Proprietary.
All
Rights
Reserved.

Builds @ Attivio

 •  Automate Everything
 •  Everything builds off of Bamboo
 •  Maintain High-Quality
          –  8000+ Automated Tests
          –  Code coverage using Clover
          –  Static Analysis: Findbugs
 •  Source code insight/Build Failure Investigation
          –  Fisheye



©
2007
Confiden,al
&
Proprietary.
All
Rights
Reserved.

Key Product Stats

 •  Our Code Base
          •  100% Java (core product; 95% including add-on
             modules)
          •  Grails
          •  Flex
          •  C++ (3rd Party Code + Wrappers)
 •  Installer (Install4J)
          –  Java based installer
          –  XML configuration + Graphical UI


©
2007
Confiden,al
&
Proprietary.
All
Rights
Reserved.

Supported Platforms

 •  Platforms
          –  Linux
          –  Windows
          –  Solaris
          –  32 and 64-bit




©
2007
Confiden,al
&
Proprietary.
All
Rights
Reserved.

Build System 


 •  ANT
          –  Heavy Use of MacroDefs
          –  Custom Ant Tasks
          –  Custom JUnit Wrappers for Testing
          –  Generalized Model (Maven like Ant Structure)
          –  Heavy use of AntCall and Ant tasks
          –  Top – Level directory build-import.xml defines all the tasks
             that are used by sub-projects
          –  Dependency management MacroDef at top level inherited
             by sub tasks
 •  Source Control
          –  Subversion



©
2007
Confiden,al
&
Proprietary.
All
Rights
Reserved.

Attivio Build Directory Structure




                                                                        A=vio




    Common

                        App
              Core
                           Modules
                             Customers
     Installer

   (3rd
Party)




                               Component
      Component

                                                            Module
1
     Module
2
   Module3
   Customer
1
   Customer
2
   Customer
3

                                   1
              2





©
2007
Confiden,al
&
Proprietary.
All
Rights
Reserved.

Attivio Build Directory Structure (Cont.)



                                                                                  Component





                                                         build
                                         src
     test





     classes
             dist
               kit
       doc
     clover
   findbugs
     checkstyle
   com
     com





                                                                                                       a=vio
   a=vio





©
2007
Confiden,al
&
Proprietary.
All
Rights
Reserved.

Branching Methodology




                                                         Source:
Collabnet




©
2007
Confiden,al
&
Proprietary.
All
Rights
Reserved.

Branching Methodology

 •  We use the Unstable Branching Strategy
          –  Fits with the agile methodology better that the Agile
             Branching strategy
                    •  No need to deal with too many branches
                    •  Since our modules are already self contained we are
                       continually integrating all modules right in trunk
                    •  Less merging more branching
                    •  Ready to release code at any time without merging or
                       branching
                             –  In large part because of our test coverage 
                             –  Having system, integration, smoke and performance testing as
                                part of our daily activity




©
2007
Confiden,al
&
Proprietary.
All
Rights
Reserved.

Bamboo

 •  We use Bamboo for Continuous Integration,
    Nightly Builds and System Test Builds
          –  Continuous Builds run on each check-in 
          –  Nightly Builds of each Branch are scheduled
          –  System Test Builds depend upon Nightly Builds
 •  All Bamboo Agents run on VMWare Virtual
    Machines




©
2007
Confiden,al
&
Proprietary.
All
Rights
Reserved.

Build Agent Configuration 
                                                                                                                 Build
Agent

                                                                     Linux
x64

                                                                        VM
                                        Build
Type


                                                          Default

                                                          Agent



Linux
x64
             Linux
x64
               Linux
x64
           Linux
x86
        Windows
         Windows
         Solaris
x64

   VM
                    VM
                      VM
                  VM
            x86
VM
          x64
VM
              VM


  Con,nuous
              Old
Version
              QA
Install/        Full
Nightly
                     Full
Nightly
      Full
Nightly

                                                                                        Code
Check

  Trunk
Build
            Con,nuous
               System
Tests
          Build
                            Build
             Build


  Full
Nightly
                                                                         Full
Nightly

     Build
                                                                                Build





 ©
2007
Confiden,al
&
Proprietary.
All
Rights
Reserved.

Build Plans

 •  Trunk Continuous – check-in triggered
 •  Trunk Nightly Full (Windows, Linux, Solaris)
 •  Code Check – Clover, Findbugs, Corbertura,
    FlexCover
 •  System Test
 •  QA –Product Installer is run on isolated VMs
 •  Supported Version Continuous
 •  Support Version Full
 •  Move Head Tag – ensures consistent SVN version
    for all nightly builds



©
2007
Confiden,al
&
Proprietary.
All
Rights
Reserved.

Nightly Builds

 •  Nightly builds are scheduled
 •  Version Consistency
          –  An SVN tag is built using a “Move to Head Tag” Plan
          –  OS Specific builds are kicked off on the tag
          –  Code coverage Plan is kicked off on the tag
          –  System Test Plan kicked off on the tag
 •  Artifacts
          –  Short-circuit default behavior
          –  Send to NFS mount via symbolic link



©
2007
Confiden,al
&
Proprietary.
All
Rights
Reserved.

Code Coverage Build

 •  Run separately from other builds to reduce build
    times
 •  Produces Code Coverage Artifacts
          –  Clover
          –  Cobertura
          –  Findbugs
 •  We donʼt use Bambooʼs integrated Clover
    Report because it doesnʼt ft our build directory
    structure (each module built separately)


©
2007
Confiden,al
&
Proprietary.
All
Rights
Reserved.

System Test Build

 •  Runs system tests
          –  Installs our product to one or more nodes
          –  Runs functional and/or performance tests
          –  Tests produce JUnit-like output




©
2007
Confiden,al
&
Proprietary.
All
Rights
Reserved.

QA Builds

 •  QA picks up the latest successful build artifacts
          –  Post Build plug-in called to tag successful,
             unsuccessful and unsuccessful builds that just had
             test failures.
 •  QA runs multiple Plans testing customer specific,
    system, performance and scalability tests from
    Bamboo
 •  All QA tests are written using a custom JUnit
    framework


©
2007
Confiden,al
&
Proprietary.
All
Rights
Reserved.

Post-Build Automation

 •  Java Docs automatically generated via ANT task
    and written to the Confluence Wiki
 •  Hotfixes are posted on and linked from
    Confluence to the Artifact Repository




©
2007
Confiden,al
&
Proprietary.
All
Rights
Reserved.

Takeaways

 •  Why do we do Bamboo?
          –  Quality, quality, quality
          –  Time-to-market
          –  Release Flexibility




©
2007
Confiden,al
&
Proprietary.
All
Rights
Reserved.

Questions?




©
2007
Confiden,al
&
Proprietary.
All
Rights
Reserved.


Contenu connexe

Tendances

Zero downtime deploys for Rails apps
Zero downtime deploys for Rails appsZero downtime deploys for Rails apps
Zero downtime deploys for Rails apps
pedrobelo
 
Java EE Servlet JSP Tutorial- Cookbook 1
Java EE Servlet JSP Tutorial- Cookbook 1Java EE Servlet JSP Tutorial- Cookbook 1
Java EE Servlet JSP Tutorial- Cookbook 1
billdigman
 
How to integrate front end tool via gruntjs
How to integrate front end tool via gruntjsHow to integrate front end tool via gruntjs
How to integrate front end tool via gruntjs
Bo-Yi Wu
 

Tendances (20)

Automatisation in development and testing - within budget
Automatisation in development and testing - within budgetAutomatisation in development and testing - within budget
Automatisation in development and testing - within budget
 
Zero downtime deploys for Rails apps
Zero downtime deploys for Rails appsZero downtime deploys for Rails apps
Zero downtime deploys for Rails apps
 
VASmalltalk, Today and Tomorrow
VASmalltalk, Today and TomorrowVASmalltalk, Today and Tomorrow
VASmalltalk, Today and Tomorrow
 
Creating a full stack web app with python, npm, webpack and react
Creating a full stack web app with python, npm, webpack and reactCreating a full stack web app with python, npm, webpack and react
Creating a full stack web app with python, npm, webpack and react
 
Principles and Practices in Continuous Deployment at Etsy
Principles and Practices in Continuous Deployment at EtsyPrinciples and Practices in Continuous Deployment at Etsy
Principles and Practices in Continuous Deployment at Etsy
 
Single page apps with drupal 7
Single page apps with drupal 7Single page apps with drupal 7
Single page apps with drupal 7
 
Smart Client Development
Smart Client DevelopmentSmart Client Development
Smart Client Development
 
From the Atlassian Labs: FedEx Champions - Atlassian Summit 2010 - Lightning ...
From the Atlassian Labs: FedEx Champions - Atlassian Summit 2010 - Lightning ...From the Atlassian Labs: FedEx Champions - Atlassian Summit 2010 - Lightning ...
From the Atlassian Labs: FedEx Champions - Atlassian Summit 2010 - Lightning ...
 
So I Wrote a Manifest
So I Wrote a ManifestSo I Wrote a Manifest
So I Wrote a Manifest
 
Webinar slides: Replication Topology Changes for MySQL and MariaDB
Webinar slides: Replication Topology Changes for MySQL and MariaDBWebinar slides: Replication Topology Changes for MySQL and MariaDB
Webinar slides: Replication Topology Changes for MySQL and MariaDB
 
Introduction to Chef
Introduction to ChefIntroduction to Chef
Introduction to Chef
 
Tips for going fast in a slow world: Michael May at OSCON 2015
Tips for going fast in a slow world: Michael May at OSCON 2015Tips for going fast in a slow world: Michael May at OSCON 2015
Tips for going fast in a slow world: Michael May at OSCON 2015
 
One Click Provisioning With Enterprise Manager 12c
One Click Provisioning With Enterprise Manager 12cOne Click Provisioning With Enterprise Manager 12c
One Click Provisioning With Enterprise Manager 12c
 
Compile time dependency injection in Play 2.4 with macwire
Compile time dependency injection in Play 2.4 with macwireCompile time dependency injection in Play 2.4 with macwire
Compile time dependency injection in Play 2.4 with macwire
 
Java EE Servlet JSP Tutorial- Cookbook 1
Java EE Servlet JSP Tutorial- Cookbook 1Java EE Servlet JSP Tutorial- Cookbook 1
Java EE Servlet JSP Tutorial- Cookbook 1
 
Going crazy with Varnish and Symfony
Going crazy with Varnish and SymfonyGoing crazy with Varnish and Symfony
Going crazy with Varnish and Symfony
 
Spring Booted, But... @JCConf 16', Taiwan
Spring Booted, But... @JCConf 16', TaiwanSpring Booted, But... @JCConf 16', Taiwan
Spring Booted, But... @JCConf 16', Taiwan
 
On Software Release Engineering (Bram Adams)
On Software Release Engineering (Bram Adams)On Software Release Engineering (Bram Adams)
On Software Release Engineering (Bram Adams)
 
Silverlight vs HTML5 - Lessons learned from the real world...
Silverlight vs HTML5 - Lessons learned from the real world...Silverlight vs HTML5 - Lessons learned from the real world...
Silverlight vs HTML5 - Lessons learned from the real world...
 
How to integrate front end tool via gruntjs
How to integrate front end tool via gruntjsHow to integrate front end tool via gruntjs
How to integrate front end tool via gruntjs
 

En vedette

Increasing code quality with code reviews (poetry version)
Increasing code quality with code reviews (poetry version)Increasing code quality with code reviews (poetry version)
Increasing code quality with code reviews (poetry version)
David Stockton
 
Code Review
Code ReviewCode Review
Code Review
Ravi Raj
 

En vedette (20)

Is code review the solution?
Is code review the solution?Is code review the solution?
Is code review the solution?
 
Code Review: How and When - Tulsa TechFest 2016
Code Review: How and When - Tulsa TechFest 2016Code Review: How and When - Tulsa TechFest 2016
Code Review: How and When - Tulsa TechFest 2016
 
Code reviews
Code reviewsCode reviews
Code reviews
 
Code Review: Veni, ViDI, Vici (saner15)
Code Review: Veni, ViDI, Vici (saner15)Code Review: Veni, ViDI, Vici (saner15)
Code Review: Veni, ViDI, Vici (saner15)
 
Effective code reviews
Effective code reviewsEffective code reviews
Effective code reviews
 
How to get the most out of code reviews
How to get the most out of code reviewsHow to get the most out of code reviews
How to get the most out of code reviews
 
Code Review for Teams Too Busy to Review Code - Atlassian Summit 2010
Code Review for Teams Too Busy to Review Code - Atlassian Summit 2010Code Review for Teams Too Busy to Review Code - Atlassian Summit 2010
Code Review for Teams Too Busy to Review Code - Atlassian Summit 2010
 
Code reviews
Code reviewsCode reviews
Code reviews
 
WordCamp US 2016 - Ryan Markel: Code Review
WordCamp US 2016 - Ryan Markel: Code ReviewWordCamp US 2016 - Ryan Markel: Code Review
WordCamp US 2016 - Ryan Markel: Code Review
 
Review your code like a Googler
Review your code like a GooglerReview your code like a Googler
Review your code like a Googler
 
Git and Gerrit Code Review - Tech Talk - 2010_09_23
Git and Gerrit Code Review - Tech Talk - 2010_09_23Git and Gerrit Code Review - Tech Talk - 2010_09_23
Git and Gerrit Code Review - Tech Talk - 2010_09_23
 
Scaling your code review
Scaling your code reviewScaling your code review
Scaling your code review
 
Increasing code quality with code reviews (poetry version)
Increasing code quality with code reviews (poetry version)Increasing code quality with code reviews (poetry version)
Increasing code quality with code reviews (poetry version)
 
On to code review lessons learned at microsoft
On to code review lessons learned at microsoftOn to code review lessons learned at microsoft
On to code review lessons learned at microsoft
 
How not to run code reviews
How not to run code reviewsHow not to run code reviews
How not to run code reviews
 
Code Review: An apple a day
Code Review: An apple a dayCode Review: An apple a day
Code Review: An apple a day
 
Code Review
Code ReviewCode Review
Code Review
 
Code Review Matters and Manners
Code Review Matters and MannersCode Review Matters and Manners
Code Review Matters and Manners
 
Why you should integrate peer code reviews in your software company
Why you should integrate peer code reviews in your software companyWhy you should integrate peer code reviews in your software company
Why you should integrate peer code reviews in your software company
 
How Google Said - Ninja Code Review With Gerrit
How Google Said - Ninja Code Review With GerritHow Google Said - Ninja Code Review With Gerrit
How Google Said - Ninja Code Review With Gerrit
 

Similaire à Peer Code Review: In a Nutshell and The Tantric Team: Getting Your Automated Build Groove On

An Infrastructure for Team Development - Gaylord Aulke
An Infrastructure for Team Development - Gaylord AulkeAn Infrastructure for Team Development - Gaylord Aulke
An Infrastructure for Team Development - Gaylord Aulke
dpc
 
PHX Session #1: Development Best Practices And How Microsoft Helps
PHX Session #1: Development  Best  Practices And  How  Microsoft  HelpsPHX Session #1: Development  Best  Practices And  How  Microsoft  Helps
PHX Session #1: Development Best Practices And How Microsoft Helps
Steve Lange
 
Inside Picnik: How We Built Picnik (and What We Learned Along the Way)
Inside Picnik: How We Built Picnik (and What We Learned Along the Way)Inside Picnik: How We Built Picnik (and What We Learned Along the Way)
Inside Picnik: How We Built Picnik (and What We Learned Along the Way)
jjhuff
 
Automated Performance Testing With J Meter And Maven
Automated  Performance  Testing With  J Meter And  MavenAutomated  Performance  Testing With  J Meter And  Maven
Automated Performance Testing With J Meter And Maven
PerconaPerformance
 

Similaire à Peer Code Review: In a Nutshell and The Tantric Team: Getting Your Automated Build Groove On (20)

High-Octane Dev Teams: Three Things You Can Do To Improve Code Quality
High-Octane Dev Teams: Three Things You Can Do To Improve Code QualityHigh-Octane Dev Teams: Three Things You Can Do To Improve Code Quality
High-Octane Dev Teams: Three Things You Can Do To Improve Code Quality
 
My History with Atlassian Tools, and Why I'm Moving to Studio
My History with Atlassian Tools, and Why I'm Moving to StudioMy History with Atlassian Tools, and Why I'm Moving to Studio
My History with Atlassian Tools, and Why I'm Moving to Studio
 
An Infrastructure for Team Development - Gaylord Aulke
An Infrastructure for Team Development - Gaylord AulkeAn Infrastructure for Team Development - Gaylord Aulke
An Infrastructure for Team Development - Gaylord Aulke
 
Nevmug Lighthouse Automation7.1
Nevmug   Lighthouse   Automation7.1Nevmug   Lighthouse   Automation7.1
Nevmug Lighthouse Automation7.1
 
Working With People Adl Uni
Working With People Adl UniWorking With People Adl Uni
Working With People Adl Uni
 
PHX Session #1: Development Best Practices And How Microsoft Helps
PHX Session #1: Development  Best  Practices And  How  Microsoft  HelpsPHX Session #1: Development  Best  Practices And  How  Microsoft  Helps
PHX Session #1: Development Best Practices And How Microsoft Helps
 
Seminar - JBoss Migration
Seminar - JBoss MigrationSeminar - JBoss Migration
Seminar - JBoss Migration
 
Samuel Asher Rivello - PureMVC Hands On Part 2
Samuel Asher Rivello - PureMVC Hands On Part 2Samuel Asher Rivello - PureMVC Hands On Part 2
Samuel Asher Rivello - PureMVC Hands On Part 2
 
Administrivia: Golden Tips for Making JIRA Hum
Administrivia: Golden Tips for Making JIRA HumAdministrivia: Golden Tips for Making JIRA Hum
Administrivia: Golden Tips for Making JIRA Hum
 
Administrivia: Golden Tips for Making JIRA Hum
Administrivia: Golden Tips for Making JIRA HumAdministrivia: Golden Tips for Making JIRA Hum
Administrivia: Golden Tips for Making JIRA Hum
 
Capistrano
CapistranoCapistrano
Capistrano
 
Building a JavaScript Library
Building a JavaScript LibraryBuilding a JavaScript Library
Building a JavaScript Library
 
Agile Java Testing With Open Source Frameworks
Agile Java Testing With Open Source FrameworksAgile Java Testing With Open Source Frameworks
Agile Java Testing With Open Source Frameworks
 
Soa R 7 16 08 Appistry Private Clouds Etc Bob Lozano
Soa R 7 16 08   Appistry   Private Clouds Etc Bob LozanoSoa R 7 16 08   Appistry   Private Clouds Etc Bob Lozano
Soa R 7 16 08 Appistry Private Clouds Etc Bob Lozano
 
Ruby on Rails 101 - Presentation Slides for a Five Day Introductory Course
Ruby on Rails 101 - Presentation Slides for a Five Day Introductory CourseRuby on Rails 101 - Presentation Slides for a Five Day Introductory Course
Ruby on Rails 101 - Presentation Slides for a Five Day Introductory Course
 
Inside Picnik: How We Built Picnik (and What We Learned Along the Way)
Inside Picnik: How We Built Picnik (and What We Learned Along the Way)Inside Picnik: How We Built Picnik (and What We Learned Along the Way)
Inside Picnik: How We Built Picnik (and What We Learned Along the Way)
 
Automated Performance Testing With J Meter And Maven
Automated  Performance  Testing With  J Meter And  MavenAutomated  Performance  Testing With  J Meter And  Maven
Automated Performance Testing With J Meter And Maven
 
Magee Dday2 Fixing App Performance Italiano
Magee Dday2 Fixing App Performance ItalianoMagee Dday2 Fixing App Performance Italiano
Magee Dday2 Fixing App Performance Italiano
 
Software Configuration Management
Software Configuration ManagementSoftware Configuration Management
Software Configuration Management
 
Plugins 2.0: The Overview
Plugins 2.0: The OverviewPlugins 2.0: The Overview
Plugins 2.0: The Overview
 

Plus de Atlassian

Design Your Next App with the Atlassian Vendor Sketch Plugin
Design Your Next App with the Atlassian Vendor Sketch PluginDesign Your Next App with the Atlassian Vendor Sketch Plugin
Design Your Next App with the Atlassian Vendor Sketch Plugin
Atlassian
 

Plus de Atlassian (20)

International Women's Day 2020
International Women's Day 2020International Women's Day 2020
International Women's Day 2020
 
10 emerging trends that will unbreak your workplace in 2020
10 emerging trends that will unbreak your workplace in 202010 emerging trends that will unbreak your workplace in 2020
10 emerging trends that will unbreak your workplace in 2020
 
Forge App Showcase
Forge App ShowcaseForge App Showcase
Forge App Showcase
 
Let's Build an Editor Macro with Forge UI
Let's Build an Editor Macro with Forge UILet's Build an Editor Macro with Forge UI
Let's Build an Editor Macro with Forge UI
 
Meet the Forge Runtime
Meet the Forge RuntimeMeet the Forge Runtime
Meet the Forge Runtime
 
Forge UI: A New Way to Customize the Atlassian User Experience
Forge UI: A New Way to Customize the Atlassian User ExperienceForge UI: A New Way to Customize the Atlassian User Experience
Forge UI: A New Way to Customize the Atlassian User Experience
 
Take Action with Forge Triggers
Take Action with Forge TriggersTake Action with Forge Triggers
Take Action with Forge Triggers
 
Observability and Troubleshooting in Forge
Observability and Troubleshooting in ForgeObservability and Troubleshooting in Forge
Observability and Troubleshooting in Forge
 
Trusted by Default: The Forge Security & Privacy Model
Trusted by Default: The Forge Security & Privacy ModelTrusted by Default: The Forge Security & Privacy Model
Trusted by Default: The Forge Security & Privacy Model
 
Designing Forge UI: A Story of Designing an App UI System
Designing Forge UI: A Story of Designing an App UI SystemDesigning Forge UI: A Story of Designing an App UI System
Designing Forge UI: A Story of Designing an App UI System
 
Forge: Under the Hood
Forge: Under the HoodForge: Under the Hood
Forge: Under the Hood
 
Access to User Activities - Activity Platform APIs
Access to User Activities - Activity Platform APIsAccess to User Activities - Activity Platform APIs
Access to User Activities - Activity Platform APIs
 
Design Your Next App with the Atlassian Vendor Sketch Plugin
Design Your Next App with the Atlassian Vendor Sketch PluginDesign Your Next App with the Atlassian Vendor Sketch Plugin
Design Your Next App with the Atlassian Vendor Sketch Plugin
 
Tear Up Your Roadmap and Get Out of the Building
Tear Up Your Roadmap and Get Out of the BuildingTear Up Your Roadmap and Get Out of the Building
Tear Up Your Roadmap and Get Out of the Building
 
Nailing Measurement: a Framework for Measuring Metrics that Matter
Nailing Measurement: a Framework for Measuring Metrics that MatterNailing Measurement: a Framework for Measuring Metrics that Matter
Nailing Measurement: a Framework for Measuring Metrics that Matter
 
Building Apps With Color Blind Users in Mind
Building Apps With Color Blind Users in MindBuilding Apps With Color Blind Users in Mind
Building Apps With Color Blind Users in Mind
 
Creating Inclusive Experiences: Balancing Personality and Accessibility in UX...
Creating Inclusive Experiences: Balancing Personality and Accessibility in UX...Creating Inclusive Experiences: Balancing Personality and Accessibility in UX...
Creating Inclusive Experiences: Balancing Personality and Accessibility in UX...
 
Beyond Diversity: A Guide to Building Balanced Teams
Beyond Diversity: A Guide to Building Balanced TeamsBeyond Diversity: A Guide to Building Balanced Teams
Beyond Diversity: A Guide to Building Balanced Teams
 
The Road(map) to Las Vegas - The Story of an Emerging Self-Managed Team
The Road(map) to Las Vegas - The Story of an Emerging Self-Managed TeamThe Road(map) to Las Vegas - The Story of an Emerging Self-Managed Team
The Road(map) to Las Vegas - The Story of an Emerging Self-Managed Team
 
Building Apps With Enterprise in Mind
Building Apps With Enterprise in MindBuilding Apps With Enterprise in Mind
Building Apps With Enterprise in Mind
 

Dernier

Dernier (20)

Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 

Peer Code Review: In a Nutshell and The Tantric Team: Getting Your Automated Build Groove On

  • 1. Peer Code Review: In a Nutshell Matt Quail, Atlassian Patrick Coleman, Dash Navigation
  • 2. Agenda   Introduction (Matt) o Code Review, Crucible and Atlassian   Code Review at Dash (Patrick) o Introduction of Crucible to SW Engineering o Addition of Fisheye for Code Reviews   Q&A
  • 4. Fisheye & Crucible At Dash Navigation Patrick Coleman
  • 5. Tools Used By Dash Prior to Adding Crucible   Source Control – Perforce   Issue Tracking – JIRA   Wiki – Confluence   Repository Viewer – Fisheye   Continuous Build – Pulse   Static Code Analysis – Coverity   Code Coverage - Clover   Code Review – Manual (i.e. no SW Tool)
  • 6. Objectives for Adding Crucible to Dash   Increase Code Quality o Catch Defects in the source versus QA filing bugs o Facilitate non-defect code improvements by engaging more than one SW Engineer on a piece of SW   Minimize Impact to SW Engineers o Reviews take place when Engineers want o Remote Engineers are not penalized
  • 7. Step 1 – Crucible Evaluation   Installed a 30 day evaluation of Crucible   Recruited a handful of Senior Engineers to use Crucible   Performed real reviews on current projects   Discussed with trial users what they liked/ disliked o  From this feedback we identified points of confusion that needed documentation on our Wiki o  Found task of creating a pre-commit review to be too time consuming (i.e. engineers wouldn’t do it)
  • 8. Step 2 – Prepare for Team Wide Rollout   Created Wiki Page with basic instructions on how to create and participate in a Crucible Review   Created a script to simplify the task of creating a diff file for pre-commit reviews
  • 9. Step 3 – Crucible Rollout   Announced to Entire SW Team the Addition of Crucible   Intentionally did not have SW Managers create reviews   Senior Engineers who participated in evaluation created reviews against their own submissions (this was not planned it just occurred organically)   Most of the time an engineer was introduced to Crucible as a reviewer rather than having their own code reviewed
  • 10. Crucible – 12+ Months Later   Crucible is broadly viewed as an effective way to review both code changes and new code   Majority of reviews are created by the author   Release Managers selectively create reviews for changes made near to release points   Marking reviews as complete has never fully taken hold but does not appear to detract from the value of conducting reviews in Crucible
  • 12. Fisheye - Continuous Code Review via Email Notifications   Hyperlink to Changelist in Fisheye   Hyperlink to Issue in JIRA   Submission Comment   Magnitude of Change   Hyperlink to File by File Diffs   Superior to SCM Notifications for above reasons
  • 13. Fisheye - Release Management Code Review   Use Fisheye to approve each code submission into weekly QA Build
  • 14. Fisheye – Build to Build Reviews   Use Fisheye to bracket changes from build to build   Identify likely sources of defects by inspecting code changes
  • 15. Build Automation: How to do Bamboo Rik Tamm-Daniels VP, Engineering June 2nd, 2009
  • 16. About Attivio •  Located in Newton, MA •  Founded August 2007 •  45+ Employees •  What we do: Unified Information Access ©
2007
Confiden,al
&
Proprietary.
All
Rights
Reserved.

  • 17. What are we building? •  Attivioʼs Active Intelligence Engine –  Unified Information Access Platform –  Query Unstructured and Structured Information with the Precision of SQL and the Fuzziness of Search •  Shipped Product (OEM and Direct) –  Maintenance Release Window at the end of each sprint –  Minor Release every 3-4 months –  Major Releases Every 12-18 months ©
2007
Confiden,al
&
Proprietary.
All
Rights
Reserved.

  • 18. Builds @ Attivio •  Automate Everything •  Everything builds off of Bamboo •  Maintain High-Quality –  8000+ Automated Tests –  Code coverage using Clover –  Static Analysis: Findbugs •  Source code insight/Build Failure Investigation –  Fisheye ©
2007
Confiden,al
&
Proprietary.
All
Rights
Reserved.

  • 19. Key Product Stats •  Our Code Base •  100% Java (core product; 95% including add-on modules) •  Grails •  Flex •  C++ (3rd Party Code + Wrappers) •  Installer (Install4J) –  Java based installer –  XML configuration + Graphical UI ©
2007
Confiden,al
&
Proprietary.
All
Rights
Reserved.

  • 20. Supported Platforms •  Platforms –  Linux –  Windows –  Solaris –  32 and 64-bit ©
2007
Confiden,al
&
Proprietary.
All
Rights
Reserved.

  • 21. Build System •  ANT –  Heavy Use of MacroDefs –  Custom Ant Tasks –  Custom JUnit Wrappers for Testing –  Generalized Model (Maven like Ant Structure) –  Heavy use of AntCall and Ant tasks –  Top – Level directory build-import.xml defines all the tasks that are used by sub-projects –  Dependency management MacroDef at top level inherited by sub tasks •  Source Control –  Subversion ©
2007
Confiden,al
&
Proprietary.
All
Rights
Reserved.

  • 22. Attivio Build Directory Structure A=vio
 Common
 App
 Core
 Modules
 Customers
 Installer
 (3rd
Party)
 Component
 Component
 Module
1
 Module
2
 Module3
 Customer
1
 Customer
2
 Customer
3
 1
 2
 ©
2007
Confiden,al
&
Proprietary.
All
Rights
Reserved.

  • 23. Attivio Build Directory Structure (Cont.) Component
 build
 src
 test
 classes
 dist
 kit
 doc
 clover
 findbugs
 checkstyle
 com
 com
 a=vio
 a=vio
 ©
2007
Confiden,al
&
Proprietary.
All
Rights
Reserved.

  • 24. Branching Methodology Source:
Collabnet
 ©
2007
Confiden,al
&
Proprietary.
All
Rights
Reserved.

  • 25. Branching Methodology •  We use the Unstable Branching Strategy –  Fits with the agile methodology better that the Agile Branching strategy •  No need to deal with too many branches •  Since our modules are already self contained we are continually integrating all modules right in trunk •  Less merging more branching •  Ready to release code at any time without merging or branching –  In large part because of our test coverage –  Having system, integration, smoke and performance testing as part of our daily activity ©
2007
Confiden,al
&
Proprietary.
All
Rights
Reserved.

  • 26. Bamboo •  We use Bamboo for Continuous Integration, Nightly Builds and System Test Builds –  Continuous Builds run on each check-in –  Nightly Builds of each Branch are scheduled –  System Test Builds depend upon Nightly Builds •  All Bamboo Agents run on VMWare Virtual Machines ©
2007
Confiden,al
&
Proprietary.
All
Rights
Reserved.

  • 27. Build Agent Configuration Build
Agent
 Linux
x64
 VM
 Build
Type
 Default
 Agent
 Linux
x64
 Linux
x64
 Linux
x64
 Linux
x86
 Windows
 Windows
 Solaris
x64
 VM
 VM
 VM
 VM
 x86
VM
 x64
VM
 VM
 Con,nuous
 Old
Version
 QA
Install/ Full
Nightly
 Full
Nightly
 Full
Nightly
 Code
Check
 Trunk
Build
 Con,nuous
 System
Tests
 Build
 Build
 Build
 Full
Nightly
 Full
Nightly
 Build
 Build
 ©
2007
Confiden,al
&
Proprietary.
All
Rights
Reserved.

  • 28. Build Plans •  Trunk Continuous – check-in triggered •  Trunk Nightly Full (Windows, Linux, Solaris) •  Code Check – Clover, Findbugs, Corbertura, FlexCover •  System Test •  QA –Product Installer is run on isolated VMs •  Supported Version Continuous •  Support Version Full •  Move Head Tag – ensures consistent SVN version for all nightly builds ©
2007
Confiden,al
&
Proprietary.
All
Rights
Reserved.

  • 29.
  • 30. Nightly Builds •  Nightly builds are scheduled •  Version Consistency –  An SVN tag is built using a “Move to Head Tag” Plan –  OS Specific builds are kicked off on the tag –  Code coverage Plan is kicked off on the tag –  System Test Plan kicked off on the tag •  Artifacts –  Short-circuit default behavior –  Send to NFS mount via symbolic link ©
2007
Confiden,al
&
Proprietary.
All
Rights
Reserved.

  • 31.
  • 32.
  • 33. Code Coverage Build •  Run separately from other builds to reduce build times •  Produces Code Coverage Artifacts –  Clover –  Cobertura –  Findbugs •  We donʼt use Bambooʼs integrated Clover Report because it doesnʼt ft our build directory structure (each module built separately) ©
2007
Confiden,al
&
Proprietary.
All
Rights
Reserved.

  • 34.
  • 35. System Test Build •  Runs system tests –  Installs our product to one or more nodes –  Runs functional and/or performance tests –  Tests produce JUnit-like output ©
2007
Confiden,al
&
Proprietary.
All
Rights
Reserved.

  • 36.
  • 37. QA Builds •  QA picks up the latest successful build artifacts –  Post Build plug-in called to tag successful, unsuccessful and unsuccessful builds that just had test failures. •  QA runs multiple Plans testing customer specific, system, performance and scalability tests from Bamboo •  All QA tests are written using a custom JUnit framework ©
2007
Confiden,al
&
Proprietary.
All
Rights
Reserved.

  • 38.
  • 39. Post-Build Automation •  Java Docs automatically generated via ANT task and written to the Confluence Wiki •  Hotfixes are posted on and linked from Confluence to the Artifact Repository ©
2007
Confiden,al
&
Proprietary.
All
Rights
Reserved.

  • 40. Takeaways •  Why do we do Bamboo? –  Quality, quality, quality –  Time-to-market –  Release Flexibility ©
2007
Confiden,al
&
Proprietary.
All
Rights
Reserved.