CSE 70: Software Development Pipeline Build Process, XML, Repositories



Similar documents
CSE 70: Software Development Pipeline Version Control with Subversion, Continuous Integration with Bamboo, Issue Tracking with Jira

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

Using SVN to Manage Source RTL

Revision control systems (RCS) and

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

Using SVN to Manage Source RTL

Content. Development Tools 2(63)

Continuous Integration

Build Management. Context. Learning Objectives

Tutorial 5: Developing Java applications

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.

Expert PHP 5 Tools. Proven enterprise development tools and best practices for designing, coding, testing, and deploying PHP applications.

Version Control with Subversion

Version Control with Svn, Git and git-svn. Kate Hedstrom ARSC, UAF

Version control tracks multiple versions. Configuration Management. Version Control. V Software Engineering Lecture 12, Spring 2008

CS108, Stanford Handout #33. CVS in Eclipse

CSCB07 Software Design Version Control

Software Configuration Management. Context. Learning Objectives

CSE 374 Programming Concepts & Tools. Laura Campbell (Thanks to Hal Perkins) Winter 2014 Lecture 16 Version control and svn

Builder User Guide. Version Visual Rules Suite - Builder. Bosch Software Innovations

Version Control with Subversion

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

Continuous Integration and Delivery at NSIDC

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

Version Control Using Subversion. 12 May 2013 OSU CSE 1

XMLVend Protocol Message Validation Suite

Source Control Guide: Git

Configuration & Build Management

Version Control. Luka Milovanov

Source Control Systems

Automation of Flex Building and Unit Testing or Continuous Integration with Flex, FlexUnit, and Ant

Using Subversion in Computer Science

Version Control with. Ben Morgan

Annoyances with our current source control Can it get more comfortable? Git Appendix. Git vs Subversion. Andrey Kotlarski 13.XII.

To reduce or not to reduce, that is the question

Redbooks Paper. Deploying Applications Using IBM Rational ClearCase and IBM Tivoli Provisioning Manager. Introduction

Software Delivery Integration and Source Code Management. for Suppliers

Introducing Xcode Source Control

IKAN ALM Architecture. Closing the Gap Enterprise-wide Application Lifecycle Management

SVN Setup and Configuration Management

JavaScript Applications for the Enterprise: From Empty Folders to Managed Deployments. George Bochenek Randy Jones

Software Configuration Management. Addendum zu Kapitel 13

Hello World Portlet Rendered with JSP for WebSphere Portal Version 4.1

Git Basics. Christopher Simpkins Chris Simpkins (Georgia Tech) CS 2340 Objects and Design CS / 22

Software Development In the Cloud Cloud management and ALM

Builder User Guide. Version 5.4. Visual Rules Suite - Builder. Bosch Software Innovations

INF 111 / CSE 121. Homework 4: Subversion Due Tuesday, July 14, 2009

Version Control with Subversion and Xcode

CS 103 Lab Linux and Virtual Machines

using version control in system administration

Efficient Automated Build and Deployment Framework with Parallel Process

Introduction to the course, Eclipse and Python

Introduction to Version Control

Version Control! Scenarios, Working with Git!

Managing Software Projects Like a Boss with Subversion and Trac

Work. MATLAB Source Control Using Git

Version control with GIT

Jenkins on Windows with StreamBase

IDS 561 Big data analytics Assignment 1

File S1: Supplementary Information of CloudDOE

BlueJ Teamwork Tutorial

Automate Your Deployment with Bamboo, Drush and Features DrupalCamp Scotland, 9 th 10 th May 2014

Hadoop Tutorial. General Instructions

Software configuration management

Lab 0 (Setting up your Development Environment) Week 1

1001ICT Introduction To Programming Lecture Notes

MATLAB & Git Versioning: The Very Basics

Using Actian PSQL as a Data Store with VMware vfabric SQLFire. Actian PSQL White Paper May 2013

Tutorial 0A Programming on the command line

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

Creating a Java application using Perfect Developer and the Java Develo...

Week 2 Practical Objects and Turtles

Application Notes for Packaging and Deploying Avaya Communications Process Manager Sample SDK Web Application on a JBoss Application Server Issue 1.

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

Force.com Migration Tool Guide

Hudson Continous Integration Server. Stefan Saasen,

Global Software Change Management for PVCS Version Manager

Version Control Tools

Automating the Nengo build process

Maven or how to automate java builds, tests and version management with open source tools

Implementation Guide:

SVN Starter s Guide Compiled by Pearl Guterman June 2005

Using Oracle Cloud to Power Your Application Development Lifecycle

PxPlus Version Control System Using TortoiseSVN. Jane Raymond

Oracle Service Bus Examples and Tutorials

Jazz Source Control Best Practices

CS 2112 Lab: Version Control

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

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

Automatic promotion and versioning with Oracle Data Integrator 12c

Transcription:

CSE 70: Software Development Pipeline Build Process, XML, Repositories Ingolf Krueger Department of Computer Science & Engineering University of California, San Diego La Jolla, CA 92093-0114, USA California Institute for Telecommunications and Information Technologies La Jolla, CA 92093-0405, USA

Learning Goals for Today Ingolf Krueger, 2010 CSE 2

Learning Goals Be able to identify key elements of the software development pipeline Understand a basic Java program and how it is compiled/run Be able to change a given program to introduce functions and additional classes that can evolve separately Understand the need for a build tool See Ant used to automate compilation and other tasks Be able to write basic Ant files yourself Understand the challenges of maintaining a code base in an individual and team development setting Understand the need for and basic principles of version control/ configuration management Ingolf Krueger, 2010 CSE 3

Key elements of the software development pipeline Ingolf Krueger, 2010 CSE 4

Software Development Pipeline: Requirements System Ingolf Krueger, 2010 CSE 5

Stage 0: Individual, using an IDE Ingolf Krueger, 2010 CSE 6

Stage 1: Individual, using IDE, Test and Build Tools Ingolf Krueger, 2010 CSE 7

Stage 2: Individual, w/ide, Local Build/Test Tools and Version Control Ingolf Krueger, 2010 CSE 8

Stage 3: Small Team w/ide, Test, Build, Version Control Ingolf Krueger, 2010 CSE 9

Stage 4: Small to Medium Teams w/automated Build Process Ingolf Krueger, 2010 CSE 10

Stage 4: Small to Medium Teams w/automated Build Process We ll cover all of these over the next few lectures and labs Ingolf Krueger, 2010 CSE 11

Stage 4: Small to Medium Teams w/automated Build Process Today s focus: Build Tools & Basics of Version Control Ingolf Krueger, 2010 CSE 12

Stage 0 to Stage 1 Why? Ingolf Krueger, 2010 CSE 13

Write a program that formats and outputs a given String Hello! H-e-l-l-o-!-! Ingolf Krueger, 2010 CSE 14

We want to change the Formatter and the main program separately: Introduce a StringFormatter class Ingolf Krueger, 2010 CSE 15

1 st attempt: introduce a dedicated class! package today;! StringFormatter.java! public class StringFormatter {! StringFormatter(){};! public String formatstring(string in) {! char[] cv = new char[2*in.length()];! for(int i = 0; i < cv.length; i+=2) {! cv[i] = in.charat(i/2);! cv[i+1] = - ;! }! return new String(cv);! }! }! Ingolf Krueger, 2010 CSE 16

1 st attempt: introduce a dedicated class! package today;! Printer.java! public class Printer {! public static void main(string[] args) {! StringFormatter sf = new StringFormatter();! String out = sf.formatstring("hello!");! System.out.println("formatted: "+out);! }! }! Ingolf Krueger, 2010 CSE 17

Looks good! Let s get it compiled! By now we have TWO Java source files: Printer.java! StringFormatter.java! In what order do we need to compile them? Ingolf Krueger, 2010 CSE 18

Java Compile Command (command line) 1 javac -d bin -cp bin src3/stringformatter.java! 2 javac -d bin -cp bin src3/printer.java! Ingolf Krueger, 2010 CSE 19

Introduce symbolic names for special characters Ingolf Krueger, 2010 CSE 20

2 nd attempt: add a class for symbolic names! package today;! CharConstantHolder.java! public abstract class CharConstantHolder {! }! public static char SPACE = ' ';! public static char DASH = '-';! public static char STAR = '*';!...! public class StringFormatter {!...! }! cv[i] = in.charat(i/2);! cv[i+1] = CharConstantHolder.STAR;!...! StringFormatter.java! Ingolf Krueger, 2010 CSE 21

Looks good! Let s get it compiled! By now we have THREE Java source files: Printer.java! depends on 3 CharConstantHolder.java! depends on 1 StringFormatter.java! 2 In what order do we need to compile them? Ingolf Krueger, 2010 CSE 22

Java Compile Command (command line) 1 javac -d bin -cp bin src4/charconstantholder.java! 2 javac -d bin -cp bin src4/stringformatter.java! javac -d bin -cp bin src4/printer.java! 3 Ingolf Krueger, 2010 CSE 23

Can we avoid manual recompiles and automate other tasks as well? Yes! Enter: Ant Ingolf Krueger, 2010 CSE 24

What is Ant? Apache Ant is an open source Java-based Build tool Works across platforms written in Java, input: XML Interlude: XML Ingolf Krueger, 2010 CSE 25

extensible Markup Language (XML) XML is a set of rules/guidelines for describing structured data in plain text XML supports creation of domain-specific languages that add meaning to data Start tag Example! <project>! <name> week2 </name>! <basedir>. </basedir>! <default> compile </default>! </project>! End tag Ingolf Krueger, 2010 CSE 26

XML: Tags and Elements XML is a set of rules/guidelines for describing structured data in plain text XML supports creation of domain-specific languages that add meaning to data Start tag Example! <project>! <name> week2 </name>! <basedir>. </basedir>! <default> compile </default>! </project>! Element/Data End tag Ingolf Krueger, 2010 CSE 27

XML Example XML is a set of rules/guidelines for describing structured data in plain text XML supports creation of domain-specific languages that add meaning to data <project>! <name> week2 </name>! <basedir>. </basedir>! <default> compile </default>! </project>! Example! Ingolf Krueger, 2010 CSE 28

XML Example XML is a set of rules/guidelines for describing structured data in plain text XML supports creation of domain-specific languages that add meaning to data <project>! <name> week2 </name>! <basedir>. </basedir>! <default> compile </default>! </project>! Example! Ingolf Krueger, 2010 CSE 29

In short: tags add meaning to data Ingolf Krueger, 2010 CSE 30

Writing Data Structures in XML vs. Java <project>! <name> week2 </name>! <basedir>. </basedir>! <default> compile </default>! </project>! Example.xml! class Project {! private:! Name name;! Basedir basedir;! Default default;!! }! vs. class Name {! private:! String s;!! }! class Default {! private:! String d;!! }! class Basedir {! private:! String bd;!! }! Ingolf Krueger, 2010 CSE 31

<project>! <name> week2 </name>! <basedir>. </basedir>! <default> compile </default>! </project>! Alternative Styles <project name = week2 basedir =. default = compile >! </project>! vs. <project name = week2 basedir =. default = compile />! vs. Attribute Ingolf Krueger, 2010 CSE 32

Example Write an XML file that holds Customer information using suitable tags and data entries: The customer s first and last name, their phone number, and their email address! Example customer: Bilbo Baggins, 123.456.789, Bilbo.Baggins@lor.com Ingolf Krueger, 2010 CSE 33

One Solution Customer.xml! <customer>! <phone> 123.456.789 </phone>! <first_name> Bilbo </first_name>! <email> Bilbo.Baggins@lor.com </email>! <last_name> Baggins </last_name>! </customer>! Ingolf Krueger, 2010 CSE 34

XML Pros and Cons XML files can be self-documenting via well-chosen tags Easily extendible Broadly applicable and applied communication standards B2B data exchange For small files: all you need is a text editor Tags/tag syntax add complexity to the file XML files can become unwieldy; special editing software can mitigate this Performance loss Ingolf Krueger, 2010 CSE 35

Back to Ant and its build files Ingolf Krueger, 2010 CSE 36

What is Ant? Apache Ant is an open source Java-based Build tool Works across platforms written in Java, input: XML Basic idea: 1. Read in a project specification (the build.xml file), containing Targets: A set of tasks you want to automate Each target can depend on multiple other targets Tasks (something you want to get done automatically), examples: Compile a set of Java files Create, delete, move a file/directory Create a jar file Email a zipped archive of your source 2. Determine dependencies among targets and within tasks 3. Execute all required tasks following the order determined in 2. Ingolf Krueger, 2010 CSE 37

Remember.java.class other input build.xml Ant output output files files other side-effects create/delete files create/delete dirs. program execution Ingolf Krueger, 2010 CSE 38

Ant Build File: Project Base directory, relative to location of build.xml build.xml! <project name = "week2" basedir = "." default = "compile">!!<target name = "compile">!!!<javac srcdir = "src4"!!!! destdir = "bin"/>!!</target>! </project>! Default target Ingolf Krueger, 2010 CSE 39

Ant Build File: Target </project>! build.xml! <project name = "week2" basedir = "." default = "compile">!!<target name = "compile">!!!<javac srcdir = "src4"! Target specification: one set of tasks you want to!!! destdir = "bin"/>! automate!</target>! Ingolf Krueger, 2010 CSE 40

Ant Build File: Task build.xml! <project name = "week2" basedir = "." default = "compile">!!<target name = "compile">! Task specification:!!<javac srcdir = "src4"! compile all.java files in src4 and!!! destdir = "bin"/>! put the corresponding.class files!</target>! into bin </project>! To execute the target named compile, type ant compile! Ingolf Krueger, 2010 CSE 41

Add a target that cleans out the bin directory Ingolf Krueger, 2010 CSE 42

Ant Build File: Task <project name = "week2" basedir = "." default = "compile">!!<target name = "compile">!!!<javac srcdir = "src4"!!!! destdir = "bin"/>!!</target>! <target name = "clean">! <delete dir= "bin"/>! </target>! </project>! build.xml! Task specification: remove the directory bin and all of its contents!!! To execute the target named clean, type ant clean! Ingolf Krueger, 2010 CSE 43

Add a target that creates the bin directory if it does not already exist Ingolf Krueger, 2010 CSE 44

Ant Build File: Task build.xml! <project name = "week2" basedir = "." default = "compile">!!<target name = "compile >!!!<javac srcdir = "src4"!!!! destdir = "bin"/>!!</target>! <target name = "clean">! <delete dir= "bin"/>! </target>! <target name = "init">! <mkdir dir = "bin"/>! </target>! </project>! Task specification: create the directory bin if it doesn t exist already To execute the target named init, type ant init! Ingolf Krueger, 2010 CSE 45

Add dependencies between compile and init targets Ingolf Krueger, 2010 CSE 46

Ant Build File: Task build.xml! <project name = "week2" basedir = "." default = "compile">!!<target name = "compile depends = init >!!!<javac srcdir = "src4"!!!! destdir = "bin"/>!!</target>! <target name = "clean">! <delete dir= "bin"/>! </target>! <target name = "init">! <mkdir dir = "bin"/>! </target>! </project>! What happens now if you enter the following ant clean; ant compile! Ingolf Krueger, 2010 CSE 47

Version Control (a.k.a Configuration Management) with subversion Ingolf Krueger, 2010 CSE 48

Stage 1 to Stage 2 Why? Ingolf Krueger, 2010 CSE 49

Scenario What can go wrong with your source files even if you are the only developer, and you are developing locally on your machine? Ingolf Krueger, 2010 CSE 50

Problems for Individual Non-Version Controlled Software If you save your work over what you had before, any prior work is gone forever Some help from backup mode of IDEs/Editors, but only a crutch Some help from physical backups, but how timely are they? No ability to revert back to a prior version of a particular file (the one without the error!) Never happened to you? It will trust me! Ingolf Krueger, 2010 CSE 51

Problems for Individual Non-Version Controlled Software How do you freeze one version for deployment and continue to work on a new version? Crucial if you need to deliver software at some point Many ad-hoc solutions that quickly fall apart due to lack of tool support What about a hard-disk failure? Are you protected? How often do you back up your development machine? What if you are working on a desktop at school/the office, and want to continue to work at your home desktop? Email the code? Carry a USB-stick? Do you have a good naming scheme? Ingolf Krueger, 2010 CSE 52

Scenario Assume now, you are developing in a small team. The team uses a regularly backed-up file-sharing mechanism (such as a shared network drive). What can go wrong? F.java Alice Bob Ingolf Krueger, 2010 CSE 53

Problems for Team Non-Version Controlled Software The last one who saves wins Blame game: You wrote over my changes! All my work is lost! How do you coordinate who can save a file at what time? How do you coordinate with 5 or 10 or 100 or 1000 developers on the team? Work gets artificially sequentialized I ll wait before I can touch that file. Who knows what will happen? Could potentially work on separate parts of a file, but merge by hand is error-prone Still no ability to revert back to a prior version of a particular file Ingolf Krueger, 2010 CSE 54

Problems for Team Non-Version Controlled Software Still difficult to freeze one version for deployment and continue to work on a new version Need configuration manager Many ad-hoc solutions that quickly fall apart due to lack of tool support What if you are working on a desktop at school/the office, and want to continue to work at your home desktop but have no access to the file share? Now it gets downright dangerous to carry the code home with you: the scope for conflicts/artificial sequentialization grows rapidly How do you merge back your changes into the shared file? Ingolf Krueger, 2010 CSE 55

Solution: Version Management with Dedicated Repository Introduce a Version Management Repository that holds the master copy of all artifacts (code, tests, build files, graphics, ) of your project Ingolf Krueger, 2010 CSE 56

Solution: Version Management with Dedicated Repository If Alice needs access to the code, she checks out a local copy check out Alice Ingolf Krueger, 2010 CSE 57

Solution: Version Management with Dedicated Repository If Bob also needs access to the code, he also checks out a local copy check out Alice Bob Ingolf Krueger, 2010 CSE 58

Solution: Version Management with Dedicated Repository Bob and Alice individually make changes to their own local copy Alice Bob Ingolf Krueger, 2010 CSE 59

Solution: Version Management with Dedicated Repository When Alice is done with her edits, she commits her local copy to the repository. Her changes are automatically merged into the master copy of the file in the repository. commit Alice Bob Ingolf Krueger, 2010 CSE 60

Scenario Now Bob is done with his edits, he also wants to commit. What can happen?? commit Alice Bob Ingolf Krueger, 2010 CSE 61

Solution: Version Management with Dedicated Repository Scenario 1: Alice and Bob have edited in different areas of the file No conflict! Bob s changes will be merged into the master copy. commit succeds Alice Bob Ingolf Krueger, 2010 CSE 62

Solution: Version Management with Dedicated Repository Scenario 2: Alice and Bob have edited in the same areas of the file Conflict! Bob s changes will NOT be merged into the master copy. commit fails Alice Bob Ingolf Krueger, 2010 CSE 63

Solution: Version Management with Dedicated Repository To resolve the conflict, Bob first updates his local copy. update Alice Bob Ingolf Krueger, 2010 CSE 64

Solution: Version Management with Dedicated Repository He gets notifications of the conflicts inside the affected files. He makes decisions to resolve the conflicts. update Alice Bob Ingolf Krueger, 2010 CSE 65

Solution: Version Management with Dedicated Repository Once he has resolved all conflicts, Bob commits again. This time he succeeds! commit succeeds Alice Bob Ingolf Krueger, 2010 CSE 66

Solution: Version Management with Dedicated Repository Alice updates at the beginning of her next work increment. check out Alice Bob Ingolf Krueger, 2010 CSE 67

SVN Workflow: Always Update BEFORE Starting Work Ingolf Krueger, 2010 CSE 68

SVN Workflow: Do something! Ingolf Krueger, 2010 CSE 69

SVN Workflow: Update BEFORE EACH Commit Ingolf Krueger, 2010 CSE 70

SVN Workflow: Resolve Conflicts Ingolf Krueger, 2010 CSE 71

SVN Workflow: Commit Ingolf Krueger, 2010 CSE 72

SVN Workflow Ingolf Krueger, 2010 CSE 73

Let s revisit these steps with subversion commands Ingolf Krueger, 2010 CSE 74

Solution: Version Management with Dedicated Repository Create subversion repository 1> ls ~/java/week2/svenx! branches/ tags/ trunk/! 1> ls ~/java/week2/svenx/trunk! F.java G.java! Alice 1> svnadmin create /var/svn/cse70-labs! Ingolf Krueger, 2010 CSE 75

Solution: Version Management with Dedicated Repository A new repository, named svn has been created (can link to it via Apache web server) svn repository @ https://cse70-server.ucsd.edu/svn/ Alice Ingolf Krueger, 2010 CSE 76

Solution: Version Management with Dedicated Repository Now Alice imports her existing folder (and its files) into the repository 1> svn import ~/java/week2/svenx \ https://cse70-server.ucsd.edu/svn/alice/svenx! import Alice Ingolf Krueger, 2010 CSE 77

Solution: Version Management with Dedicated Repository Now Alice needs access to check out her fresh local copy to synchronize with the repository 1> svn checkout \ https://cse70-server.ucsd.edu/svn/alice/svenx.!./trunk:! check out Alice Ingolf Krueger, 2010 CSE 78

Solution: Version Management with Dedicated Repository Bob also checks out a local copy into his local wow folder 1> svn checkout https://some.server.name/svn/trunk.!./trunk:!./trunk:! check out Alice Bob Ingolf Krueger, 2010 CSE 79

Solution: Version Management with Dedicated Repository Bob and Alice individually make changes to their own local copy./trunk:!./trunk:! Alice Bob Ingolf Krueger, 2010 CSE 80

Solution: Version Management with Dedicated Repository Now Alice commits (publishes her edited files) 1> svn commit F.java! commit Alice Bob Ingolf Krueger, 2010 CSE 81

Solution: Version Management with Dedicated Repository Scenario 2: Bob updates Conflict! 1> svn update! C F.java! Updated to revision 233.! update conflict Alice Bob Ingolf Krueger, 2010 CSE 82

Bob looks at the file to find and resolve the conflict package today;! public class StringFormatter {! StringFormatter(){};! public String formatstring(string in) {! char[] cv = new char[2*in.length()];!!!for(int i = 0; i < cv.length; i+=2) {! I better chat!!!cv[i] = in.charat(i/2);! with Alice <<<<<<<.mine! about this!!!cv[i+1] = CharConstantHolder.STAR;! =======!!!!cv[i] = CharConstantHolder.STAR;! >>>>>>>.r233! }!!!}! return new String(cv);! }! Ingolf Krueger, 2010 CSE 83

Bob makes decisions to resolve the conflicts package today;! public class StringFormatter {! StringFormatter(){};! public String formatstring(string in) {! char[] cv = new char[2*in.length()];!!!for(int i = 0; i < cv.length; i+=2) {!!!!cv[i] = in.charat(i/2);!!!!cv[i+1] = CharConstantHolder.STAR;!!!}! return new String(cv);! }! }! Looks better already Ingolf Krueger, 2010 CSE 84

Solution: Version Management with Dedicated Repository Bob indicates that he has resolved the conflict 1> svn resolved F.java! Resolved conflicted state of F.java'! resolved Alice Bob Ingolf Krueger, 2010 CSE 85

Solution: Version Management with Dedicated Repository Once he has resolved all conflicts, Bob commits again. This time he succeeds! 1> svn commit F.java! commit succeeds Alice Bob Ingolf Krueger, 2010 CSE 86

Solution: Version Management with Dedicated Repository Alice updates at the beginning of her next work increment and the cycle repeats. 1> svn update! check out Alice Bob Ingolf Krueger, 2010 CSE 87

What else can you do with subversion? Ingolf Krueger, 2010 CSE 88

Create Branches Other Features of subversion Isolate changes to separate lines of development Example: one branch is the currently deployed version for maintenance, another branch is the current development version Can merge branches, e.g. Create Tags Similar to a branch Ingolf Krueger, 2010 CSE 89

What have you learned today? Ingolf Krueger, 2010 CSE 90

Learning Goals Be able to identify key elements of the software development pipeline Understand a basic Java program and how it is compiled/run Be able to change a given program to introduce functions and additional classes that can evolve separately Understand the need for a build tool See Ant used to automate compilation and other tasks Be able to write basic Ant files yourself Understand the challenges of maintaining a code base in an individual and team development setting Understand the need for and basic principles of version control/ configuration management Ingolf Krueger, 2010 CSE 91

Stage 2: Individual, w/ide, Local Build/Test Tools and Version Control Ingolf Krueger, 2010 CSE 92

Stage 4: Small to Medium Teams w/automated Build Process Ingolf Krueger, 2010 CSE 93