Extreme Programming 7-Dec-18.

Slides:



Advertisements
Similar presentations
Extreme Programming Alexander Kanavin Lappeenranta University of Technology.
Advertisements

Intro to CIT 594
30-Apr-15 Extreme Programming. 2 Software engineering methodologies A methodology is a formalized process or set of practices for creating software An.
ITEC 370 Lecture 25 Lifecycles. Review Questions? F give prototype demonstration –Testing plan for your software Life cycles –Scrum (Roles, Meetings,
NAUG NAUG Knowledge Evening – th February 2007.
1 March Extreme programming. Presentations Tuesday Campus Tour Sami Says Hawks Thursday Read2Me UNCSET Oral Lab NetVis If helpful, invite your client.
13-Jun-15 Extreme Programming. 2 Software engineering methodologies A methodology is a formalized process or set of practices for creating software An.
Agile Methods and Extreme Programming CSSE 376, Software Quality Assurance Rose-Hulman Institute of Technology March 23, 2007.
20-Jun-15 XP Again. Test-Driven Development Advantages of writing tests first: Clarifies what the methods are supposed to do Methods are testable Methods.
Computer Engineering 203 R Smith Agile Development 1/ Agile Methods What are Agile Methods? – Extreme Programming is the best known example – SCRUM.
Xtreme Programming. Software Life Cycle The activities that take place between the time software program is first conceived and the time it is finally.
©Ian Sommerville 2004Software Engineering, 7th edition. Chapter 17 Slide 1 Extreme Programming.
Agile Software Development What is Agile? And How are we implementing Agile?
Chapter 3 – Agile Software Development 1Chapter 3 Agile software development.
Sofia Bulgaria Summer School IST eXPERT: Best Practice on e-Project Development 30 June - 2 July 2003 eXtreme programming.
Agile and XP Development Dan Fleck 2008 Dan Fleck 2008.
Extreme Programming Daniel Baranowski 3/29/06. What is Extreme Programming? An agile development methodology Created by Kent Beck in the mid 1990’s A.
Coming up: What is Agile? XP Development Dan Fleck 2010 Dan Fleck 2010.
Extreme/Agile Programming Prabhaker Mateti. ACK These slides are collected from many authors along with a few of mine. Many thanks to all these authors.
Extreme Programming (XP). Agile Software Development Paradigm Values individuals and interactions over processes and tools. Values working software over.
XP (not Microsoft) e X treme P rogramming Can KOMAR
XP – Extreme Programming
University of Toronto at Scarborough © Kersti Wain-Bantin CSCC40 other methodologies 1 Method/Process = step-by-step description of the steps involved.
DAVID STOTTS DEPT. OF COMPUTER SCIENCE UNIV. OF NORTH CAROLINA AT CHAPEL HILL Extreme Programming.
CS3100 Software Project Management Agile Approaches.
Extreme Programming (XP) XP is an agile methodology: –aims to be responsive to change Theme running through XP is the importance of communication –amongst.
AP-1 4. Agile Processes. AP-2 Agile Processes Focus on creating a working system Different attitude on measuring progress XP Scrum.
Extreme Programming Based on and
Test Driven Development Daniel Brown dxb17u. Introduction Originates from Extreme Programming (XP) Proposed by Kent Beck in Test Driven Development.
Requirements Engineering Requirements Engineering in Agile Methods Lecture-28.
Extreme programming (XP) Variant of agile Takes commonsense practices to extreme levels © 2012 by Václav Rajlich1.
Extreme Programming. Extreme Programming (XP) Formulated in 1999 by Kent Beck, Ward Cunningham and Ron Jeffries Agile software development methodology.
Agile. Processes Waterfall Traditional With prototyping Sprial Agile Dynamic Systems Development Method (DSDM) Scrum Crystal eXtreme Programming (XP)
Agenda: Overview of Agile testing Difference between Agile and traditional Methodology Agile Development Methodologies Extreme Programming Test Driven.
25-Feb-16 Extreme Programming. 2 Software engineering methodologies A methodology is a formalized process or set of practices for creating software An.
Extreme Programming מתודולוגיה לפיתוח פרויקטי תוכנה.
Extreme programming (XP) Advanced Software Engineering Dr Nuha El-Khalili.
Software Development. The Software Life Cycle Encompasses all activities from initial analysis until obsolescence Analysis of problem or request Analysis.
Coming up: What is Agile? XP Development Dan Fleck 2010 Dan Fleck 2010.
Project Management Software development models & methodologies
Chapter 3 Agile software development 1 Chapter 3 – Agile Software Development.
Embedded Systems Software Engineering
CS223: Software Engineering
Agile Project Management and the yin & yang of
Software Development.
Algorithms and Problem Solving
Software Engineering Process
Extreme Programming.
Methodologies By Akinola Soyinka.
EXtreme Programming BY R.V.Ramesh MCA II Semester.
Extreme Programming.
Waterfall and Agile Quality Techniques
What do you need to know about XP?
Agile and XP Development
eXtreme Programming (XP) and eXtreme Modeling (XM)
Agile and XP Development
Chapter 3 – Agile Software Development
Agile and XP Development
Extreme Programming Extreme programming is "a lightweight methodology for small-to-medium-sized teams developing software in the face of vague or rapidly.
Algorithms and Problem Solving
Coming up: What is Agile?
Refactoring.
Introduction to XP.
Sylvain Giroux October 3rd, 2000
Agile Development – a new way of software development?
Extreme Programming.
Agile software development
Extreme Programming (and Pair Programming)
Software Development Tools Lecture 2
Chapter 5: New and Emerging Process Methodologies
Presentation transcript:

Extreme Programming 7-Dec-18

Software engineering methodologies A methodology is a formalized process or set of practices for creating software An early methodology was the waterfall model, so named because each stage flowed into the next, with no backing up to a previous stage The stages were: Requirements  Design  Implementation  Verification  Maintenance The waterfall model has never been regarded as a “good” model Methodologies are subject to fads, and are frequently imposed on programmers by management Some methodologies are bad—even ridiculously bad This doesn’t mean all methodologies are bad However, a single methodology doesn’t work for all cases

Agile programming methodologies There are (at least) two serious problems with the waterfall model: It assumes that there will be no unforeseen difficulties in the software development It assumes that the customers know (and can specify) what they want, in extreme detail Agile programming methodologies (of which there are several) assume: Customers can best discover what software meets their needs via frequent iterations Hence, communication between customers and developers is vital Requirements will need to be revised, probably multiple times, during software development

Extreme programming In this course we will draw on a number of ideas from one particular agile methodology, Extreme Programming (XP) The basic idea of extreme programming is to take to an extreme each of several known good practices The first time I was asked to lead a team, I asked them to do a little bit of the things I thought were sensible, like testing and reviews. The second time there was a lot more on the line. I thought, “Damn the torpedoes, at least this will make a good article,” [and] asked the team to crank up all the knobs to 10 on the things I thought were essential and leave out everything else. — Kent Beck For example, it is well known that software should be tested frequently during development Extreme programming advocates testing code literally every few minutes, after every minor change Extreme programming works best for relatively small projects with a small number of good programmers

XP values Communication Simplicity Feedback Courage Respect Use simple designs and common metaphors, talk continuously with your programmers and customers Simplicity Follow the KISS principle (“Keep It Simple, Stupid!”) Feedback From the system: Unit tests From the customer: Acceptance tests From the team: Estimate the time to implement new requirements Courage Code for today, not tomorrow Refactor as appropriate Be willing to throw code away Respect Trust your team members not to submit nonworking code

XP practices Fine scale feedback Continuous process Pair Programming Planning Game Test Driven Development Whole Team Continuous process Continuous Integration Design Improvement Small Releases Shared understanding Coding Standards Collective Code Ownership Simple Design System Metaphor Programmer welfare Sustainable Pace Planning game: use of stories Whole team: customer should be involved Design improvement: refactoring Collective code ownership: anyone can change anything System metaphor: naming conventions Source: http://en.wikipedia.org/wiki/Extreme_programming

Pair programming is... TWO programmers working side-by-side, collaborating on the same design, algorithm, code or test. One programmer, the driver, has control of the keyboard/mouse and actively implements the program. The other programmer, the observer, continuously observes the work of the driver to identify tactical (syntactic, spelling, etc.) defects and also thinks strategically about the direction of the work. On demand, the two programmers can brainstorm any challenging problem. Because the two programmers periodically switch roles, they work together as equals to develop software. --Laurie Williams North Carolina State University Computer Science Source: http://www.pairprogramming.com/

Pair programming in this course One purpose of the Friday lab sections is to get you started pair programming on each project After lab, you should work together with your partner as closely as possible I know this may not be easy for some of you At least trade email addresses, and work together that way Instant messaging is often better If you have programming problems, go first to your partner for help Reading assignment: All I Really Need To Know About Pair Programming I Learned In Kindergarten, by Laurie Williams and Robert Kessler (PDF) The URL is too long to post here, but it’s on the class web page (or you can just Google for it)

Test-Driven Development (TDD) TDD is a technique in which you write the tests before you write the code you want to test This seems backward, but it really does work better: When tests are written first, you have a clearer idea what to do when you write the methods Because the tests are written first, the code is necessarily written to be testable Writing tests first encourages you to write simpler, single-purpose methods Because the methods will be called from more than one environment (the “real” one, plus your test class), they tend to be more independent of the environment To do TDD, it must be easy to create and run tests Scalatest and JUnit are frameworks that makes this much easier to do

Continuous integration Unit testing is testing a single, more-or-less independent part of a program in isolation Integration testing is testing the complete program with all its parts, to make certain they all work together Continuous integration is performing integration tests frequently (usually daily) Continuous integration is more important on larger projects For class projects, last-minute integration is still a bad idea

Coding standards Coding standards make it simpler for your teammates (or yourself, weeks later) to read your code Java has some very well defined conventions you should learn Some conventions are strictly mechanical, such as formatting (spacing and indentation) Eclipse can, upon request, correct your formatting for you Some conventions require human intelligence Use meaningful names, with the correct part of speech Use adequate comments, written for the correct audience Prefer clearly written code to “clever” code

Simple design “Do the simplest thing that can possibly work” Complexity to achieve program efficiency is almost always a very bad investment Complexity to support future features is seldom a good idea Program for the features you need today, not the ones you think you will want tomorrow With good unit tests, you can easily refactor (“revise”) your code to do additional tests YAGNI – “You ain’t gonna need it” Follow the DRY principle: “Don’t repeat yourself” Don’t have multiple copies of identical (or very similar) code Don’t have redundant copies of information

XP in this course Do pair programming in labs, and work as closely as possible with your partner outside labs Use TDD (test-driven development) as much as possible Write tests for your own code, not for your partner’s code We have learned the hard way that it doesn’t work for one person to write code and the other person to write tests for that code However, this really has to wait until you learn about methods and about JUnit Stay in touch with your partner, and integrate your code as frequently as feasible Follow the defined coding standards, including those for documentation Keep your code as simple as possible You and your partner should turn in one copy of your program, with both names on it

What I expect of you Work as closely as you can with your partner I realize this isn’t always easy Don’t just “contribute” your share of the code—also review your partner’s code, checking for problems It’s okay to criticize your partner’s code; it’s not okay to criticize your partner Don’t take suggestions/criticisms/comments personally—any code can be improved You can use all the Scala you know, if your partner also understands it If I haven’t covered something in class (or even if I have, but your partner doesn’t know it), it’s your job to explain it to your partner If you don’t understand something in your partner’s code, ask them to explain it to you Don’t: Depend on your partner to do it all Take off and do it all yourself

The End “All methodologies are based on fear.” --Kent Beck “If we asked the customers what they wanted, it would be devastating for the project.” --Team lead on a project that shall remain nameless