In depth study - Dev teams tooling



Similar documents
Software Configuration Management and Continuous Integration

Continuous Integration with Jenkins. Coaching of Programming Teams (EDA270) J. Hembrink and P-G. Stenberg [dt08jh8

Content. Development Tools 2(63)

Introduction to Programming Tools. Anjana & Shankar September,2010

Continuous Integration For Real: The Perforce Java Platform. Hamish Reid Perforce Software Inc.

Software Construction

Meister Going Beyond Maven

Continuous Integration

SOFTWARE DEVELOPMENT BASICS SED

Developer Workshop Marc Dumontier McMaster/OSCAR-EMR

Git Branching for Continuous Delivery

Git Basics. Christian Hanser. Institute for Applied Information Processing and Communications Graz University of Technology. 6.

CS 2112 Lab: Version Control

CPSC 491. Today: Source code control. Source Code (Version) Control. Exercise: g., no git, subversion, cvs, etc.)

Pipeline Orchestration for Test Automation using Extended Buildbot Architecture

MATLAB & Git Versioning: The Very Basics

Jenkins Continuous Build System. Jesse Bowes CSCI-5828 Spring 2012

Source Control Systems

GECKO Software. Introducing FACTORY SCHEMES. Adaptable software factory Patterns

Using Git for Project Management with µvision

Jenkins on Windows with StreamBase

Version control with GIT

Version Control with Git. Linux Users Group UT Arlington. Rohit Rawat

Software Continuous Integration & Delivery

Version Control! Scenarios, Working with Git!

Source Control Guide: Git

Introducing Xcode Source Control

DAVE Usage with SVN. Presentation and Tutorial v 2.0. May, 2014

Continuous Integration and Delivery at NSIDC

Introduction to Git. Markus Kötter Notes. Leinelab Workshop July 28, 2015

CISC 275: Introduction to Software Engineering. Lab 5: Introduction to Revision Control with. Charlie Greenbacker University of Delaware Fall 2011

Version Control for Computational Economists: An Introduction

Efficient Automated Build and Deployment Framework with Parallel Process

CoDe:U Git Flow - a Continuous Delivery Approach

Improving database development. Recommendations for solving development problems using Red Gate tools

Introduction to the Git Version Control System

Sonatype CLM Enforcement Points - Continuous Integration (CI) Sonatype CLM Enforcement Points - Continuous Integration (CI)

vs. Web Site: Blog: blog.soebes.com Dipl.Ing.(FH) Karl Heinz Marbaise

WHITEPAPER. Improving database development

Using Oracle Cloud to Power Your Application Development Lifecycle

Hudson configuration manual

Version Control. Version Control

Continuous Integration

Escaping the Works-On-My-Machine badge Continuous Integration with PDE Build and Git

Mobile Development with Git, Gerrit & Jenkins

Version Control with. Ben Morgan

ACCELERATE DEVOPS USING OPENSHIFT PAAS

Software configuration management

Version control. with git and GitHub. Karl Broman. Biostatistics & Medical Informatics, UW Madison

Version Control Systems: SVN and GIT. How do VCS support SW development teams?

Version Uncontrolled! : How to Manage Your Version Control

Revision control systems (RCS) and

Zero-Touch Drupal Deployment

Build Automation for Mobile. or How to Deliver Quality Apps Continuously. Angelo Rüggeberg

DevOps Stack. Reid Holmes. Chris Parnin:

Improving your Drupal Development workflow with Continuous Integration

Delivering Quality Software with Continuous Integration

StriderCD Book. Release 1.4. Niall O Higgins

Testing Tools Content (Manual with Selenium) Levels of Testing

Extending Remote Desktop for Large Installations. Distributed Package Installs

Source Code Management for Continuous Integration and Deployment. Version 1.0 DO NOT DISTRIBUTE

Continuous Integration and Bamboo. Ryan Cutter CSCI Spring Semester

Software Engineering I (02161)

Continuous integration with Jenkins CI

Guideline for stresstest Page 1 of 6. Stress test

An Introduction to Git Version Control for SAS Programmers

Build management & Continuous integration. with Maven & Hudson

Configuration Manual Yahoo Cloud System Benchmark (YCSB) 24-Mar-14 SEECS-NUST Faria Mehak

Practicing Continuous Delivery using Hudson. Winston Prakash Oracle Corporation

Software Development In the Cloud Cloud management and ALM

Lab 0 (Setting up your Development Environment) Week 1

Implementing Continuous Integration Testing Prepared by:

Paul Barham Program Manager - Java. David Staheli (dastahel@microsoft.com) Software Development Manager - Java

Introduction to Version Control with Git

Nexus Professional Whitepaper. Repository Management: Stages of Adoption

Educational Collaborative Develops Big Data Solution with MongoDB

Automatic promotion and versioning with Oracle Data Integrator 12c

Team Name : PRX Team Members : Liang Yu, Parvathy Unnikrishnan Nair, Reto Kleeb, Xinyi Wang

Version control. HEAD is the name of the latest revision in the repository. It can be used in subversion rather than the latest revision number.

Version Control Using Subversion. 12 May 2013 OSU CSE 1

Introduction to Agile Software Development Process. Software Development Life Cycles

Subversion Integration for Visual Studio

Building, testing and deploying mobile apps with Jenkins & friends

Continuous integration for databases using Red Gate tools

We ( have extensive experience in enterprise and system architectures, system engineering, project management, and

Leveraging Rational Team Concert's build capabilities for Continuous Integration

Getting Started. UC Santa Barbara Setup public repository (GitHub, Bitbucket) Identify workflow:

Version Control Your Jenkins Jobs with Jenkins Job Builder

Kevin Lee Technical Consultant As part of a normal software build and release process

IBM Rational Software

Data management on HPC platforms

Sonatype CLM for Maven. Sonatype CLM for Maven

Department of Veterans Affairs. Open Source Electronic Health Record Services

Transcription:

In depth study - Dev teams tooling Max Åberg mat09mab@ Jacob Burenstam Linder ada09jbu@ Desired feedback Structure of paper Problem description Inconsistencies git story explanation 1

Introduction Hypotheses Model git story git story configuration Maven Travis CI Statistics Conclusions Technology Software Configuration Management GitHub Flow git story Continuous integration Developers environments and build tools References Introduction This study is a part of a course at the Faculty of Engineering, Lund University where students in groups of eight to ten develop a project in an agile manner. We, the authors, are acting as coaches to one of these groups. Our role as coaches will change during the project, considering that we want to experiment if development tooling can benefit in agile means. This report will explore the potential efficiency benefits of using customized development tooling for new XP development projects, built by inexperienced developers. This is achieved by using tools for Software Configuration Management (SCM), Continuous integration (CI), consistent developer environment and build tools (Maven). The tools used for each of these practices will be described later in the report. Each integration is tested by a CI server. Feedback from test runs and other reports will be available to developers about the state of the code. Our goal is to empower and simplify each developers workflow, so that they can focus on writing good, maintainable software while providing good traceability and consistency. 2

Problem The most common difficulty in groups is cohesiveness, that is being on the same page in layman's terms. To share a common vision and vocabulary is a necessity for a successful team project. Our study will have its foundation in evolving and optimizing these areas, not as a whole, but the workflow and development processes. Hypotheses We argue that by using software development tools, it could significantly increase developer productivity. By simplifying the standard workflow for developers in agile teams, they can focus on the code and the task at hand. It will also yield (in our variant) a more consistent development process. To enhance developer productivity we decided to experiment with tools. Tools that will result in empowerment and knowledge and at the same time making development as easy as possible. Instead of only using already developed tools we also created our own tool, extending git. This tool, called git story, enforces the usage of the GitHub flow branching model. It provides a simple user friendly command line interface and automates good VCS practices. Model All other 2014 EDA260 teams use Subversion as well as almost all other teams the years we studied EDA260, using only one master branch which all developers pushed to. That created a lot of merge conflicts. Furthermore the history becomes very hard to read since all commits are displayed in one consecutive list. This leads to a history where small and large commits are at a glance indistinguible. Our experience using only subclipse and the server provided by the school was that nobody ever checked the history log or reviewed commit diffs. Finding new bugs caused by an update where notoriously hard to track down, since you didn t know what code had changed. git-story We were inspired by the branch model described in Scott Chacons blog post GitHub Flow 1. GitHub Flows branching model provides a clear and easy to read history where each feature is developed in its own branch and then merged using GitHub pull requests. The model provides excellent traceability since each branch is logically named (i.e task8_1, fileprinter_bugfix) and an 3

aggregated diff can be displayed on GitHub. Each branch has it s own commit log where each commit can be reviewed separately. GitHub flow main principles: 1. master branch is always releasable 2. create each new feature from master branch 3. create a pull request on GitHub to merge with master git story design goals: 1. As simple as subversion 2. Unified development process 3. Run tests before each commit 4. Integrate with the projects build and test process Typical branch graph when using git story The main design goal was to simplify the teams workflow and they should feel comfortable using it in five minutes. This was accomplished with a shell script utility. The script can be used with only two commands to achieve the standard development workflow: gs dev and gs done. Before each commit the projects entire test suite is runned. The developer gets prompted to answer if the tests pass and can choose to abort the commit or ignore the failed test and commit it anyway. gs dev sets up a new working branch based of the latest version of master (or specified) branch in the remote repository. gs pull synchronizes the remote master branch with the current working branch. gs done commit message commits changes and synchronize changes from remote master (or specified) branch and pushes the committed code to the remote. Along side this, GitHub will be used (though there are several alternatives CodebaseHQ etc.) in order to provide a simple and intuitive interface for reviewing commit diffs, branch merges and general project activity. 4

On GitHub we added a service hook to Travis CI, which signals Travis CI that a push has been made to the repository. Travis CI will then run the projects test suite and report back the result to GitHub. In order to get your code merged to master a pull request has to be made from the GitHub web interface. In the pull request view, feedback from Travis CI is displayed (OK, error, fail etc.) and a pull request should only be merged to the master branch if Travis CI has runned all tests successfully. If any errors occur or if any test fails, rinse and repeat. git-story configuration Configuring git story is done by defining certain variables at the project root in a file named.gitstoryrc. All project specific configurations are defined in that file. Available configuration options are pre commit hook, pre commit checklist message and various prompt flags. Maven We decided to setup the project with Maven 2 since it is a very mature and free project that is very commonly used in the Java community, though there are several alternatives that achieves the same functionality. The rationale for using Maven, was that we wanted each development environment to be as similar as possible, so that if any dependencies where added all developers would use the exact same version of the dependency etc. Maven also has the ability to build jar files, so that releases can be build with ease by any developer in the team. Travis-CI We choose to use Travis CI 3 as our continuous integration server. There are several alternatives such as Drone.io or you could roll your own Jenkins server. We chose Travis CI because of their pre built integration with GitHub. Each time the a commit is pushed to the projects GitHub repository GitHub signals Travis CI that there is new code to test. Travis CI then downloads the commit, builds and tests using Maven and sends back a signal to GitHub whether all tests pass. Method 5

All larger software companies have dedicated tooling teams. Their only responsibility is to maintain and build development tools for other developers within the company. Other companies use hack weeks in order to let developers build their own tools 4 After each iteration we asked the team to evaluate the tools we had chosen for them (maven, git story and Travis CI) Iteration 1 During the first iteration there was a fair amount of confusion regarding the tools we choose to use. Even though we gave all of them an hour long spike to get acquainted with git story. The confusion was mostly a result due to inexperience with our predefined workflow in collaboration with git story. The most common reason that resulted in trouble was that the developers forgot to branch and developed directly in the local master branch. The development environment used, Eclipse, also caused a lot of problems. In collaboration with the Maven environment the JUnit dependency didn t work as expected, this due to that Eclipse didn t take these dependencies account. On some of the developers logins, Eclipse couldn t find/define the different classpaths and errors were distributed through all the code. This was taken care of manually by us coaches through the build path option. However it wasn t long before all programming pairs was comfortably using git story and later in the afternoon almost no questions arose. Other problems that were unrelated to our study also surfaced. We experienced a bottleneck in the afternoon, this happened due to a distributed denial of service attack (DDOS) on GitHub. They did on the contrary experience other problems and more often with their version control tools, which in some cases took hours to resolve. Switching pairs was also a difficult practice for the team to apply. We as coaches needed to step in and enforce them to switch pairs. Something that really surprised and impressed us was their will to refactor their code in the first iteration. The developers initiated a smaller meeting amongst themselves, on their initiative, and discussed possible future problems with their existing structure and counter actions as solutions. Feedback 1. Override gs dev commands check that the current working branch is clean. (Fixed 5 gs fetch ) Iteration 2 UTF 8 Task review (red code) Manual offline Pair programming (forced switching) Code responsability (developers feel that others have more experience in certain areas and therefore want them to continue to develop in that area) 6

Release (some stress) If several pairs are implementing, unconscious, the same functionality. How can they rollback their changes? Iteration 3 Bugfinding hard, took more time than needed and became a bottleneck Iteration 4 Before this iteration we predicted that architecture problems would arise. This because of the previously refactoring wasn t general refactorization, the team had only done refactorizations that temporary treated problems in the nearby future (next coming story). We decided to step aside a little, since we previously had stated the importance of refactoring, and let the team discover this for themselves. Unfortunately they discovered this in the afternoon and not much was successfully delivered. The customer had prioritized technical document and the focus was mostly placed on that, but even this task wasn t done effortlessly. Sadly the technical documents were stored in target folder. After a pull, Maven runs all tests and outputs to the target folder and therefore the files were erased. This folder is git ignored and changes were not tracked. The issue was resolved by using the Eclipse history feature. That git didn t track the target folder was expected behaviour, the problem occurred because the developer didn t know about the gitignore. This might have been naive from us and at the same time bad practice from us. We should also have emphasized the importance about gitignore and made it clear which paths/folders that are ignored. We created a questionnaire 6 including important questions regarding git story. The summary of the responses show that our tool has made a positive impact 7 (to be edited). Iteration 5 Iteration 6 Iteration 7 7

Statistics Itr Pull requests Branches Commits Builds Additions Deletions 1 21 18 67 90 898 513 2 23 21 73 101 1554 693 3 20 20 126 103 3007 2011 4 28 21 86 116 4991 2938 5 6 7 Conclusions Tools are a good idea, but no the solution. Technology Prerequisites Linux/Unix/OSX (Windows with Cygwin) Small Bash script for simplified SCM (git story) Version controlled workflow process (git story) Pre commit hooks, for automating testing on commit and merge. Continuous Integration Build and Test every pushed branch Quick feedback to the team Traceability Track which commit last ran the entire test suite successfully. Simplicity A SAAS (Software As A Service) product is suitable to use, since no server needs to be configured. (e.g Travis CI and drone.io, both support concurrent builds and is free for open source software) Build script 8

Maven, Gradle or Ant IDE Any (or no) IDE can be used. Software Configuration Management GitHub Flow http://scottchacon.com/2011/08/31/github flow.html git-story Alternatives: git flow by nvie Continuous integration Travis-CI Alternatives: drone.io (SAAS), Jenkins (roll your own server) etc. etc Developers environments and build tools Maven Alternatives: Gradle (Androids standard) etc. etc 9

References git story form: https://docs.google.com/forms/d/1ggrrwfoeseix8okeanqbl9ua7einx78lmb EVv_7prk/viewfor m http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/41868.pdf http://nvie.com/posts/a successful git branching model/ Scott Chacon. Pro Git. Apress, 1st edition, Aug 2009. Linus Thorvalds on git @ Google, http://www.youtube.com/watch?v=4xpnkhjaok8 1 http://scottchacon.com/2011/08/31/github flow.html 2 https://maven.apache.org/ 3 https://travis ci.org 4 http://labs.spotify.com/2013/02/15/organizing a hack week/ 5 https://github.com/buren/git story/issues/14 6 git story form: https://docs.google.com/forms/d/1ggrrwfoeseix8okeanqbl9ua7einx78lmb EVv_7prk/viewfor m 7 git story form responses: https://docs.google.com/forms/d/1ggrrwfoeseix8okeanqbl9ua7einx78lmb EVv_7prk/viewan alytics 10