test driven development for invisible hardware
play

Test driven development for Invisible Hardware Samuel Gaist - PowerPoint PPT Presentation

Test driven development for Invisible Hardware Samuel Gaist Edeltech Ltd Switzerland jeudi, 9 octobre 14 Samuel Gaist Software Development Engineer Partner at Edeltech Ltd Developer at IDIAP Research Institute Qt Experience User


  1. Test driven development for Invisible Hardware Samuel Gaist Edeltech Ltd Switzerland jeudi, 9 octobre 14

  2. Samuel Gaist Software Development Engineer • Partner at Edeltech Ltd • Developer at IDIAP Research Institute Qt Experience • User since Qt 3.2 • Contributor for ~ 2 years (QtCore, QtGui, QtMacExtras) • 10’000+ posts in Qt Forum 2 jeudi, 9 octobre 14

  3. Outline 1. AgiScan, a fi lm scanning application 2. Invisible Devices 3. Test Driven Development with Invisible Devices 4. Demo 5. Wrap Up 6. Q/A jeudi, 9 octobre 14

  4. 1. AgiScan, a fi lm scanning application USB Embedded App Qt Desktop App Audio/Video Proprietary Mac OS / Windows jeudi, 9 octobre 14

  5. 1. AgiScan, a fi lm scanning application jeudi, 9 octobre 14

  6. 1. AgiScan, a fi lm scanning application The Application (AgiScan) requires the device (Film scanner). • to setup the GUI since the App supports di ff erent scanner models with di ff erent hardware options. • to setup the audio and video capture subsystems since each scanner model produces di ff erent resolutions, image formats, etc… jeudi, 9 octobre 14

  7. 2. Invisible Devices • It can’t be moved next to your desk. 200k € because it’s too big or heavy 200kg • It doesn’t exist yet. next week, promised • It exists but you can’t have it. because someone needs it or it’s too expensive • The only one we have has been sold yesterday. we’ll build you a new one if we get an order… jeudi, 9 octobre 14

  8. 2. Invisible Devices I can’t have one = INVISIBLE So how do I develop my Application ? jeudi, 9 octobre 14

  9. 3. Test Driven Development with Invisible Devices Write a Mock Object to mimic the behaviour of the Invisible Device in controlled ways. jeudi, 9 octobre 14

  10. 3. Test Driven Development with Invisible Devices Use an Adapter Object to communicate with the device when it is available, or with the Mock Object. jeudi, 9 octobre 14

  11. 3. Test Driven Development with Invisible Devices Apply TDD principles because we want to sleep well. jeudi, 9 octobre 14

  12. 3. Test Driven Development with Invisible Devices (Re-)Write a Test PASS Run Test FAIL TDD Friendly Reminder Write Code FAIL Run all Tests PASS Refactor / Clean Code http://en.wikipedia.org/wiki/Test-driven_development jeudi, 9 octobre 14

  13. 3. Test Driven Development with Invisible Devices TDD Bene fi ts 1. Know how your code works. 2. Know that your code works. 3. Help other developers understand your code. 4. Know when you break something. jeudi, 9 octobre 14

  14. 3. Test Driven Development with Invisible Devices Levels of testing UNIT TEST Each class, e.g. the Mock Object FUNCTIONAL TEST Several classes, e.g. Mock Object + Adapter SYSTEM TEST Application: e.g. Scenario based user interaction, Squish 14 jeudi, 9 octobre 14

  15. 3. Test Driven Development with Invisible Devices Project Architecture 15 jeudi, 9 octobre 14

  16. 3. Test Driven Development with Invisible Devices Using QTest #include <QtTest> #include <QCoreApplication> #include "mycoolclass.h" class UnitTestMyCoolClass : public QObject { Q_OBJECT private Q_SLOTS: void testCase1(); }; QTEST_MAIN(UnitTestMyCoolClass); #include “tst_UnitTestMyCoolClass.moc” 16 jeudi, 9 octobre 14

  17. 3. Test Driven Development with Invisible Devices Let’s write a unit test. 17 jeudi, 9 octobre 14

  18. 3. Test Driven Development with Invisible Devices Know your Device 1. What interface does it provide ? Serial Port, Network, … 2. What is the communication protocol ? Commands, Responses To write the Mock Object. 18 jeudi, 9 octobre 14

  19. 3. Test Driven Development with Invisible Devices The Mock Object #include <QObject> class MockDevice : public QIODevice { Q_OBJECT public: MockDevice(); protected: qint64 readData (char *data, qint64 maxlen) Q_DECL_OVERRIDE; qint64 writeData (const char *data, qint64 len) Q_DECL_OVERRIDE; }; 19 jeudi, 9 octobre 14

  20. 3. Test Driven Development with Invisible Devices De fi ne the Controller API 1. How will the application interact with the controller ? Signal/Slots, Events, other ? 2. Level of abstraction Map the “device lingo” to sensible methods / properties. To write the Adapter Object. 20 jeudi, 9 octobre 14

  21. 3. Test Driven Development with Invisible Devices The Adapter Object #include <QObject> class Controller : public QObject { Q_OBJECT QIODevice public: QBu ff er, QSocket, QSerialPort… Controller(QObject *parent = 0); void setDevice(QIODevice *device); public Q_SLOTS: void doSomething(); void doSomethingElse(); private: QIODevice *_device; }; void Controller::doSomething() { 21 _device->write(DoSomethingCommand); } jeudi, 9 octobre 14

  22. 3. Test Driven Development with Invisible Devices Let’s write a controller and test it. 22 jeudi, 9 octobre 14

  23. 3. Test Driven Development with Invisible Devices Detect the actual device Using an enumerator (Bonjour, QSerialPortInfo) Write a Factory to return the Actual Device or the Mock Device. and pass it to your Controller using ::setDevice(QIODevice*) 23 jeudi, 9 octobre 14

  24. 4. Demo Demo 24 jeudi, 9 octobre 14

  25. 5. Wrap up • Using a Mock Device we can develop an application controlling a device without the actual hardware. • The Tests ensure that the Mock Device and the Application work correctly, and allow developers to reproduce bugs occurring with the actual hardware. • The Mock Device can be used to create a Demo Mode. 25 jeudi, 9 octobre 14

  26. Q/A Questions ? 26 jeudi, 9 octobre 14

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend