Extreme Programming: Principles and Practice

PSU CS 410-/510-xp

Credit Hours: 4 hours for CS410; 3 hours for CS510

Course Description

Extreme Programming (XP) is a methodology for producing programs that satisfy the customer's requirements as to functionality, timeliness and budget. It is one of a number of new ?agile? methodologies that look at each of the things that the software engineering gurus have been telling us to do, and focus on those that actually deliver value to the customer.

The core values of XP are Communication, Feedback, Simplicity and Courage. From these values XP derives a number of principles, such as ?Humanity? and ?Mutual Benefit?, which in turn drive the day-to-day practices of a programming team, such as ?Continuous Integration? and ?Test-First Programming?.

This course combines lectures and exercises designed to help students master the values, principles and practices of Extreme Programming with a practicum that gives students the experience of working as a member of an XP team on a customer project, while using the practices and living the values.


Working knowledge of Object-Oriented programming and the Java programming language. This course is open to professional programmers, computer science graduate students, and undergraduates with junior standing or above.

Number of Students

minimum of 6
maximum of 24


Andrew P. Black, Professor, Portland State University
503 725 2411

James Shore, Principal, Titanium I.T.

Andrew Black has been teaching and conducting research on how to make programming easier since 1981. He has worked in product development groups and in industrial laboratories as well as in academic departments. Since 2004 he has been a professor at Portland State University.

James Shore is one of the most experienced Extreme Programming coaches in the Portland area. He has been leading teams in agile development since 1999 and has operated as an independent consultant since 2001. In 2005, the Agile Alliance awarded him the inaugural Gordon Pask Award for Contributions to Agile Practice. This is the most significant award given by the agile community.

Course Schedule

Seven days of six academic (50-minute) hours each, taught by the two instructors Four days of open lab, coached by two teaching assistants


    Extreme Programming Explained, Second Edition, by Kent Beck (Required)
    Refactoring by Martin Fowler (Required)

    One of the following books on Test-driven development:
    Test Driven Development by Example by Kent Beck (Recommended) or
    JUnit Recipies by J. B. Rainsberger, or
    TDD: A Practical Guide by Dave Astels

Course Content

Week 1: The Easy to learn Skills

    Planning XP1: planning game, small releases XP2: real customer involvement, slack, stories, weekly cycle, quarterly cycle Other: Requirements funnel (see http://www.jamesshore.com/Presentations/Beyond%20Story%20Cards.html)

    Managing Code XP1: collective ownership, coding standards XP2: ten-minute build, continuous integration, single code base Other: revision control

    Working Together XP1: pair programming, on-site customer, metaphor XP2: sit together, pair programming, whole team, team continuity Other: stand-up meetings

Weeks 2 and 3: What it feels like to go fast.

    Testing: (Michael Feather's Unit Testing Rules), Test Driven Development, five design skills

    Developing: XP1: metaphor, simple design, testing, refactoring XP2: test-first, incremental design, shared code, code & test

    Other: exploratory testing, Marick's Agile Testing Directions, FIT

Week 4: Retrospectives, dealing with management, people skills

    Delivering Software XP1: (none) XP2: daily deployment, incremental deployment, pay-per-use, negotiated-scope contracts Other: (none)

    Thinking XP1: 40-hour week XP2: energized work, root-cause analysis, informative workspace

    Other: retrospectives


XP1 = found in XP Explained 1st Edition
XP2 = found in XP Explained 2nd Edition
Other = not in XP Explained but worth mentioning

Programming Tools

The primary tools will be the Java Programming Language and the Eclipse IDE. Students are expected to be familiar with the principles of Object-oriented programming, in Java or in another O-O language, and to be able to program in Java.