Turning Development Outside

Similar documents
Software. Is

Programming with GUTs

Software. Is

Certified ScrumMaster (CSM) 83 Success Secrets: 83 Most Asked Questions On Certified ScrumMaster (CSM) - What You Need To Know

David Bernstein Five Development Practices Essential for Scrum Teams

+ Abstract Data Types

SML Style Guide. Last Revised: 31st August 2011

[PDF] Kanban: The Kanban Guide For The Business, Agile Project Manager, Scrum Master, Product Owner, And Development Support Team

Introduction to Programming

Agile Project Management: A Quick Start Beginner's Guide To Mastering Agile Project Management PDF

CSC148H Week 3. Sadia Sharmin. May 24, /20

[PDF] Agile : Agile Project Management, A QuickStart Beginners 's Guide To Mastering Agile Project Management!

Agile Software Development With Scrum (Series In Agile Software Development) By Ken Schwaber, Mike Beedle

CaseComplete Roadmap

How to Improve Your Campaign Conversion Rates

Git Branching for Agile Teams

The Ultimate Medical Mnemonic Comic Book: Color Version

ME 4054W: SENIOR DESIGN PROJECTS

Without further ado, let s go over and have a look at what I ve come up with.

Formal Methods of Software Design, Eric Hehner, segment 24 page 1 out of 5

Credit where Credit is Due. Lecture 29: Test-Driven Development. Test-Driven Development. Goals for this lecture

QUIZ. What are 3 differences between C and C++ const variables?

MITOCW ocw f99-lec07_300k

User Stories. Wednesday, January 23, 13

CASE STUDY TELECOMS. Calvi - two years with no database-related bugs

Agile Project Management: An Inclusive Walkthrough Of Agile Project Management (Agile Project Management, Agile Software Developement, Scrum, Project

Stacks and queues (chapters 6.6, 15.1, 15.5)

CSE 100: GRAPH ALGORITHMS

The Stack, Free Store, and Global Namespace

GETTING STARTED. User Story Mapping

Everything You Wanted To Know About USB Embossers* *but were afraid to ask

Specifying Acceptance Criteria

Project 2010 For Dummies Free Download PDF

Client Code - the code that uses the classes under discussion. Coupling - code in one module depends on code in another module

Audio CD Basics Lesson 7: Submit Your CD To Gracenote

CSE332: Data Abstractions Lecture 23: Programming with Locks and Critical Sections. Tyler Robison Summer 2010

KMyMoney Transaction Matcher

How to set up SQL Source Control The short guide for evaluators

Test-Driven Development (TDD)

[PDF] Database Systems: Design, Implementation, And Management (Book Only)

Lock Picking and Physical Security. Tyler Nighswander

Total Score /15 /20 /30 /10 /5 /20 Grader

MITOCW ocw f99-lec12_300k

Assertions. Assertions - Example

MTAT Software Engineering. Written Exam 10 January Start: 9:15 End: 11:45

Recursively Enumerable Languages, Turing Machines, and Decidability

[PDF] Agile Project Management & Scrum QuickStart Guides

Tree traversals and binary trees

Abstract Data Types! Documentation!

Extreme programming XP 6

Keeping Order:! Stacks, Queues, & Deques. Travis W. Peters Dartmouth College - CS 10

CS106A, Stanford Handout #30. Coding Style

Creating Object Classes in True BASIC

Oracle Cloud. Content and Experience Cloud ios Mobile Help E

JUnit 4 and Java EE 5 Better Testing by Design

Analysis of the Test Driven Development by Example

The Need for Agile Project Management

Outline for Today. Euler Tour Trees Revisited. The Key Idea. Dynamic Graphs. Implementation Details. Dynamic connectivity in forests.

Lesson Share TEACHER'S NOTES LESSON SHARE. ing by Olya Sergeeva. Overview. Preparation. Procedure

Arduino IDE Friday, 26 October 2018

Intro. Scheme Basics. scm> 5 5. scm>

New Customer Campaign

Dilbert Scott Adams. CSc 233 Spring 2012

Practical 2: Ray Tracing

Introduction to Extreme Programming

CS106B Handout 34 Autumn 2012 November 12 th, 2012 Data Compression and Huffman Encoding

Defining Done in User Stories

GUARD1 PLUS Documentation. Version TimeKeeping Systems, Inc. GUARD1 PLUS and THE PIPE are registered trademarks

Abstract Data Types Documentation

Expanding Our Horizons. CSCI 4448/5448: Object-Oriented Analysis & Design Lecture 9 09/25/2011

CREATING EFFECTIVE USER STORIES

In our first lecture on sets and set theory, we introduced a bunch of new symbols and terminology.

Algorithms & Datastructures Laboratory Exercise Sheet 1

CS 160: Evaluation. Professor John Canny Spring /15/2006 1

Please follow the steps outlined below to complete your repurchase submission.

Arrays. Comp Sci 1570 Introduction to C++ Array basics. arrays. Arrays as parameters to functions. Sorting arrays. Random stuff

Quick Tips to Using I-DEAS. Learn about:

CS 160: Evaluation. Outline. Outline. Iterative Design. Preparing for a User Test. User Test

Hands-On Lab. Agile Planning and Portfolio Management with Team Foundation Server Lab version: Last updated: 11/25/2013

Who we are: Kristin Martin, Metadata Librarian, Catalog Department Peter Hepburn, Digitization Librarian, Digital Programs Department

CPSC 221: Algorithms and Data Structures ADTs, Stacks, and Queues

Testing in an Agile Environment Understanding Testing role and techniques in an Agile development environment. Just enough, just in time!

Good afternoon and thank you for being at the webinar on accessible PowerPoint presentations. This is Dr. Zayira Jordan web accessibility coordinator

Working with Adobe Premiere Pro CS4

MTAT Software Engineering. Written Exam 17 January Start: 9:15 End: 11:45

Letter from the editor.

Day in the Life of an SAP Consultant using IntelliCorp s LiveCompare Software

Hi everyone. I hope everyone had a good Fourth of July. Today we're going to be covering graph search. Now, whenever we bring up graph algorithms, we

Creating accessible forms

ABSTRACT DATA TYPES (ADTS) COMP1927 Computing 2 16x1 Sedgewick Chapter 4

STUDENT FAQS (LAUNCHPAD, WRITER'S HELP 2.0, AND LEARNINGCURVE)

Emma for Students Lesson 2: Peer Review and Graded Documents

TEST-DRIVEN DEVELOPMENT

Lowering the Level of

INTERFACES IN JAVA. Prof. Chris Jermaine

Saturday, October 26th, 11am. JALT2013, Kobe Convention Center, Portopia Kobe, October 25th - 28th.

A New Era of Website Design Features, Benefits, and Pricing

Injector. Windows Server 2008/2008 R2. Automai, Corp.

Test-Driven Development

WLANs = Counterintuitive

Transcription:

Turning Development Outside In @KevlinHenney

What We Talk About When We Talk About Development @KevlinHenney

What We Talk About When We Talk About Requirements @KevlinHenney

Too often we push the problem into the background because we are in a hurry to proceed to a solution.

If you read most software development texts thoughtfully, you will see that almost everything is about the solution; almost nothing is about the problem.

Analysis Design Code Test

Analysis Design Code Test

Analysis Design Code Test

It's expensive to know everything up front. Kolton Andrus

You have to finish things that's what you learn from, you learn by finishing things. Neil Gaiman

SCRUM: A Pattern Language for Hyperproductive Software Development Teams Mike Beedle, Martine Devos, Yonat Sharon,Ken Schwaber, and Jeff Sutherland

SCRUM Master Sprint Backlog SCRUM Meetings Demo After Sprint

Problem You want to balance the needs of developers to work undisturbed and the needs of management and the customer to see real progress, as well as control the direction of that progress throughout the project. Solution Sprint Divide the project in Sprints. A Sprint is a period of approximately 30 days in which an agreed amount of work will be performed to create a deliverable. Each Sprint takes a pre-allocated amount of work from the Backlog.

Analysis Sprint Design Sprint Code Sprint Test Sprint

Analysis Design Code Test Analysis Design Code Test Analysis Design Code Test Analysis Design Code Test

Develop Develop Develop Develop

Develop

If a plot works out exactly as you first planned, you're not working loosely enough to give room to your imagination and instincts.

/ WordFriday

pantser, noun Writer who writes by the seat of their pants. In contrast to a plotter, a pantser doesn't work to (or have) an outline.

Your Customers Do Not Mean What They Say Nate Jackson

I ve never met a customer yet that wasn t all too happy to tell me what they wanted usually in great detail. The problem is that customers don t always tell you the whole truth. Nate Jackson

They generally don't lie. They use their terms and their contexts. They leave out significant details. They make assumptions. Nate Jackson

This is compounded by the fact that many customers don t actually know what they want in the first place! Nate Jackson

Systems have properties capabilities, features, characteristics, etc. inside and out.

Development should discover the specific properties desired and make them so.

Try to leave out the part that readers tend to skip. Elmore Leonard

Stack {new, push, pop, depth, top}

Given When Then an empty stack an item is pushed it should not be empty

Given When Then an empty stack an item is pushed if it's OK with you, I think that, perhaps, it should probably not be empty, don't you think?

Omit needless words. William Strunk and E B White The Elements of Style

Make definite assertions. Avoid tame, colourless, hesitating, noncommittal language. When a sentence is made stronger, it usually becomes shorter. Thus brevity is a by-product of vigour. William Strunk and E B White The Elements of Style

Given When Then an empty stack an item is pushed it is not empty

Given When Then And an empty stack an item is pushed it has a depth of 1 the top item is the item that was pushed

Given_an_empty_stack_Wh en_an_item_is_pushed_th en_it_has_a_depth_of_1_ And_the_top_item_is_the _item_that_was_pushed

new Empty push Non-Empty pop [depth = 1] depth depth top push pop [depth > 1]

public class Stack_spec { public static class A_new_stack { @Test public void is_empty() } } public static class An_empty_stack { @Test( ) public void throws_when_queried_for_its_top_item() @Test( ) public void throws_when_popped() @Test public void acquires_depth_by_retaining_a_pushed_item_as_its_top() } public static class A_non_empty_stack { @Test public void becomes_deeper_by_retaining_a_pushed_item_as_its_top() @Test public void on_popping_reveals_tops_in_reverse_order_of_pushing() }

public class Stack_spec { public static class A_new_stack { @Test public void is_empty() } } public static class { } An_empty_stack @Test( ) public void throws_when_queried_for_its_top_item() @Test( ) public void throws_when_popped() @Test public void acquires_depth_by_retaining_a_pushed_item_as_its_top() public static class { } A_non_empty_stack @Test public void becomes_deeper_by_retaining_a_pushed_item_as_its_top() @Test public void on_popping_reveals_tops_in_reverse_order_of_pushing()

public class Stack_spec { public static class A_new_stack { @Test public void is_empty() } } public static class { } An_empty_stack @Test( ) public void throws_when_queried_for_its_top_item() @Test( ) public void throws_when_popped() @Test public void acquires_depth_by_retaining_a_pushed_item_as_its_top() public static class { } A_non_empty_stack @Test public void becomes_deeper_by_retaining_a_pushed_item_as_its_top() @Test public void on_popping_reveals_tops_in_reverse_order_of_pushing()

Systems have properties capabilities, features, characteristics, etc. inside and out.

Functional Operational Developmental

We want our code to be unit testable. What is a unit test?

A test is not a unit test if: It talks to the database It communicates across the network It touches the file system It can't run at the same time as any of your other unit tests You have to do special things to your environment (such as editing config files) to run it. Michael Feathers http://www.artima.com/weblogs/viewpost.jsp?thread=126923

A unit test is a test of behaviour whose success or failure is wholly determined by the correctness of the test and the correctness of the unit under test. Kevlin Henney http://www.theregister.co.uk/2007/07/28/what_are_your_units/

What do we want from unit tests?

When a unit test passes, it shows the code is correct.

When a unit test fails, it shows the code is incorrect.

As a I want So that $Role $Feature $Benefit

As a I want So that developer of the software $Feature $Benefit

As a I want So that developer of the software clean code $Benefit

As a I want So that customer of the software $Feature $Benefit

As a I want So that user of the software $Feature $Benefit

As a I want So that $Role logging $Benefit

As a I want So that developer of the software logging $Benefit

As a I want So that customer of the software logging $Benefit

As a I want So that $Role documentation $Benefit

As a I want So that $Role an agile process $Benefit

As a I want So that As shown by $Role $Feature $Benefit $Evidence

Design an architectural space to accommodate a specific program, experience, or intent.