• Like
  • Save
Software Quality via Unit Testing
Upcoming SlideShare
Loading in...5
×
 

Software Quality via Unit Testing

on

  • 591 views

Software quality is critical to consistently and continually delivering new features to our users. This talk covers the importance of software quality and how to deliver it via unit testing, Test ...

Software quality is critical to consistently and continually delivering new features to our users. This talk covers the importance of software quality and how to deliver it via unit testing, Test Driven Development and clean code in general.
This is the deck from a talk I gave at Desert Code Camp 2013.

Statistics

Views

Total Views
591
Views on SlideShare
591
Embed Views
0

Actions

Likes
0
Downloads
6
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Software Quality via Unit Testing Software Quality via Unit Testing Presentation Transcript

    • SOFTWARE QUALITYVIA UNIT TESTINGShaun AbramApril 20, 2013Email: Shaun@Abram.com Blog: shaunabram.comTwitter: @shaunabram LinkedIn: linkedin.com/in/sabram These slides available at shaunabram.com/dcc13
    • 2Software Quality via Unit TestingThe value of software designAutomated testingClean code Goal: Deliver value to our users
    • 3Software Quality via Unit TestingThe value of software design
    • 4Why should we care about „good‟ design in software? We need less focus on quality so we can add more features Do we really need unit tests? Refactoring doesn‟t change what the code does, so why bother? How do you respond?
    • 5Why should we care about „good‟ design in software?Take the moral high ground?
    • 6Why should we care about „good‟ design in software? We need to have economic reasons Remember: Our goal is to deliver value to our users
    • 7What is Quality in software anyway? Intuitive GUI Few defects Modular Design
    • 8What is Quality in software anyway? Intuitive GUI Few defects Visible to user Modular Design Transparent to user
    • 9Fowler‟s Design Stamina Hypothesis
    • 10Technical debtThe eventual consequences of poor design in a codebase
    • 11Technical debtThe eventual consequences of poor design in a codebaseInterest payments can come in the form of:1. Bugs2. Just understanding what the heck the current code does3. Refactoring4. Completing unfinished work
    • 12Technical debtPay down?Accept? But, don‟t build bad on top of bad…
    • Design StaminaDesign stamina to continually and consistently deliver functionality faster and with less bugs to our users Business value to our clients
    • 14Clean code that works• The value of software design• Automated testing
    • 15Unit testingA unit test is a piece of code that executes a specificfunctionality („unit‟) in the code, and• Confirms the behavior or result is as expected.• Determines if code is „fit for use‟Example…
    • 1
    • • 1
    • 1
    • 1
    • 2
    • 2
    • 2
    • 2
    • 25What unit tests provideUnit tests don‟t necessarily help find bugs.Instead, unit tests: • Drive design
    • 26What unit tests provideUnit tests don‟t necessarily help find bugs.Instead, unit tests: • Drive design • The tests act as the first user of the code, making you think about: • What should this code do • Border conditions (0, null, -ve, too big) • Force you to use good design: • Short, focused methods • Dependency Injection • Writing a class is different from using a class!
    • 27What unit tests provideUnit tests don‟t necessarily help find bugs.Instead, unit tests: • Drive design • Act as safety buffers by finding regression bugs • Provide documentation
    • 28What unit tests provideUnit tests don‟t necessarily help find bugs.Instead, unit tests: • Drive design • Act as safety buffers by finding regression bugs • Provide documentationCan also be used on legacy codebases
    • 29Unit testing limitations1. Can not prove the absence of bugs2. Lot‟s of code (x3-5)3. Some things difficult to test
    • 30So should we unit test?Not only should we unit test,We should let unit tests drive development and design… Test Driven Development (TDD)
    • 31Test Driven Development (TDD)
    • 32Test Driven Development (TDD)
    • 33Test Driven Development (TDD)
    • 34Test Driven Development (TDD) Red - Green – Refactor: the TDD Mantra No new functionality without a failing test No refactoring without passing tests
    • 35Test Driven Development (TDD) ExampleWrite a simple StringCalculator class with a method Integer add(String numbers)A String of comma separated numbers should return theirsum e.g. “1,2,10” should return 13.A single number String should return that number e.g. “3”should return 3An empty String should return 0For brevity, our test will focus on valid inputs.
    • 36Test Driven Development (TDD) ExampleWrite a simple StringCalculator class with a method Integer add(String numbers) Code demo…
    • 3
    • Refactor?
    • Refactor?
    • These tests act like the originaldeveloper looking over yourshoulder and advising you, longafter that developer has left…
    • 58Test Driven Development (TDD) Red - Green – Refactor: the TDD Mantra No new functionality without a failing test No refactoring without passing tests
    • 59Clean code that works• The value of software design• Automated testing
    • 60Clean code that works• The value of software design• Automated testing• Clean code
    • 61• Feedback…• XKCD
    • 6
    • 63Code SmellsWhat are code smells? “Certain structures in code suggest (sometimes they scream for) the possibility of refactoring.” Martin Fowler. Refactoring: Improving the design of existing code
    • 64Code Smells• Duplicated code• Long switch/if statements• Long methodsEven one line methods can be OK:if ( (account != null) && ( (account.getBalance() > 0) || (!account.overdraftLimitReached()) ) { …}if (account.hasFundsAvailable()) { …}
    • 65Code Smells• Duplicated code• Long switch/if statements• Long methods• Poor method names int process(int id) { //bad! int calculateAccountBalance(int accountID) { //better
    • 66Code Smells• Duplicated code• Long switch/if statements• Long methods• Poor method names• In-line comments• Large classes • Symptoms • Too many methods (>10 public?) • Too many instance variables – is every instance variable used in every method? • Solutions • Eliminate redundancy / duplicated code • Extract new/sub classes
    • 67Clear Code Make the intent of your code clear Code should be clear, concise and easy to understandHow many times will the code you are about to write be read? Studies show poor readability correlates strongly with defect density1 Avoid attrition & complete re-writes 1"Learning a Metric for Code Readability," IEEE Transactions on Software Engineering, 09 Nov. 2009. IEEE computer Society Digital Library. IEEE Computer Society
    • 68Summary• Good design gives us the stamina to continually and consistently deliver business value• Unit tests are an integral part of good design; TDD is even better• Good design can also simply be cleaner code; Aggressively refactor to achieve this! Final thought: Every time you are in a piece of code, just make one small improvement!
    • 69 Recommended ReadingTest Driven Development Growing Object-OrientedKent Beck Software, Guided by Tests Freeman & PryceRefactoring: Improving the Design Effective Unit Testingof Existing Code Lasse KoskelaMartin Fowler, Kent Beck et. al.
    • Questions?All slides available at: shaunabram.com/dcc13Email: Shaun@Abram.com Blog: shaunabram.comTwitter: @shaunabram LinkedIn: linkedin.com/in/sabram 7