• No results found

agile, open source, distributed, and on-time inside the eclipse development process

N/A
N/A
Protected

Academic year: 2021

Share "agile, open source, distributed, and on-time inside the eclipse development process"

Copied!
28
0
0

Loading.... (view fulltext now)

Full text

(1)

© 2005 IBM Corporation

agile, open source, distributed, and

on-time

inside the eclipse development

process

Erich Gamma

IBM Distinguished Engineer

Eclipse Project Management Committee

[email protected]

what is eclipse (www.eclipse.org)?

ƒ

an IDE and more…

ƒ it’s a Java development environment(JDT) ƒ it’s a generaltoolsand integration platform ƒ it’s a general application platform(RCP)

ƒ

an

open source

community

ƒ

an

ecosystem

to enable a total solution

ƒ including products by some major tool vendors

ƒ

a

foundation

to advance the

eclipse platform

(2)

© 2005 IBM Corporation

inside the eclipse development process

ƒ

our process has evolved over time

ƒ stay aware, adapt, change

ƒ

our process has helped us to achieve:

ƒ predictability

ƒ quality delivery on time

¾

share what we have learned

¾influence “by example” – similar as the eclipse Java Development Tools

what it isn’t…

ƒ

shipping software is not about...

ƒ having the right development environment ƒ we know, we build IDEs

ƒ having the right methodology

ƒ

software engineering involves all these...

(3)

© 2005 IBM Corporation

“we ship software"

ƒ

our objective is to ship software

ƒ anything that contributes to this goal is good ƒ anything that does not is bad

ƒ

team member recognition is based on the ability to ship

ƒ quality software ƒ on time

ƒ

the culture: "If you ship, then you may speak."

ƒ

the question: "Did they ever ship anything?"

ƒ

the insult: "They never ship anything!"

eclipse practices

milestones first API first end game retrospectives always have a client built to last continuous integration community involvement new & noteworthy early incremental planning continuous testing consume your own output component centric drive with open eyes validate reduce stress learn enable attract to latest transparency validate update dynamic teams show progress enable explore validate

(4)

© 2005 IBM Corporation

project rhythm

milestones first API first end game retrospectives always have a client built to last continuous integration community involvement new & noteworthy early incremental planning continuous testing consume your own output component centric drive with open eyes validate reduce stress learn enable attract to latest transparency validate update dynamic teams show progress enable explore validate

eclipse release cycles

1.0 Nov 2001 2.0.1 Sep 2002 2.0 June 2002 2.0.3 Mar 2003 2.0.2 Nov 2002 2.1.1 June 2003 2.1 Mar 2003 2.1.2 Oct 2003 2.1.3 Feb 2004 3.0 June 2004 3.0.1 Nov 2004 3.0.2 Mar 2005 3.1 June 2005

(5)

© 2005 IBM Corporation

milestones first

ƒ break down release cycle into milestones

ƒ we currently use 6 weeks

ƒ each milestone is a miniature development cycle

ƒ plan, execute, test, retrospective ƒ teams refer to the release plan when

creating milestone plans

ƒ assign plan items to a milestone ƒ milestone plans are public

ƒ result of a milestone

ƒ milestone builds: good enough to be used by the community

ƒ at the end of each milestone we do a retrospective

ƒ what went well, what did not?

¾ milestones reduce stress!

ƒ before/after t quality ready to ship 2.0 3.0

“hanging rope”

continuous integration

ƒ

fully automated build process

ƒ

build quality verified by automatic unit tests

ƒ

staged builds

ƒ nightly builds

ƒ discover integration problems between components ƒ (weekly) integration builds

ƒ all automatic unit tests must be successful ƒ good enough for our own use

ƒ milestone builds

ƒ good enough for the community to use

ƒ

reality

: build failures occur

(6)

© 2005 IBM Corporation

always beta

ƒ

each build is a release candidate;

we expect it to work

ƒ

results of the build process and the automatic tests

ƒ indicate where we are

ƒ

as tool makers we use our own tools

ƒ component team – use the latest code daily ƒ project team – use integration builds (weekly) ƒ community – use milestone builds

¾

continuously

Consume Our Own Output

it is a community thing

ƒ software development (Open Source even more) is a “community thing”

ƒ an active community is the major asset of an OS project

ƒ OS project gives and takes:

ƒ OS developer gives:

ƒ listen to feedback and react ƒ demonstrate continuous progress ƒ transparent development ƒ OS developer takes:

ƒ answer user questions so that developers do not have to do it ƒ report defects and feature requests

ƒ validate technology by writing plug-ins ƒ submit patches and enhancements

ƒ Give and take isn’t always balanced

(7)

© 2005 IBM Corporation

community involvement

ƒ requires transparency

ƒ community needs to know what is going on to participate

ƒ requires open participation

ƒ we value the contributions of the community

ƒ we are the community

ƒ problem: no one knew what was in a milestone,

ƒ so there was no incentive to move to milestone builds ƒ so we received minimal feedback

ƒ more stale defect reports ƒ quality suffered

ƒ solution: publish new and noteworthy

ƒ advertise what we have been doing

testing

milestones first API first end game retrospectives always have a client built to last continuous integration community involvement new & noteworthy early incremental planning continuous testing consume your own output component centric drive with open eyes validate reduce stress learn enable attract to latest transparency validate update dynamic teams show progress enable explore validate

(8)

© 2005 IBM Corporation

testing

ƒ innovate with confidence

ƒ continuous incremental design

ƒ > 20,000 JUnit tests

ƒ tightly integrated into the build process ƒtests run after each build (nightly, integration, milestone)

ƒ integration builds are only green when all tests pass

ƒ test kinds

ƒ correctness tests ƒassert correct behavior ƒ performancetests

ƒassert no performance regressions ƒbased on a database of previous test run measurements ƒ resourcetests, leak tests

ƒassert no resource consumption regressions

Defects Testing

Kent Beck – JUnit handbook

(9)

© 2005 IBM Corporation

performance testing

ƒ

performance tests are an ongoing part of Eclipse 3.1

ƒ keep closer tabs on performance changes during development

ƒ

JUnit performance test

public class MyPerformanceTestCase extends PeformanceTestCase { public void testMyOperation() {

startMeasuring();

for (int i= 0; i < 10; i++) {

toMeasure(); } stopMeasuring(); commitMeasurements(); assertPerformance(); } }

(10)

© 2005 IBM Corporation

before (M5) – after (M7)

eclipse practices

milestones first API first end game retrospectives always have a client built to last continuous integration community involvement new & noteworthy early incremental planning continuous testing consume your own output component centric drive with open eyes validate reduce stress learn enable attract to latest transparency validate update dynamic teams show progress enable explore validate

(11)

© 2005 IBM Corporation

endgame

ƒ

endgame endurance

ƒ we are only effective for so long

ƒ distribute quality/polish effort throughout the release

ƒ

shared responsibility and commitment

ƒ we all sign off

where are in the middle of the 3.1 end game

Q1

Q4

2005

M6

Q2

Q3

M7

3.1

M5 M4 M3 M2 M1

3.0

M1 M2 M3 M4 M5 M6 ICSE 2005 M7

(12)

© 2005 IBM Corporation

3.1 endgame

ƒ convergence process applied before release ƒ sequence of test-fix

passes

ƒit is a community event!

endgame convergence

ƒ

with each pass the costs for fixing are increased

ƒ higher burden to work on fix for a problem ƒ higher burden to release a fix for a problem ƒ focus on higher priority problems

# fixed bugs 608 301 85 fix pass test pass time 447

May 21 May 28 June 11 June 20 June 25 eclipse 3.0 Release

(13)

© 2005 IBM Corporation

signing-off

ƒ

"An enthusiastic GO from PDE" - Cherie

ƒ

"The best build of the year!" - Dejan

ƒ

"An Eclipse build that the whole family can enjoy" - Wassim

ƒ

Your PDE team.

decompression

ƒ

recover from release

ƒ

retrospective

of the last cycle

ƒ learn from the last cycle

ƒ achievements ƒ failures

ƒ “stay aware, adapt, change” ƒ define retrospective actions

(14)

© 2005 IBM Corporation

where the time goes

ƒ

release cycle 12-16 months

ƒ milestones - 9 months

ƒ endgame – 1-2 months

ƒ decompression – 1 month milestones

endgame decompression

planning

milestones first API first end game retrospectives always have a client built to last continuous integration community involvement new & noteworthy early incremental planning continuous testing consume your own output component centric drive with open eyes validate reduce stress learn enable attract to latest transparency validate update dynamic teams show progress enable explore validate

(15)

© 2005 IBM Corporation

early planning

ƒ release themes establish big picture

ƒ community input

ƒ requirements council new source of input

ƒ component teams define component plans ƒ PMC collates initial project plan draft

ƒ tradeoff: requirements vs. available resources ƒ committed, proposed, deferred

ƒ plan initially spells out

ƒ themes ƒ milestones

ƒ compatibility (contract, binary, source, workspace)

the plan is alive

ƒ

the project plan is updated quarterly to reflect

ƒ progress on items ƒ new items

ƒ input from the community

¾

becomes final at the end of the release

ƒ

before

: static plans

ƒ accurate at one point in time only

(16)

© 2005 IBM Corporation

ongoing risk assessment

ƒ

address high risk items and items with many dependencies early

ƒ

maintain schedule by dropping items (if necessary)

ƒ we will drop proposed items ƒ we hate to drop committed items

ƒ prefer fewer completed items than more items in progress

ƒ

high risk items are sandboxed to reduce risk to other items

ƒ prefer to serialize highest risk items (to minimize integration pain)

collective ownership

ƒ

PMC meets at least once a week

ƒ

all component leads and the PMC meet for a weekly planning call

ƒ status ƒ planning

ƒ identification of cross-component issues

ƒ meeting notes posted to the developer mailing lists

ƒ

dynamic teams are established for solving cross-component issues

ƒ one cross-component issue per dynamic team

ƒ members are key developers from all effected components

ƒ find, implement, and roll-out solution of the assigned cross component issue ƒ represented in the weekly planning calls

(17)

© 2005 IBM Corporation

built to last

milestones first API first end game retrospectives always have a client built to last continuous integration community involvement new & noteworthy early incremental planning continuous testing consume your own output component centric drive with open eyes validate reduce stress learn enable attract to latest transparency validate update dynamic teams show progress enable explore validate

built to last

ƒ

deliver on time, every time

ƒ decisions in this release impact what we can do next release ƒ must preserve architectural integrity

ƒ

deliver quality

ƒ

innovation with continuity

ƒ need to have a solid foundation ƒ scalable

ƒ performant ƒ stable

(18)

© 2005 IBM Corporation

how buildings last

Site

Stewart Brand: how buildings learn

– what happens after they're built

• stuff: furniture

• services: electrical, plumbing (7-15y)

• structure: foundation, load bearing walls (30-300y) • site: geographical setting (forever)

layers

:

• evolve at different rates during the life of a building • shear against each other as they change at different rates • an adaptive building must allow slippage

¾a building that lasts is adaptive and can change over time ¾lasts for generations without total rebuilding

structure foundation

ƒ

the eclipse plug-in architecture

ƒ

everything is a plug-in

(19)

everything is a plug-in

plug-in

set of contributions

smallest unit of eclipse functionality

declares its pre-requisites

Plug-in Plug-in

Plug-in

extension point

named entity for collecting contributions

everything is a plug-In

Plug-in Plug-in

(20)

extension

a contribution

everything is a plug-in

Plug-in Plug-in Plug-in

the platform run-time is

making the connection

everything is a plug-in

Plug-in Plug-in Plug-in

(21)

© 2005 IBM Corporation

services plumbing: APIs

ƒ

APIs matter

ƒ define consistent, concise API

ƒ define API conventions (*.internal.* in eclipse) ƒ don’t expose the implementation

ƒ develop implementation and client at the same time

ƒ

define APIs for stability

ƒ binary compatibility is highest priority

ƒ we would rather provide less API than desired (and augment) than provide the wrong (or unnecessary) API and need to support it indefinitely

component centric

ƒ

component centric development

ƒ a team is responsible for one or more component

ƒ

dependencies through APIs

ƒ ensures high velocity development inside a component

ƒ eclipse 3.1 provides tools support to check for API access violations ƒ as you type

ƒ

define producer/consumer relationships among components

ƒ tension among components is healthy for coming up with good component interfaces/APIs

(22)

© 2005 IBM Corporation

APIs first

ƒ APIs don’t just happen; we need to design them ƒ specifications with precisely defined behavior

ƒ what you can assume (and what you cannot) ƒ it works ≠ API compliant

ƒ documented classes ≠ API

ƒ “provisional API” = API that didn’t make it for a release

ƒ must have at least one client involved, preferably more ƒ need an API advocate

ƒ we all care about having sustainable APIs ƒ need someone who lives and breathes APIs

practical extensibility

ƒ

extensible in ways that are known useful

ƒ needed by us, requested by others

ƒ

we

don't provide hypothetical generality

- we want to be extensible in

ways that matter

(23)

© 2005 IBM Corporation

API tension

ƒ

conflict

ƒ APIs need to be implemented and used to be right ƒ requires iteration

ƒ needs external client ƒ stable API necessary

ƒ for widespread adoption

ƒ

resolution

ƒ don’t commit API before its time

ƒ APIs can (and should) change during the release to accommodate new requirements, experience

example: API evolution in the Java Development

Tools

ƒ

new APIs

ƒ AST (Abstract Syntax Tree) ƒ AST rewriting

ƒ code manipulation

ƒ

open-up

ƒ contribute to quick fix/quick assist ƒ contribute to code assist

ƒ

push-down

ƒ make JDT specific support available to other languages: ƒ template processors

(24)

© 2005 IBM Corporation

stuff, furniture - UI

ƒ

eclipse extension architecture is contribution based

ƒ extensions contribute to the workbench

ƒ the workbench manages and presents the contributions

ƒ

enables UI evolution

ƒ 3.0 new look

keeping the house clean…

ƒ

blur the boundary between the Platform and contributions

ƒ plug-ins should fit in (and together) naturally

¾ this is a shared responsibility for all plug-in developers

housekeeping rules

ƒ sharing rule: Add, don’t replace

ƒ invitation Rule: Whenever possible, let others contribute to your

contributions

ƒ fair Play Rule: All clients play by the same rules, even me.

ƒ Relevance Rule: Contribute only when you can successfully operate

ƒ Integration Rule: Integrate and don’t separate

(25)

© 2005 IBM Corporation

summary

milestones first API first end game retrospectives always have a client built to last continuous integration community involvement new & noteworthy early incremental planning continuous testing consume your own output component centric drive with open eyes validate reduce stress learn enable attract to latest transparency validate update dynamic teams show progress enable explore validate

confessions

ƒ

ripples - a change in a lower layer that propagates up

ƒ we often underestimate the impact on upper layers! ƒ consequence: end game swirls and stress ƒ ground rule:

ƒ you are not done unless the upper most layer has digested the ripple

ƒ

dynamic teams – not all efforts are successful

ƒ require leadership, feeling of responsibility ƒ require even more detailed planning

ƒ

we drop features!

(26)

© 2005 IBM Corporation

summary agile practices followed

9 Testing early, often and automated 9 Incremental design

yes but API stability is important to us

9 Daily deployment 9 Customer involvement

we have an active community

9 Continuous integration

nightly, weekly, milestone

9 Short development cycles

6 weeks cycles

9 Incremental planning

time boxing

refined after each milestone

conclusion

ƒ

the team makes the process work

ƒ

the team defines and evolves the process

ƒ

agile Open Source processes work

(27)

© 2005 IBM Corporation

So? (Your First Step)

ƒ

don’t be afraid of Open Source products

ƒ join the Eclipse community (as one example…)

So? (Your Next Steps)

ƒ

increase your aggressiveness

ƒ

consider "Community Source" development

ƒ use Open Source practices and tools for internal development ƒ more transparent processes

ƒ more agile development

ƒ "OS can make a large organization act like a smaller one" ƒ more control to the developers

ƒ information flows are nakedly visible

ƒ The OS development process is almost a literal translation of modern management principles.

(28)

© 2005 IBM Corporation

So? (After All)

ƒ

consider Open Source development for your products

ƒ split your product into ƒ commodity (platform) layer ƒ differentiator (application) layers

¾keep the application layer small ƒ become fully transparent

ƒ don’t hide your bugs and plans anymore

ƒ start to open source once you have something “interesting” ƒ invest into building a community

References

Related documents