• TesRng • Sales • Product development • UX Design • Hiring and Firing • Investors • Finances • Deployment • Infrastructure • MarkeRng • Office space • CompeRRon • Pricing • Customers … and there is just the three of you.
interacRons Working soHware Customer collaboraRon Responding to change Processes and tools Comprehensive documentaRon Contract negoRaRon Following the plan 12 over While there is value in the items on the right, we value the items on the le@ more.
that exercises another system with the intent of finding bugs” ResulRng automated test suite can be executed with a click of a bu^on, or upon any commit to master
invoke tests in Java • AutomaRcally verify results in Java • Organize tests into suites • Uniform test case representaRon • Light-‐weight & easy to learn • Typical process used: – “Test-‐Driven (test-‐first) development” Beck & Gamma, “Test Infected”
the story) Narrative: As a [role] I want [feature] So that [benefit] Acceptance Criteria: (presented as Scenarios) Scenario 1: Title Given [context] And [some more context]... When [event] Then [outcome] And [another outcome]... Scenario 2: ... Outside-‐in • Business-‐outcomes • Feature set Feature captured as story: • Scope • Acceptance criteria 20 h^p://dannorth.net/whats-‐in-‐a-‐story/
want to withdraw cash from an ATM So that I can get money when the bank is closed Scenario 1: Account has sufficient funds Given the account balance is $100 And the card is valid And the machine contains enough money When the Account Holder requests $20 Then the ATM should dispense $20 And the account balance should be $80 And the card should be returned 21
executable example – Keep it simple! • Different test types target different types of faults – they address different fault models – (Many) small unit tests for specific behavior – Fewer but larger e2e tests purng it all together • Invest in a test harness / infrastructure
– “Do the simplest thing that could possibly work” • Beware of over-‐abstracRon: – “You Ain’t Going to Need It” – YAGNI! • Clean coding should be part of your genes – PracIce clean coding whenever you can.
into debt. A liKle debt speeds development so long as it is paid back promptly with a rewrite… The danger occurs when the debt is not repaid. Every minute spent on not-‐quite-‐right code counts as interest on that debt. EnIre engineering organizaIons can be brought to a stand-‐sIll under the debt load of an unconsolidated implementaIon, object-‐oriented or otherwise.” 33 Ward Cunningham, OOPSLA 1992