Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Scalability and Hardware at Nomanini

Scalability and Hardware at Nomanini

Scaling TDD, CI and CD for Hardware, Firmware and Software, presented at Scaleconf 2013

Dale Humby

April 18, 2013
Tweet

More Decks by Dale Humby

Other Decks in Technology

Transcript

  1. © Nomanini, 2013
    Scalability and Hardware

    View Slide

  2. © Nomanini, 2013
    @dalehumby
    nomanini.com

    View Slide

  3. © Nomanini, 2013
    million
    700 pa
    85
    $ bn
    60
    $
    Mobile subscribers
    in Africa
    Ave spend by
    mobile subscribers
    Total market
    Source: Pyramid Forecast for AME, McKinsey Global Institute, Lions on the move, Jan 2010

    View Slide

  4. © Nomanini, 2013
    Fast
    Transactions
    Easy to use
    Trusted
    method
    • Fast printing
    • Trusted proof of
    transaction
    • Reliable
    • Simple interface
    1
    2
    3
    Scratch
    cards
    Nomanini
    terminal

    View Slide

  5. © Nomanini, 2013

    View Slide

  6. © Nomanini, 2013
    Pick n
    Pay
    MTN
    Vodacom
    Server on
    GAE
    Cash
    Airtime
    Credit
    Redemption
    Printed
    voucher
    Seller Mobile
    subscriber
    Cash

    View Slide

  7. © Nomanini, 2013

    View Slide

  8. © Nomanini, 2013

    View Slide

  9. © Nomanini, 2013
    Please add a Lock button

    View Slide

  10. © Nomanini, 2013

    View Slide

  11. © Nomanini, 2013
    Planned Dev Test Demo UAT Package Released
    Ready Monitor

    View Slide

  12. © Nomanini, 2013

    View Slide

  13. © Nomanini, 2013
    Cross-functional people

    View Slide

  14. © Nomanini, 2013

    View Slide

  15. © Nomanini, 2013

    View Slide

  16. © Nomanini, 2013

    View Slide

  17. © Nomanini, 2013

    View Slide

  18. © Nomanini, 2013
    8-bit CPU
    16 kB Flash
    2 kB RAM

    View Slide

  19. © Nomanini, 2013
    Keyboard
    LED
    Driver
    State
    Machine
    Logic
    Hardware
    Vd
    d

    View Slide

  20. © Nomanini, 2013
    Keyboard
    LED
    Driver RAM
    State
    Machine
    Logic
    Proxy
    for
    hardware

    View Slide

  21. © Nomanini, 2013
    KeyBoard
    Helper
    LED
    Helper
    Driver
    Mocks RAM
    State
    Machine
    Logic
    Proxy
    for
    hardware

    View Slide

  22. © Nomanini, 2013
    bool TestStateManager_LockLEDOnWhenLockPressed(void)
    {
    // GIVEN Lock LED is off
    LED_TurnLockLEDOff();
    // WHEN Lock button is pressed
    KeyBoardHelper_PressLockButton();
    // AND scan keyboard
    StateMachine_Update();
    // THEN Lock LED should be on
    ASSERT_TRUE_MESSAGE(LED_IsRedLockLEDOn(),
    “Red Lock LED should be on”);
    }

    View Slide

  23. © Nomanini, 2013
    KeyBoard
    Helper
    LED
    Helper
    Driver
    Mocks RAM
    FALSE
    State
    Machine
    Logic Test
    // GIVEN Lock LED is off
    LED_TurnLockLEDOff();

    View Slide

  24. © Nomanini, 2013
    KeyBoard
    Helper
    LED
    Helper
    RAM
    TRUE
    FALSE
    State
    Machine
    Logic Test
    Press
    button
    // WHEN Lock button is pressed
    KeyBoardHelper_PressLockButton();
    Driver
    Mocks

    View Slide

  25. © Nomanini, 2013
    KeyBoard
    Helper
    LED
    Helper
    RAM
    TRUE
    TRUE
    State
    Machine
    Logic Test
    Press
    button
    Update
    // AND scan keyboard
    StateMachine_Update();
    Driver
    Mocks

    View Slide

  26. © Nomanini, 2013
    KeyBoard
    Helper
    LED
    Helper
    RAM
    TRUE
    TRUE
    State
    Machine
    Logic Test
    Press
    button
    Update
    Assert
    // THEN Lock LED should be on
    ASSERT_TRUE_MESSAGE(LED_IsRedLockLEDOn(),
    “Red Lock LED should be on”);
    Driver
    Mocks

    View Slide

  27. © Nomanini, 2013

    View Slide

  28. © Nomanini, 2013
    Running All Tests...
    Hardware Rev 6, rel 2
    Firmware 2623-0d8ab4be2f02
    Running Test Fixture: State Manager Tests (Part A)
    ---------------------
    TestStateManager_ButtonPressTimesOut:PASS
    TestStateManager_LockLEDOnWhenLockPressed:PASS
    ...
    TestStateManager_StaysLockedWhileCharging:FAIL
    11 Tests 1 Failures 1 Ignored
    Test Run FAILED. 10/11 tests passed.
    Terminal output

    View Slide

  29. © Nomanini, 2013
    Jenkins CI

    View Slide

  30. © Nomanini, 2013
    Started by upstream project "Slave-Build" build #361
    run_functional_tests.py -c ci.ini
    tests(INFO): TEST_BLOCK_1.s19 ... ok
    tests(INFO): TEST_BLOCK_2.s19 ... ok
    tests(INFO): TEST_BLOCK_3.s19 ... ok
    tests(INFO): TEST_BLOCK_4.s19 ... ok
    tests(INFO): TEST_BLOCK_5.s19 ... ok
    ...
    tests(INFO): TEST_BLOCK_23.s19 ... ok
    tests(INFO): Test run passed
    Triggering a new build of Upload_to_FTP_for_CI #245
    Notifying upstream projects of job completion
    Finished: SUCCESS
    Console Output

    View Slide

  31. © Nomanini, 2013

    View Slide

  32. © Nomanini, 2013
    Done
    is
    used by customers

    View Slide

  33. © Nomanini, 2013

    View Slide

  34. © Nomanini, 2013

    View Slide

  35. © Nomanini, 2013
    Feature flags

    View Slide

  36. © Nomanini, 2013

    View Slide

  37. © Nomanini, 2013
    Monitoring

    View Slide

  38. © Nomanini, 2013

    View Slide

  39. © Nomanini, 2013
    Measure everything
    Find the bottlenecks
    Fix them methodically
    Start today

    View Slide

  40. © Nomanini, 2013
    Dale Humby
    [email protected]
    @dalehumby

    View Slide