Extreme programming for programmers Kirill Kalishev SPb Java Users Group 13 Oct 2001 Title.

Slides:



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

NAUG NAUG Knowledge Evening – th February 2007.
Agile Process Models. Prescriptive models don’t work It is unrealistic to not have changes. Why? The Agile Manifesto: Individuals and interactions over.
Extreme Hour Role-Playing The XP Process. What Is Extreme Programming? n User Stories:Function, Qualities, Priority, Scope. n Schedule:By negotiation.
March 25, 2002R McFadyen a lightweight approach to software development. about 5 years old has been used at: Bayerische Landesbank, Credit Swiss.
1 JASS 2006, Sergey Konovalov, Stefan Misslinger XP Extreme Programming Joint Advanced Student School (JASS) XP EXTREME PROGRAMMING.
6 December ’s  60’s “Cowboys” wrote software anyway that they could Difference between best programmers and worst as high as 28:1 (many sources)
XP – eXtreme Programming A gentle introduction. Cleviton Vinícius Jobson Ronan Thiago Rodrigues.
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.
Extreme Programming: Practices and Strategies Extreme Programming Practices and Strategies Mohammad Alshayeb Information and Computer.
Individuals and interactions
Extreme Programming Team Members Gowri Devi Yalamanchi Sandhya Ravi.
Individuals and interactions
EXtreme Programming By: Aaron Flocke, Leena Paulose, Geetha Krishna (Team 6)
EXtreme Programming Quick Introduction Daniel Arraes Pereira Eduardo Lourenço Apolinário Ricardo de Oliveira Cavalcanti.
Extreme Programming Mark Steverson. What Is Extreme Programming? ● Extreme Programming (XP) is a lightweight, agile methodology developed by Kent Beck.
Computer Engineering 203 R Smith Agile Development 1/ Agile Methods What are Agile Methods? – Extreme Programming is the best known example – SCRUM.
COMP4710 Senior Design Software Development Process.
Transitioning to XP or The Fanciful Opinions of Don Wells.
Extreme Programming--a “New” Process Model Extreme Programming-- a “New” Process Model.
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.
Roles Managers Technical Team Leaders Programmers Customers Database Administrators Instructors.
Sofia Bulgaria Summer School IST eXPERT: Best Practice on e-Project Development 30 June - 2 July 2003 eXtreme programming.
Extreme Programming: Introduced Matthew Heusser Excelon Development – xndev.com - Presented to CS 611 at GVSU, 4/6/2005.
Extreme Programming(XP)
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.
1 e X treme P rogramming D. Dranidis September 2000 CITY College.
Extreme Programming Sylvain Giroux October 3 rd, 2000.
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.
XP (not Microsoft) e X treme P rogramming Can KOMAR
XP – Extreme Programming
Page 1 Copyright © 1999, RoleModel Software, Inc. An Introduction to Extreme Programming Ken Auer
Extreme Programming David Li CTO, DigitalSesame. Problem in Developing Software The Basic Problem - Risk –Schedule slips –Project canceled –System goes.
1 김 수 동 Dept. of Computer Science Soongsil University Tel Fax
Sofia Bulgaria Summer School IST eXPERT: Best Practice on e-Project Development 30 June - 2 July 2003 eXtreme programming.
Extreme Programming and Systems Engineering Similarities and Synergy (based on talk given to INCOSE New England Chapter) Joseph (Yossi) Weihs Sept 10 th,
XP Overview Short Life cycle Risky / Dynamic Requirements Increase developer productivity.
CS3100 Software Project Management Agile Approaches.
Individuals and interactions
Chapter 7 The Practices: dX. 2 Outline Iterative Development Iterative Development Planning Planning Organizing the Iterations into Management Phases.
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
Extreme programming (XP) Variant of agile Takes commonsense practices to extreme levels © 2012 by Václav Rajlich1.
Copyright 2002 by RoleModel Software, Inc. Extreme Programming: So What? Roy W. Miller RoleModel Software, Inc.
Extreme Programming. Extreme Programming (XP) Formulated in 1999 by Kent Beck, Ward Cunningham and Ron Jeffries Agile software development methodology.
CSC 480 Software Engineering Extreme Programming.
SoberIT Software Business and Engineering Institute HELSINKI UNIVERSITY OF TECHNOLOGY 1 eXtreme Programming – one of the Agile Software Development Methodologies.
25-Feb-16 Extreme Programming. 2 Software engineering methodologies A methodology is a formalized process or set of practices for creating software An.
Introduction to Software Engineering Muhammad Nasir Agile Software Development(2)
1 Introduction to eXtreme Programming Remko Popma Azzurri Ltd.
Extreme programming (XP) Advanced Software Engineering Dr Nuha El-Khalili.
Coming up: What is Agile? XP Development Dan Fleck 2010 Dan Fleck 2010.
Sample Wiki Comments?.
Planning User stories are written.
Alexander Kanavin Lappeenranta University of Technology
EXtreme Programming BY R.V.Ramesh MCA II Semester.
Extreme Programming.
What do you need to know about XP?
Agile and XP Development
Agile and XP Development
Agile and XP Development
Coming up: What is Agile?
Refactoring.
Sylvain Giroux October 3rd, 2000
Extreme Programming (and Pair Programming)
Presentation transcript:

Extreme programming for programmers Kirill Kalishev SPb Java Users Group 13 Oct 2001 Title

Key concepts Planning Design Programming Contents Intent: to try to show programming in the eyes of the extreme programmer

Deliver value for the customer Flatten the change curve Have fun doing programming The goals

Customer value Start Planned result Desired result Conformance to a big up-front plan Conformance to actual customer value

Change curve We have to make it true! Cost of change Requirements Analysis Design Implementation Test Development lifecycle Provided the change is cheap

Key concepts (XP values) Communication A project would fail if somebody doesn’t communicate something important Simplicity Do the simplest thing that could possibly work (win in changing it when it needs change) Feedback Optimism is hazard, feedback is treatment Courage Don’t let your fears stop you from making great software Values is what distinguishes bunch of individuals vs. team

Const Manageable Key concepts (four variables) Time Cost Scope Quality

The circle of life On-site customer Planning game Acceptance testing Short releases Pair programming Unit testing Simple design Refactoring Communication  Feedback  Simplicity  Courage

Practices On-site customer Planning game Sustainable pace MetaphorSimple design Refactoring Test first Pair programming Short releases Coding standardsCollective ownership Continuos integration Weakness of one is supported by strength of others

The customer + programmers = a team The customer is in the same room to give answers prevents programmers from putting their suppositions to code The customer is logically the one all stakeholders speak to programmers with one voice Can’t find a customer? does the project make sense? On-site customer Talking to the customer everyday is a key to success!

Customer Planning game - bill of rights Programmers The right to an overall plan (what/when/how much) The right to know what is needed (clear declaration of priority) The right to change mind anytime (functionality/priorities) The right to make & update estimates The right to see the progress & be informed on any schedule changes The right to produce quality work at all times The right to get the most possible value out of each programming week The right to accept responsibilities vs. having them assigned

Customer Planning game - the moves Programmers Table Defines stories (on index cards) Say who much it costs (put estimates to cards), go spike if needed Defines what to do & what to defer (sorts by value) Sort cards by risk The plan Defines the plan (by time or by scope) Commit to meet the plan

The team believes that the next iteration they will do the same amount of work as in the previous one Project velocity in terms of ideal engineering time (days/weeks/tomato hours) is calculated All stories are estimated in the same metric Each next iteration is filled with the stories whose summary estimates fills the current velocity Planning game - yesterday’s weather The worst problem is not being behind the schedule as such, but not knowing about that

Release vs. Iteration planning CustomerProgrammers Planning game Release planning by scope/by time Iteration planning by time (1, 2, 3 week iterations) each iteration the project velocity is updated task breakdown is done 1 2 n Release Iteration 1 2 n Release Iteration...

The whole team (customer + programmers) learns about the system Releases are done often The customer has a working system at all times Short releases

Acceptance testing Customer Programmers Defines acceptance criteria for each story Make it automatic, make it pass

XP believes that the best strategy is to solve the most pressing problem while keeping most options In design, it reflects in the following: No up-front design, instead, Do The Simplest Thing That Could Possibly Work rely on your ability to change it later, when you learn new things or new features will be really needed Do design all the time, as you go along Design for the iteration works Design strategy Simplicity keeps most options!

Like drawing cool diagrams? Great! We like it too. However, Minimize the time between making design solution and turning it into code Computer does’t understand diagrams, but does it for code You should consider yourself just guessing until code is written Start with a test, to know when you are done On diagrams

Metaphor The story both the customer and programmers share about how the system works Metaphor covers most of what we call “architecture” System of names Actors Interactions On architecture - Oops, it sounds like plumbing, right? - Yes, something like that. In this case water going through pipes is like a transaction. When at least one valve is closed -- no way to proceed - Cool, why don’t we call it pipes, water & valves - Okay, sounds like fun

A rule: Each line of code is written by at least two people Pair programming is a dialog of two people The driver - controls the keyboard, the mouse and actively works on implementation of the program The observer - thinks more strategically, looks for errors, misprints & etc. Partners change roles No dialog - no pair programming Pair programming Pair-programmed code is better written & structured plus it is done quicker!

Acceptance tests Owned by the customer Proves that the story is done in terms of the customer’s perspective Unit tests Owned by programmers Test everything that could possible break Written before production code Always pass 100% in the integrated code Acceptance vs. unit testing

You won’t win if you write a test that doesn’t communicate any new things about how production code should work is not gonna break You will win if you write a test that communicates what is needed from the production code will ever show that something has broken down (which is inevitable) - Test Everything That Could Possibly Break independent of others as much as possible Unit testing - a bet If you had to choose what to throw away, it should be production code, not tests

When to test? It is a normal way to program: If you add a new feature, write a test before production code If you fix a defect, write a test that would expose the defect, then fix it Every time, before you integrate code, unit tests must pass 100% Unit testing - XP style Don’t let the fear that testing can’t catch all bugs stop you from writing tests that will catch most bugs

Excuses for not testing I don’t have time This can’t be tested I don’t know how It tests itself! I already tested it once and I have not changed it. I am smart enough to know this works perfectly XP is not about writing production code. It is about writing tests and making them pass.

Quality code Runs all tests Expresses every idea we need to express Says everything once and only once Have the minimum number of classes and methods consistent with the above No production production code is considered existing without tests for that Code quality

No code is owned by an individual person The team owns that (read - everyone in the team) If you see the chance to put changes - just do it, but all unit tests must pass 100% integrate asap, otherwise you will lose Why is it better than personally owned code? You don’t have to wait unit a responsible person will be available You know better what you want Collective code ownership Conflicts are not a problem as such. You have tests, you integrate often so you are not afraid of conflicts

No code sits nonintegrated for more than two hours integration is not painful anymore, we do it several times an hour! There is only one integration thread a time to make sure you’re integrating only your changes (integration computer works) All unit tests must pass 100% every time you integrate Continuos integration

An activity of changing structure without modifying behavior, aimed at: making the program easier to understand & cheaper to modify A core activity to do a good program start with a simple thing & refactor it later. You are not afraid of being wrong. Refactoring essential? No, if you are omniscient perfect and so everyone else on the team Refactoring Refactoring is everyday disciplined activity. If you do more and more refactoring - it means you don’t do enough refactoring

If you add a feature first look for chance to improve existing code, to make the adding easier refactor make sure unit tests pass 100% & integrate write a test, put in new feature and make the tests pass again integrate If you see the chance to improve something - do it. Otherwise, you risk to run into debts. Essentials of refactoring If you don’t want to do refactoring for yourself, do it for your team!

Looking at the code, you should not see who wrote that Different coding styles should not be an obstacle to better understanding. Develop that, agree on that and follow that! Coding standards Any fool can write a program the computer can understand. Good programmers write programs other people can understand.

We do appreciate good comments. However, while development, we don’t write comments because: they often lie they don’t provide feedback (computer doesn’t understand them!) there are a lot of more reliable ways to reveal the intent On comments If you feel you should put a comment, refactor you program first. Then, take a look again. You are likely to lose you will to put comments.

Productivity does not increase with hours worked so we work 40-hour week to be fresh and eager If we have to work overtime, we don’t do it more than a week Sustainable pace

Simplicity is the art of maximizing the amount of work not done simplicity to do simplicity to understand simplicity to change Complexity is like debts. The more we keep it complicated, the more money we pay for that On simplicity What may look simple for you, may not be the case for the team. The way is to learn, agree and follow. The whole team together.

Design is a kind of recognition of patterns - we call it “experience” Design patterns (like ones from GoF) give us system of names, what promotes better: communication understanding Since patterns are goals for refactoring, learning refactoring techniques is essential as well On design patterns Thinking in patterns is not an evil. Narrow thinking is.

To realize if XP is for you or not Practices are simple. Their interactions are not obvious. The most value on XP is in the mutual support of the practices To ship software & have from it Why is it worth trying?

The inventors of XP Kent Beck Ward Cunningham Martin Fowler Famous speakers & writers on XP Bob Martin Ron Jeffries Don Wells William Wake Pair programming & collaborative development Laurie Williams Who is who in the XP world

Within SPb XP users group Come share experience! You can reach me by phone: +7 (812) web: