Software Development Practices in Project X



Similar documents
Developing Platform Independent Software using the AutoTool Suite

CSE 435 Software Engineering. Sept 16, 2015

Rapid software development. Ian Sommerville 2004 Software Engineering, 7th edition. Chapter 17 Slide 1

Introduction to extreme Programming (XP)

Rapid Software Development

Ingegneria del Software Corso di Laurea in Informatica per il Management. Agile software development

Agile processes. Extreme Programming, an agile software development process. Extreme Programming. Risk: The Basic Problem

Topics covered. Agile methods Plan-driven and agile development Extreme programming Agile project management Scaling agile methods

Software Engineering I (02161)

Extreme Programming, an agile software development process

Agile processes. Extreme Programming, an agile software development process

EXTREME PROGRAMMING AGILE METHOD USED IN PROJECT MANAGEMENT

Introduction to Agile Software Development. EECS 690 Agile Software Development

Agile So)ware Development

Introduction. Motivational Principles. An Introduction to extreme Programming. Jonathan I. Maletic, Ph.D.

FUN3D v12.4 Training Session 7: Code Development

Extreme Programming, an agile software development process

Xtreme RUP. Ne t BJECTIVES. Lightening Up the Rational Unified Process. 2/9/2001 Copyright 2001 Net Objectives 1. Agenda

Contents. 3 Agile Modelling Introduction Modelling Misconceptions 31

SOE. managing change in system development projects: configuration management

Software development. Outline. Outline. Version control. Version control. Several users work on a same project. Collaborative software development

Development Techniques. CSE301 University of Sunderland Harry R. Erwin, PhD

In the IEEE Standard Glossary of Software Engineering Terminology the Software Life Cycle is:

Continuous Integration, Delivery and Deployment. Eero Laukkanen T Software Testing and Quality Assurance P

How To Model In An Agile World

CSSE 372 Software Project Management: More Agile Project Management

Continuous Integration: Aspects in Automation and Configuration Management

Test Driven Development Part III: Continuous Integration Venkat Subramaniam

Continuous Integration: Improving Software Quality and Reducing Risk. Preetam Palwe Aftek Limited

Barely Sufficient Software Engineering: 10 Practices to Improve Your Research CSE Software

Extreme Programming: Strengths and Weaknesses

Introduction to Automated Testing

Version Control! Scenarios, Working with Git!

Extreme Programming. Sergey Konovalov and Stefan Misslinger. May 23, 2006

CMMI - The AGILE Way By Hitesh Sanghavi

Life Cycle Models. V. Paúl Pauca. CSC Fall Department of Computer Science Wake Forest University. Object Oriented Software Engineering

Software Construction

Agile and Secure: Can We Be Both?

Selecting a Software Development Methodology based on. Organizational Characteristics. Adrienne Farrell

Agile.NET Development Test-driven Development using NUnit

Upping the game. Improving your software development process

Efficient Automated Build and Deployment Framework with Parallel Process

Software Configuration Management Practices for extreme Programming Teams

Agile QA s Revolutionary Impact on Project Management

XP & Scrum. extreme Programming. XP Roles, cont!d. XP Roles. Functional Tests. project stays on course. about the stories

INTERNATIONAL JOURNAL OF ADVANCES IN COMPUTING AND INFORMATION TECHNOLOGY An International online open access peer reviewed journal

Co-Presented by Mr. Bill Rinko-Gay and Dr. Constantin Stanca 9/28/2011

Chapter 13: Program Development and Programming Languages

Introduction to Agile Software Development Process. Software Development Life Cycles

Deep Agile Blending Scrum and Extreme Programming. Jeff Sutherland Ron Jeffries

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

Large Scale Systems Design G52LSS

History of Agile Methods

Test Driven Development with Continuous Integration: A Literature Review

Agile Development and Testing Practices highlighted by the case studies as being particularly valuable from a software quality perspective

In depth study - Dev teams tooling

Agile Models. Software Engineering Marco Scotto Software Engineering

Software Development Tools

Software Development Management. Mathieu Lacage - DREAM

Towards Software Configuration Management for Test-Driven Development

What Does Large Mean? Copyright 2003 by N. Josuttis and J. Eckstein 3. Why is Large an Issue?

ISTQB Certified Tester. Foundation Level. Sample Exam 1

Developing Software in a Private workspace PM PMS

using version control in system administration

Computer programs (both source and executable) Documentation (both technical and user) Data (contained within the program or external to it)

GNU Automake. For version 1.15, 31 December David MacKenzie Tom Tromey Alexandre Duret-Lutz Ralf Wildenhues Stefano Lattarini

Continuous Integration. CSC 440: Software Engineering Slide #1

Agile Software Development Methodologies and Its Quality Assurance

Comparing Agile Software Processes Based on the Software Development Project Requirements

C3.8 CRM wing/body Case

Enhancement of XP for Cloud Application Development Sara Tariq, Muhammad Mohsin Nazir, Farhat Saleemi

CMPT 373 Software Development Methods. Building Software. Nick Sumner Some materials from Shlomi Fish & Kitware

Software Engineering Principles The TriBITS Lifecycle Model. Mike Heroux Ross Bartlett (ORNL) Jim Willenbring (SNL)

XP and TDD. Extreme Programming and Test Driven Development. Bertrand Meyer, Manuel Oriol Andreas Leitner. Chair of Software Engineering ETH Zurich

a new generation software test automation framework - CIVIM

Software Life Cycles and Configuration Management

An Introduction to Extreme Programming

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

Test-Driven Development

Human Aspects of Software Engineering: The Case of Extreme Programming

Benefits of Test Automation for Agile Testing

Software Configuration Management Best Practices for Continuous Integration

Agile in Financial Services A Framework in Focus

D25-2. Agile and Scrum Introduction

Transcription:

Software Development Practices in Project X Todd A. Oliver toliver@mit.edu Aerospace Computational Design Lab Massachusetts Institute of Technology April 8, 2005 PX Development Stratagies 1/23

Overview Project X (PX) research and software goals Introduction to extreme programming Continuous integration PX build tools PX testing tools Conclusions and future work PX Development Stratagies 2/23

Project X Introduction Team Goal: To improve the aerothermal design process for complex 3D configurations by significantly reducing the time from geometry to solution at engineering-required accuracy using high-order adaptive methods Students Garrett Barter (shock capturing) Tan Bui (unsteady aero/structures) Shannon Cheng (plasma physics) Krzysztof Fidkowski (hp adaptation) James Lu (optimization and adaptation) Todd Oliver (turbulence) Mike Park (meshing/adaptation) Peter Whitney (aeroacoustics) Advisors David Darmofal Robert Haimes Jaime Peraire Karen Wilcox PX Development Stratagies 3/23

Goals for Software Development Practices Efficient code development Accomplish research goals as fast as possible Flexible and lightweight Little up front design required Difficult to generate specific software design and long-term plan in research setting Readable code Readable code serves as its own documentation Easier to maintain Test as much code as possible as often as possible Minimize debugging time Integrate as often as possible Avoid code integration nightmares PX Development Stratagies 4/23

Extreme Programming Extreme programming (XP) developed by Beck, Cunningham, and Jeffries in mid-1990s Kent Beck, Extreme Programming Explained: Embrace Change, 2000 Agile software development methodology based on four values: Communication, simplicity, feedback, courage Consists of twelve core practices: Sustainable pace, metaphor, coding standards Collective ownership, continuous integration, small releases Test-driven development, refactoring, simple design Pair programming, on-site customer, planning game PX Development Stratagies 5/23

XP in Scientific Computing Wood and Kleb applied XP to development of advection-diffusion solver in Ruby Wood and Kleb, Extreme Programming in a Research Environment, 2002 FAAST program at NASA Langley has incorporated XP methods into development approach Kleb et al., Collaborative Software Development in Support of Fast Adaptive AeroSpace Tools (FAAST), 2003 http://fun3d.larc.nasa.gov/ PX Development Stratagies 6/23

XP in PX Metaphor: High-order DGFEM, CFD jargon p, q, ρ, ρu, etc. Coding standard: Virtually universal header comment conventions and some standard notations, but still lacking Collective ownership: No restrictions on who can modify what, but low truck number Test-driven development: Unit testing framework recently became available, but use not widespread yet Refactoring: Performed, but typically only to improve speed or when blatantly necessary Pair programming: Used infrequently Continuous Integration: All executables are built and entire test suite run after every CVS commit PX Development Stratagies 7/23

Concurrent Versions System (CVS) Integration begins with software versioning system (in our case CVS) All source files stored on CVS repository All differences between versions of file also stored can always revert to old version if necessary Developers checkout the code from the repository and commit changes CVS merges changes into code Bottom line: CVS allows multiple developers to work on same code with very little chance of overwriting each other s changes or making conflicting changes. PX Development Stratagies 8/23

Continuous Integration Overview Developer commits change Log fail on website and send email Fail Wait 5 min without new commits Pass Is the build already running? No Run the PX build and test procedure Pass Log success on website Fail (reset clock) Yes When notified Wait until current build and test finishes Notify when finished PX Development Stratagies 9/23

Build and Test What happens inside the build and test? Executables built Unit tests run Acceptance tests run Tools required: Build utilities (Autoconf and Automake) Unit testing framework (CuTest and PXUnit) Acceptance testing framework (runtests) PX Development Stratagies 10/23

Autoconf Autoconf is a tool for producing shell scripts that automatically configure software source code packages to adapt to many kinds of UNIX-like systems. GNU Autoconf Manual Developer supplies configure.ac file configure.ac contains sequence of calls to Autoconf macros, for example, AC_PROG_CC determines a C compiler to use AC_PATH_X locates X header files and libraries Running autoconf produces configure Once created configure does not depend on Autoconf PX Development Stratagies 11/23

Configure configure determines features of build environment, including System type (linux, cygwin, etc) Selects compilers (gcc, g77, mpicc, etc) Probes for necessary system libraries (X11, mpich, etc) Probes for necessary system headers (stdlib.h, string.h, etc) configure sets variables based on environment it finds Allows creation of portable Makefiles Creates Makefile from Makefile.in Where does the Makefile.in come from? You or... PX Development Stratagies 12/23

Automake Automake is a tool for automatically generating Makefile.ins from files called Makefile.am. Each Makefile.am is basically a series of make variable definitions, with rules being thrown in occasionally. GNU Automake Manual Developer supplies Makefile.ams that are converted to Makefile.ins by running automake or make dist What is make dist? Automake supplied target that creates tarball for distribution Tarball contains configure and machine independent Makefile.ins Automake also supplies other standard targets install, clean, check,... PX Development Stratagies 13/23

Makefile.am Example # -*- Makefile -*- if HAVE_MPI bin_programs = PXRunSolver2d PXRunParallel2d else bin_programs = PXRunSolver2d endif PXRunSolver2d_CFLAGS = -DDIM=2 -I$(top_srcdir)/include PXRunSolver2d_SOURCES = PXRunSolver.c PXRunSolver2d_LDADD = libpx2d.a libpx.a -lm @FLIBS@ if HAVE_MPI PXRunParallel2d_CFLAGS = -DDIM=2 -DPAR=1 -I$(top_srcdir)/include PXRunParallel2d_SOURCES = PXRunSolver.c PXRunParallel2d_LDADD = libpxpar2d.a libpx.a -lm @FLIBS@ endif PX Development Stratagies 14/23

Unit Testing Unit tests excercise small pieces of code in isolation from each other and the application as a whole Most easily applied to low level functions Flux calculation, viscosity calculation Useful for medium level functions if low level functions adequately tested Calculation of inviscid Galerkin residual Not applicable to highest level functions Line solver To make unit testing practical, need a unit testing framework For list of unit testing frameworks see http://c2.com/cgi/wiki?testingframework PX Development Stratagies 15/23

CuTest CuTest is a C unit testing framework written by Asim Jalis CuTest provides Assert functions (e.g. CuAssertDblEquals, CuAssertStrEquals) Functions for aggregating tests into suites and running test suites Functions for recording and reporting test failures Simplicity only 2 files: CuTest.c and CuTest.h For PX purposes, CuTest drawbacks include Tests are not added to suites automatically CuTest defines structures that are required in testing code PX Development Stratagies 16/23

PXUnit Set of C macros and 1 shell script Eliminates CuTest drawbacks for PX developers Automates process of adding tests to suites and producing a main program Eliminates need for PX developers to interact with CuTest data structures No knowledge of CuTest required to write unit tests in PX Writes unit test Translates to CuTest Developer PXUnit CuTest Runs test and reports pass/fail to developer PX Development Stratagies 17/23

Unit Test Example PX_TEST( TestStaticTemperatureTrivial ){ int ierr; PX_REAL params[6] = {1.4, 1.0, 1.0, 1.0, 1.0, 1.0}; PX_REAL T; #if( SA_TURB == 1 ) PX_REAL U[5], T_U[5]; #else PX_REAL U[4], T_U[4]; #endif U[0] = 1.0; U[1] = 0.0; U[2] = 0.0; U[3] = 2.5; #if( SA_TURB == 1 ) U[4] = 1.0; #endif } ierr = PXError( PXStaticTemperature(U, params, &T, T_U) ); PXAssertIntEquals( PX_NO_ERROR, ierr ); PXAssertDblEquals( 1.0, T); PX Development Stratagies 18/23

Acceptance Testing Regression tests: Ensure code produces same answer as yesterday Verification tests: Ensure code produces expected order of accuracy Validation tests: Ensure code results match experimental data or analytic exact solution Only automated acceptance tests currently in PX are regression tests Regression tests controlled by two shell scripts jobtest.csh: Runs single test and reports pass/fail runtests.csh: Runs all tests and reports total number or errors Change in any output quantity (e.g. residual, force, adjoint residual, etc) of greater than 1e-13 causes failure PX Development Stratagies 19/23

Build and Test cvs co projectx Pass configure Pass make check (build and Pass make install Pass unit tests) runtests (acceptance tests) Fail Fail Fail Fail Fail Report failure Pass Report success PX Development Stratagies 20/23

Conclusions Shown that agile software development philosophy applicable in scientific computing environment Developed continuous integration procedure for use in Project X Developed build and test procedure to check code after every modification Features of the build and test procedure include: Build of all executables and libraries in Project X 214 unit tests 17 acceptance (regression) tests PX Development Stratagies 21/23

Possible Improvements Enforce more rigorous coding standard Expand unit test coverage and use of test-driven development Extend build and test to run automatically on multiple architectures PX Development Stratagies 22/23

Acknowledgments Prof. David Darmofal Garrett Barter Chris Fidkowski Mike Park PX Team PX Development Stratagies 23/23