56
Test Driven Development of Embedded Systems Marcin Czenko Martijn Gelens Wim van de Goor Agile Testing Days, 14 october 2009, Berlin

Agile Testing Days

Embed Size (px)

DESCRIPTION

This is the presentation we gave in 2009 during Agile Testing Days in Berlin. Even though it is already more than 2 years old, many things we said during the talk are very valid today. Some things did not change at all.

Citation preview

Page 1: Agile Testing Days

Test Driven Development of

Embedded SystemsMarcin CzenkoMartijn Gelens

Wim van de Goor

Agile Testing Days, 14 october 2009, Berlin

Page 2: Agile Testing Days

• Test Consultancy at VIIQ.

• Agile Test Team leader at Philips CareServant.

• 10 years of experience in the Testing Field (7 years V-Model, 3 years Agile).

• Some experience with coding.

• Bachelor degree in Information Technics.

• Married to Jeanne, has a dog (Sasha) and 2 cats.

Martijn Gelens

Page 3: Agile Testing Days

• Currently, Philips Software Engineering Services, MiPlaza, Software Designer.

• Ph.D. in Computer Security from University of Twente, Enschede, The Netherlands.

• M.Sc. in Software Engineering at Warsaw University of Technology.

• 7 years of experience as an embedded software developer (SterKom (Poland) and freelancer).

• Modelling Languages: my master thesis + one year internship at Institute National des Télécomunications (INT), Evry, Cedex, France.

• Agile, test-invected since one year.

• Married to Beata and also has two cats (Mufasa and Ursus).

Marcin Czenko, Ph.D.

Page 4: Agile Testing Days

Wim van de Goor• Agile Software Team Leader at Philips Software

Engineering Services, Philips MiPlaza.

• 8 years experience with eXtreme Programming.

• Agile mentor and Coach.

• Advised us on Agile Principles.

Page 5: Agile Testing Days

Contents• Agile Testing

What Do we want to do?• Constraints

What can we do?• Agile Embedded Testing

How do we test?• Conclusions

Page 6: Agile Testing Days

What do we want ?

• Prerequisites • Test Strategy • Acceptance Criteria • Continuous Integration • Testing

Page 7: Agile Testing Days

Prerequisites

• Testing is integrated in the team's Way of Working.

• Acceptance Criteria are defined, discussed and explored beforehand.

• Test Driven Development.

• Continuous Build and Integration.

• Testing is structured (specify, verify, report).

Page 8: Agile Testing Days

Test Strategy

• Product risks and mitigation.

• Tester-role.

• Definition of Done.

• Quality gates.

• Testing is structured (specify, verify, report).

Page 9: Agile Testing Days

Test Strategy (cont.)

• Deliverables from outside (also HW).

• Issue procedure and attendees.

• Reporting (test reports, PMI, ...).

• Emergency scenarios.

Page 10: Agile Testing Days

Test Strategy (cont.)

The test strategy is build around the iterations and hardware deliveries.

Page 11: Agile Testing Days

Acceptance Criteria• Defined upfront

• Based upon Quality Attributes; functionality, usability, efficiency, maintainability, reliability, portability, etc...

• Definition of Done:Tested and accepted, Code reviewed, documents written, yellow sticker on the note, ...

• Quality Gate:Acceptance tests passed, smoke test passed, ...

Page 12: Agile Testing Days

Continuous Integration

Automate your:

• Build procedure.

• Release package creation.

• Deployment to simulator.

• Deployment to Board Support Package.

Page 13: Agile Testing Days

Continuous Integration

Page 14: Agile Testing Days

Continuous Integration

Page 15: Agile Testing Days

Test Driven Development

• Means: “Write unit tests before code”.

• Integrate with your Continuous Integration environment.

• Automate the Acceptance Tests.

Page 16: Agile Testing Days

This is your framework

Page 17: Agile Testing Days

Constraints

Page 18: Agile Testing Days

Light to HeavyLight Heavy

Page 19: Agile Testing Days

Light• No cross-compilation required.

• Usually mainstream OS (Windows/Linux).

• Wide range of testing/mocking frameworks available.

• Standard hardware - no or very limited hardware level programming required.

• No dependence on a particular vendor (supplier).

Page 20: Agile Testing Days

Heavy

• Small memory (no OS), limited performance, limited debugging possibilities.

• Limited cross–compilers: often only C, and Embedded (Extended) C++ available.

• Vendor specific.

• Difficult to find a testing/mocking framework.

• Custom hardware (ramp-up).

Page 21: Agile Testing Days

Hardware design challenges

Page 22: Agile Testing Days

Using Evaluation Boards

Page 23: Agile Testing Days

Getting There (1)

Page 24: Agile Testing Days

Getting There (2)

Page 25: Agile Testing Days

Getting There (3)

Page 26: Agile Testing Days

Getting There (4)

Page 27: Agile Testing Days

Getting There (5)

Page 28: Agile Testing Days

Getting There (6)

Page 29: Agile Testing Days

Getting There (7)

Page 30: Agile Testing Days

Development Board

• Selecting the right board can be challenging (expensive ?).

• Chip selection driven by the availability of the right board.

• The board selection driven by the availability of the BSP and OS.

Page 31: Agile Testing Days

Is there a more lean solution ?

Page 32: Agile Testing Days

Are we lean ?

Page 33: Agile Testing Days

Queue 1

Page 34: Agile Testing Days

Queue 2

Page 35: Agile Testing Days

Queue 3

Page 36: Agile Testing Days

The effect on Agile Principles

• Longer ramp-up time.

• Resistance to modify hardware (introduces up-front design).

• Limited response to changes.

• Higher risk.

Page 37: Agile Testing Days

How to proceed ?

• Often we cannot remove queues & batches in HW development (are we going to be able doing so in any predictable future ?).

• Reducing the queue size is also often not an option.

• Is there a lean solution ?

Page 38: Agile Testing Days

Getting There (7)

Page 39: Agile Testing Days

Fix in between...

Page 40: Agile Testing Days

Fix in between...

Page 41: Agile Testing Days

How do we test ?

Our experiences

Page 42: Agile Testing Days

What do we need

• Testing Strategy.

• Hardware to work with.

• Tool chain (compiler).

• Testing Framework.

• Mocking Framework.

Page 43: Agile Testing Days

Compiler

ISO C++

ANSI C

Page 44: Agile Testing Days

Testing Framework

Keep it simple !

Do-It-Yourself !

Page 45: Agile Testing Days

Testing Framework (C)

• Many frameworks are simple ports of the frameworks for PC-based development.

• Increased stack consumption.

• Dynamic memory allocation.

Page 46: Agile Testing Days

CMock

• Easy to understand. Easy to customise. Lightweight.

• Comes with Supporting Ruby-based Mocking Framework.

• Ready For “Heavy Embedded” - tests executed in batches.

Page 47: Agile Testing Days

Testing Frameworks (C++)• Run-Time Type

Information (RTTI).

• Exceptions.

• ISO C++ compiler needed.

• Gnu or Microsoft are preferred.

Page 48: Agile Testing Days

Testing Frameworks (C++)

• We could not find a framework that compiles on GreenHills and WindRiver C++ compilers (forget IAR Extended Embedded C++).

• It was cheaper and more effective to come with your own simple testing frameworks.

Page 49: Agile Testing Days

yaffut

• Our choice for unit testing in C++.

• Just one header file.

• Not meant for embedded: needs RTTI, and C++ exceptions.

• Easy to understand and customise. We made an RTTI and Exception-free version.

Page 50: Agile Testing Days

Mocking

• We did not succeed in using existing frameworks. Our best candidate GoogleMock does not even compile and it is quite complex.

• Does it mean that no one is doing TDD on embedded ? Probably not.

Page 51: Agile Testing Days

Mocking - way to go

• Think of your own framework.

• We needed three “evenings” to create our own mocking framework.

Page 52: Agile Testing Days

Educate your customer

Page 53: Agile Testing Days

Educate your customer

Page 54: Agile Testing Days

Conclusions• Agile in Heavy Embedded is a challenge: we cannot change it, but

we can understand it and try to reduce its impact on agile software development.

• The tester should be experienced in working with hardware, perhaps even more than a developer.

• There is no one way: what you can do depends on the constraints you have (e.g. light to heavy).

• Hardware development is far from being lean - and there is not that much we can change.

• Development and support tools are far behind the needs of the agile teams.

• Let your agile testing framework grow with your code.

Page 55: Agile Testing Days

Conclusions• Agile in Heavy Embedded is a challenge: we cannot change it, but

we can understand it and try to reduce its impact on agile software development.

• The tester should be experienced in working with hardware, perhaps even more than a developer.

• There is no one way: what you can do depends on the constraints you have (e.g. light to heavy).

• Hardware development is far from being lean - and there is not that much we can change.

• Development and support tools are far behind the needs of the agile teams.

• Let your agile testing framework grow with your code.

Be agile.

Page 56: Agile Testing Days

Questions