Agile Engineering

50 %
50 %
Information about Agile Engineering
inc

Published on August 19, 2009

Author: johnalewis

Source: slideshare.net

Agile Development Practices John A. Lewis Chief Software Architect Unicon, Inc. 29 July 2010 © Copyright Unicon, Inc., 2010. Some rights reserved. This work is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 United States License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/3.0/us/

Agile Software Development

Manifesto for Agile Software Development We are uncovering better ways of developing software by doing it and helping others do it. Through this work we have come to value: Individuals and interactions over processes and tools Working software over comprehensive documentation Customer collaboration over contract negotiation Responding to change over following a plan That is, while there is value in the items on the right, we value the items on the left more . From the “Manifesto for Agile Software Development” See http://agilemanifesto.org/

We are uncovering better ways of developing software by doing it and helping others do it.

Through this work we have come to value:

Individuals and interactions over processes and tools

Working software over comprehensive documentation

Customer collaboration over contract negotiation

Responding to change over following a plan

That is, while there is value in the items on the right, we value the items on the left more .

Principles of Agile Development Our highest priority is to satisfy the customer through early and continuous delivery of valuable software. Welcome changing requirements, even late in development. Agile processes harness change for the customer's competitive advantage. Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale. Business people and developers must work together daily throughout the project. Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done. The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.

Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.

Welcome changing requirements, even late in development. Agile processes harness change for the customer's competitive advantage.

Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale.

Business people and developers must work together daily throughout the project.

Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done.

The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.

Principles of Agile Development (cont) Working software is the primary measure of progress. Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely. Continuous attention to technical excellence and good design enhances agility. Simplicity—the art of maximizing the amount of work not done—is essential. The best architectures, requirements, and designs emerge from self-organizing teams. At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly.

Working software is the primary measure of progress.

Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely.

Continuous attention to technical excellence and good design enhances agility.

Simplicity—the art of maximizing the amount of work not done—is essential.

The best architectures, requirements, and designs emerge from self-organizing teams.

At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly.

Nature of A Complete Method There are two critical aspects of a software development method: Process : How the project is conducted and coordinated. Provides for project management and control mechanisms. Not specific to software development. Practice : How the developers perform software development. A set of practices and conventions that all developers follow in order to collaborative effectively and produce high-quality results quickly.

There are two critical aspects of a software development method:

Process : How the project is conducted and coordinated. Provides for project management and control mechanisms. Not specific to software development.

Practice : How the developers perform software development. A set of practices and conventions that all developers follow in order to collaborative effectively and produce high-quality results quickly.

Agile Development Practices

User Stories / Use Cases Plain-language descriptions of things the system does and how the user interacts to accomplish them. User Story: Very simple and written by the customer. Incomplete, possibly inaccurate, doesn't handle exceptional cases. Not a lot of effort is expended making sure it's correct. Serves as a reminder and a starting point for additional discussions with the customer about the full extent of his needs. Use Case: More complex and is written by the developer with the customer. Attempts to be complete, accurate, and handle all possible cases. A lot of effort is expended to make sure it's correct. Should be able to answer any developer questions about customer requirements so that developers do not need more discussion.

Plain-language descriptions of things the system does and how the user interacts to accomplish them.

User Story:

Very simple and written by the customer.

Incomplete, possibly inaccurate, doesn't handle exceptional cases.

Not a lot of effort is expended making sure it's correct.

Serves as a reminder and a starting point for additional discussions with the customer about the full extent of his needs.

Use Case:

More complex and is written by the developer with the customer.

Attempts to be complete, accurate, and handle all possible cases.

A lot of effort is expended to make sure it's correct.

Should be able to answer any developer questions about customer requirements so that developers do not need more discussion.

Precisely Enough Design The right design at any given time should: Pass all the tests Say things once – and only once Contains only the things you need now (not what you anticipate needing in the future) Eliminate everything else from your design “The simplest thing that could possibly work” “You Aren't Gonna Need It” (YAGNI)

The right design at any given time should:

Pass all the tests

Say things once – and only once

Contains only the things you need now (not what you anticipate needing in the future)

Eliminate everything else from your design

“The simplest thing that could possibly work”

“You Aren't Gonna Need It” (YAGNI)

Test-Driven Development All development is done with a focus on testing. Test cases are developed prior to the code that it tests to ensure proper functionality. “ Red – Green - Refactor ” Unit tests are automated and can be run as a complete suite to test the entire system. Automated testing frameworks (e.g. JUnit) are used to manage and execute the tests.

All development is done with a focus on testing.

Test cases are developed prior to the code that it tests to ensure proper functionality.

“ Red – Green - Refactor ”

Unit tests are automated and can be run as a complete suite to test the entire system.

Automated testing frameworks (e.g. JUnit) are used to manage and execute the tests.

Continuous Integration Instead of splitting up to work on modules separately, all developers always have each-others latest code. This ensures that the fully integrated system is always functional. Version control systems like Subversion promote continuous integration. Only maintain one code line, so there are no big integrations (patches to released versions are a reasonable exception). Automated nightly builds show any problems.

Instead of splitting up to work on modules separately, all developers always have each-others latest code.

This ensures that the fully integrated system is always functional.

Version control systems like Subversion promote continuous integration.

Only maintain one code line, so there are no big integrations (patches to released versions are a reasonable exception).

Automated nightly builds show any problems.

Collective Code Ownership The code for the project is owned by the entire project team. No one developer “owns” any of the code. While building new functionality, developers may modify any code in the system. Developers are responsible for maintaining all unit tests and writing new ones for new functionality. All the normal integrity preservation duties apply to changes to any code.

The code for the project is owned by the entire project team. No one developer “owns” any of the code.

While building new functionality, developers may modify any code in the system.

Developers are responsible for maintaining all unit tests and writing new ones for new functionality.

All the normal integrity preservation duties apply to changes to any code.

Merciless Refactoring Whenever methods or objects are found to contain similar or identical functionality they are refactored into a single implementation. This is done repeatedly as the system evolves and keeps the design fresh and accurate. This makes things simpler, easier to understand, easier to extend, and more reliable.

Whenever methods or objects are found to contain similar or identical functionality they are refactored into a single implementation.

This is done repeatedly as the system evolves and keeps the design fresh and accurate.

This makes things simpler, easier to understand, easier to extend, and more reliable.

Coding Conventions Use a complete set of well-defined coding standards so that all code is easily read and maintained by all developers. These include conventions for: Class / method / attribute naming Indentation White space Block delimiter placement Comments

Use a complete set of well-defined coding standards so that all code is easily read and maintained by all developers.

These include conventions for:

Class / method / attribute naming

Indentation

White space

Block delimiter placement

Comments

Pair Programming Two programmers working together at one workstation when writing code Each complements what the other is doing: One writes unit tests, the other thinks about the class that will satisfy those tests One writes code logic, the other watches for bugs or makes suggestions for improvements Switch role in the pair frequently and switch pairs frequently (“promiscuous”) Admittedly controversial and hard to justify as being more than twice as productive

Two programmers working together at one workstation when writing code

Each complements what the other is doing:

One writes unit tests, the other thinks about the class that will satisfy those tests

One writes code logic, the other watches for bugs or makes suggestions for improvements

Switch role in the pair frequently and switch pairs frequently (“promiscuous”)

Admittedly controversial and hard to justify as being more than twice as productive

Code Reviews Upon completion of a feature/bug, the code changes are reviewed by some subset of the development team. Code is reviewed in real-time on a developer computer with a projector and screen. As problems are found, the developer makes changes right then and there. If the problems are too big to fix immediately, they are documented and a programmer is assigned to tackle it separately as a new bug or feature.

Upon completion of a feature/bug, the code changes are reviewed by some subset of the development team.

Code is reviewed in real-time on a developer computer with a projector and screen.

As problems are found, the developer makes changes right then and there.

If the problems are too big to fix immediately, they are documented and a programmer is assigned to tackle it separately as a new bug or feature.

Collaboration Tools Keep tools as simple as possible. Use the right tools to help team collaborate: Wiki for simple docs, user stories, use cases, Sprint goals and overviews Issue Tracking for Product Backlog, Sprint Backlog bugs, track workload, monitor velocity Version Control for collective code ownership and continuous integration Continuous Integration for nightly builds, automated testing, code analysis, metrics

Keep tools as simple as possible.

Use the right tools to help team collaborate:

Wiki for simple docs, user stories, use cases, Sprint goals and overviews

Issue Tracking for Product Backlog, Sprint Backlog bugs, track workload, monitor velocity

Version Control for collective code ownership and continuous integration

Continuous Integration for nightly builds, automated testing, code analysis, metrics

Adopting Agile Practices Agile Practices should be adopted gradually by projects running an Agile Process. Tech Leads must encourage / enforce the practices with the development team. Training and coaching from other experts is also valuable. Test-Driven Development should be adopted first since it drives a lot of agile behavior and is painful to retrofit. Put key tools in place and reinforce simple and proper usage of the tools

Agile Practices should be adopted gradually by projects running an Agile Process.

Tech Leads must encourage / enforce the practices with the development team.

Training and coaching from other experts is also valuable.

Test-Driven Development should be adopted first since it drives a lot of agile behavior and is painful to retrofit.

Put key tools in place and reinforce simple and proper usage of the tools

Resources Website: http://www.agilealliance.org/ Website: http://www.extremeprogramming.org/ Book: "Extreme Programming Explained" by Kent Beck C2 Wiki: Extreme Programming Core Practices

Website: http://www.agilealliance.org/

Website: http://www.extremeprogramming.org/

Book: "Extreme Programming Explained" by Kent Beck

C2 Wiki: Extreme Programming Core Practices

Questions & Answers John A. Lewis Chief Software Architect Unicon, Inc. [email_address] www.unicon.net

Add a comment

Related pages

Welcome - Agile Engineering

Welcome to the Agile Engineering website. Agile Engineering is an engineering service company that develops applications by using LabVIEW™ and NI ...
Read more

Agile Engineering | It's all about code

Moderne Projekte erfordern moderne Methoden. Continuous Delivery ist bereits fester Bestandteil. Moderne Methoden werden mit modernen Werkzeugen verknüpft.
Read more

Agile software development - Wikipedia, the free encyclopedia

Agile Software Development is a set of software development methods in which requirements and solutions evolve through collaboration between self ...
Read more

Agile Engineering | improuv - Scrum Training, Agiles ...

Agile Engineering-Techniken. Agile Engineering-Techniken bilden den stabilen Unterbau für die Durchführung eines agilen Projekts: Agil baut auf ...
Read more

ASE | Agile Software Engineering

Was ist Agile Software Engineering? Ein Trainingsprogramm für Scrum-Teams, das die Entwicklerinnen und Entwickler in state-of-the-art Praktiken des ...
Read more

Agile "Engineering " Practices, a Cheat SheetThe Agile ...

Every once in a while, somebody posts an article about “The Agile Engineering Practices”. Usually, it is an article about why we shouldn’t do them ...
Read more

Agile Engineering

Ich habe meine Toolbox zur Automatisierung weiterentwickelt und nun das nächste Release herausgebracht. Wie immer sind alle Änderungen frei verfügbar ...
Read more

Agile Engineering & Processing Strategies 2012 we.CONECT

Methoden, Prozesse und Tools an den Nahtstellen zwischen Entwicklung, Engineering und Produktion | Verringerung der Fehler- und Änderungsanfälligkeit ...
Read more

Agile Engineering and Manufacturing

World class manufacturing engineering, fabrication and machining services for the aerospace, defense, power generation and transportation markets
Read more

Agile Engineering Best Practices | Agile Training

About Agile Engineering Best Practices and Training. Agile training, agile development, test driven development training, agile testing.
Read more