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.