Metal-In Test-Driven Development_A Dual-Target TDD Approach (NDC TechTown 2024).pdf

FranciscoClimentPrez 262 views 66 slides Sep 16, 2024
Slide 1
Slide 1 of 66
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30
Slide 31
31
Slide 32
32
Slide 33
33
Slide 34
34
Slide 35
35
Slide 36
36
Slide 37
37
Slide 38
38
Slide 39
39
Slide 40
40
Slide 41
41
Slide 42
42
Slide 43
43
Slide 44
44
Slide 45
45
Slide 46
46
Slide 47
47
Slide 48
48
Slide 49
49
Slide 50
50
Slide 51
51
Slide 52
52
Slide 53
53
Slide 54
54
Slide 55
55
Slide 56
56
Slide 57
57
Slide 58
58
Slide 59
59
Slide 60
60
Slide 61
61
Slide 62
62
Slide 63
63
Slide 64
64
Slide 65
65
Slide 66
66

About This Presentation

Metal-In Test-Driven Development: A Dual-Target TDD Approach.
Slides of my practical talk about how to apply TDD to embedded, delivered at NDC TecthTown 2024 conference. It deals with how to expand TDD to cover units of behavior from metal-to-metal, ie, from uC inputs till its outputs.


Slide Content

1
francliment.com
Metal-In Test-Driven Development
A Dual-Target TDD Approach
NDC TechTown 2024 Metal-In TDD: A Dual-Target Approach

2
francliment.com
Me
•Senior R&D Software Developer @ Kongsberg Discovery Spain
•Technical Agile Coach @ francliment.com
NDC TechTown 2024 Metal-In TDD: A Dual-Target Approach

3
francliment.com
Me
•Senior R&D Software Developer @ Kongsberg Discovery Spain
•Technical Agile Coach @ francliment.com
NDC TechTown 2024 Metal-In TDD: A Dual-Target Approach

4
francliment.comNDC TechTown 2024 Metal-In TDD: A Dual-Target Approach
We are hiring!

5
francliment.com
Why this talk?
NDC TechTown 2024 Metal-In TDD: A Dual-Target Approach

6
francliment.com
Unembedding Embedded
Systems with TDD:
Benefits of Going Beyond The
Make-It-Work Phase
A ‘practical’ companion talk
NDC TechTown 2024 Metal-In TDD: A Dual-Target Approach

7
francliment.comNDC TechTown 2024 Metal-In TDD: A Dual-Target Approach
Getting Feedback from the
Metal/Hardware
(an easy example)

8
francliment.com
How could we assure the code does really turn On& Offan LED?
NDC TechTown 2024 Metal-In TDD: A Dual-Target Approach

9
francliment.comNDC TechTown 2024 Metal-In TDD: A Dual-Target Approach
Measure
voltage at
GPIO output
Measuring the
current loop
Use Logic
analyzer
(assuring logic
levels & timing)
Use some kind of
photodetector
How could we assure the code does really turn On& Offan LED?

10
francliment.comNDC TechTown 2024 Metal-In TDD: A Dual-Target Approach
Source: https://www.eetindia.co.in/engineers-in-the-covid-19-era/
Hardware
Bottleneck

11
francliment.comNDC TechTown 2024 Metal-In TDD: A Dual-Target Approach
Main Goal:
-Make possible to create and evolve any embedded codeaspect MUCHfaster and
safer, iteratively and incrementally.
‘Metal-In’ Development Approach

12
francliment.comNDC TechTown 2024 Metal-In TDD: A Dual-Target Approach
How:
Main Goal:
-Continuously looking for ways to get feedback faster.
-Make possible to create and evolve any embedded codeaspect MUCHfaster and
safer, iteratively and incrementally.
‘Metal-In’ Development Approach

13
francliment.comNDC TechTown 2024 Metal-In TDD: A Dual-Target Approach
How:
Main Goal:
-Continuously looking for ways to get feedback faster.
-Treating as much embedded codeas possible as a ‘independent’ subsystem.
-Make possible to create and evolve any embedded codeaspect MUCHfaster and
safer, iteratively and incrementally.
‘Metal-In’ Development Approach

14
francliment.com
How could we assure the code does really turn On& Offan LED?
NDC TechTown 2024 Metal-In TDD: A Dual-Target Approach
Measure
voltage at
GPIO output
Measuring the
current loop
Use Logic
analyzer
(assuring logic
levels &
timing)
Use a camera or
another kind of
photodetector
Embedded code actionable area

15
francliment.comNDC TechTown 2024 Metal-In TDD: A Dual-Target Approach
How:
Main Goal:
-Make possible to create and evolve any embedded codeaspect faster and safer,
iteratively and incrementally.
-Continuously looking for ways to get feedback faster.
-Treating as much embedded codeas possible as a ‘independent’ subsystem.
-Whenever possible, promoteusing cheap SIL (aka software test-doubles) instead of any
kind of HIL.
‘Metal-In’ Development Approach

16
francliment.comNDC TechTown 2024 Metal-In TDD: A Dual-Target Approach
Nothing happens ‘outside’
if it doesn’t change an SFR bit
‘Metal-In’ Development Approach

17
francliment.comNDC TechTown 2024 Metal-In TDD: A Dual-Target Approach
‘Metal-In’ Development Approach
How:
Main Goal:
Business outcome:
-Increasedembedded software development lead time.
-Sustainable development pace.
-Make possible to create and evolve any embedded codeaspect faster and safer,
iteratively and incrementally.
-Continuously looking for ways to get feedback faster.
-Treating as much embedded codeas possible as a ‘independent’ subsystem.
-Whenever possible, promoteusing cheap SIL (aka software test-doubles) instead of any
kind of HIL.

18
francliment.com
1. Make It Work
3. Make It Fast (enough)
2. Make It Right (enough)
https://www.eetindia.co.in/engineers-in-the-covid-19-era/https://www.ee,tindia.co.in/engineers-in-the-covid-19-era/―Kent Beck,Test-Driven Development By Example, 2003
―Butler W. Lampson,’Hints for Computer System Design’, 1983
―Stephen C. Johnson & Brian W. Kernighan,’The C Language and Models for Systems Programming’, 1983
Focused in understanding how to solve the problem, not about
engineering the code right
Fulfill system timing requirements
Evolutive Design & Development
Engineer and craft the code right to make it easy to understand,
maintain and evolve
NDC TechTown 2024 Metal-In TDD: A Dual-Target Approach

19
francliment.com
Red
GreenRefactor
Make It Work
Make It Right
Test code only
KISS : Keep it Simple, Stupid
1
DRY : Don’t Repeat Yourself
1
2
Production code only
1
Simple Design,
SOLID,
Design Patterns…
2
DAMP : Descriptive And
Maintainable Procedures
Evolutive Design & Development: TDD Implementation
NDC TechTown 2024 Metal-In TDD: A Dual-Target Approach

20
francliment.com
Embedded TDD cycle
Embedded software as complete subsystem
(End-to-end == from metal-to metal)
Metal-In Test-Driven Development: A Dual-Target TDD approach
HOSTTARGET
NDC TechTown 2024 Metal-In TDD: A Dual-Target Approach
Source: ‘Test-Driven Development for Embedded C’ book, James W. Grenning
Integration ‘datasheet
interpretation’ tests

21
francliment.comNDC TechTown 2024 Metal-In TDD: A Dual-Target Approach
MCU
FW
The Embedded (“Morse-ish”) Hello world

22
francliment.com
Practical Example (KATA): 4-Level Battery Monitor
•(Current)Microcontroller:MicrochipPIC18F47K40(8-bitbaremetal).
•(Current)Hardwarevariant:4StatusLEDsconnectedtoPORTA’shighnibble.
•Katacontext:
▪FirstinternalMCUusage(noPALimplementationavailableyet).
▪‘BatteryStatusPercentageProvider’moduleisunderdevelopmentbyanother
team.
•Kataobjective:
▪Developahighlydecoupledandportable‘BatteryMonitor’modulefollowing
Metal-InTest-DrivenDevelopment.
NDC TechTown 2024 Metal-In TDD: A Dual-Target Approach

23
francliment.com
Dual-Target Development Environment
NDC TechTown 2024 Metal-In TDD: A Dual-Target Approach
Vendor agnostic tools (Current) Vendor dependant tools
•Lightweightedunittesting&
buildsystemforC.
•Automated test-double
creation.
•Used on HOST set-up
•Related tools: Gcov
•Used on TARGET set-up
•Related tools: XC8 &Microchip Debugger
(MDB)
+
•(Current) Hardware variant
•State-of-the-art
automatedrefactoring
features.

24
francliment.comNDC TechTown 2024 Metal-In TDD: A Dual-Target Approach
MCU
FW
Datasheet:
A written on (silicon)stone contract

25
francliment.com
PIC18F47K40: Commanding GPIOs
Example:CommandA7GPIOstate
▪WritetoPORTAbit7(orLATAbit7)
A7
TRISA7
ANSELA7
Read LATA7
Read PORTA7
Write LATA7
Write PORTA7
NDC TechTown 2024 Metal-In TDD: A Dual-Target Approach

26
francliment.com
PIC18F47K40: Commanding GPIOs
Example:CommandA7GPIOstate
▪WritetoPORTAbit7(orLATAbit7)
A7
TRISA7
ANSELA7
Read LATA7
Read PORTA7
Write LATA7
Write PORTA7
NDC TechTown 2024 Metal-In TDD: A Dual-Target Approach

27
francliment.com
PIC18F47K40: Commanding GPIOs
Example:ReadA7GPIOstate
▪ReadfromPORTAbit7
A7
TRISA7
ANSELA7
Read LATA7
Read PORTA7
Write LATA7
Write PORTA7
NDC TechTown 2024 Metal-In TDD: A Dual-Target Approach

28
francliment.com
PIC18F47K40: Commanding GPIOs
Example:ReadA7GPIOstate
▪ReadfromPORTAbit7
A7
TRISA7
ANSELA7
Read LATA7
Read PORTA7
Write LATA7
Write PORTA7
NDC TechTown 2024 Metal-In TDD: A Dual-Target Approach

29
francliment.comNDC TechTown 2024 Metal-In TDD: A Dual-Target Approach
1

30
francliment.com
PIC18F47K40: GPIO Reset Configuration
NDC TechTown 2024 Metal-In TDD: A Dual-Target Approach

31
francliment.com
1)TRISAbit7toLOW(meansoutputdriverenabled)
ConfiguringA7GPIOasOUTPUT:
PIC18F47K40: GPIO Configuration
PORTA7
TRISA7
ANSELA7
Read LATA7
Read PORTA7
Write LATA7
Write PORTA7
NDC TechTown 2024 Metal-In TDD: A Dual-Target Approach

32
francliment.com
A7
TRISA7
ANSELA7
Read LATA7
Read PORTA7
Write LATA7
Write PORTA7
1)TRISAbit7toLOW(meansoutputdriverenabled)
ConfiguringA7GPIOasOUTPUT:
PIC18F47K40: GPIO Configuration
NDC TechTown 2024 Metal-In TDD: A Dual-Target Approach

33
francliment.com
1)TRISAbit7toLOW(meansoutputdriverenabled)
ConfiguringA7GPIOasOUTPUT:
PIC18F47K40: GPIO Configuration
2)ANSELAbit7toLOW(inputbuffersenabled)
A7
TRISA7
ANSELA7
Read LATA7
Read PORTA7
Write LATA7
Write PORTA7
NDC TechTown 2024 Metal-In TDD: A Dual-Target Approach

34
francliment.com
1)TRISAbit7toLOW(meansoutputdriverenabled)
ConfiguringA7GPIOasOUTPUT:
PIC18F47K40: GPIO Configuration
2)ANSELAbit7toLOW(inputbuffersenabled)
A7
TRISA7
ANSELA7
Read LATA7
Read PORTA7
Write LATA7
Write PORTA7
NDC TechTown 2024 Metal-In TDD: A Dual-Target Approach

35
francliment.comNDC TechTown 2024 Metal-In TDD: A Dual-Target Approach
2

36
francliment.com
Red
GreenRefactor
Make It Work
Make It Right
Test code only
KISS : Keep it Simple, Stupid
1
DRY : Don’t Repeat Yourself
1
2
Production code only
1
Simple Design,
SOLID,
Design Patterns…
2
DAMP : Descriptive And
Maintainable Procedures
Reaching the RED: Assuring the Hardware/Metal works on purpose
NDC TechTown 2024 Metal-In TDD: A Dual-Target Approach

37
francliment.comNDC TechTown 2024 Metal-In TDD: A Dual-Target Approach
3

38
francliment.com
Red
GreenRefactor
Make It Work
Make It Right
Test code only
KISS : Keep it Simple, Stupid
1
DRY : Don’t Repeat Yourself
1
2
Production code only
1
Simple Design,
SOLID,
Design Patterns…
2
DAMP : Descriptive And
Maintainable Procedures
Made-It-Work: ‘Datasheet ContratInterpretation’ acceptance test passed
NDC TechTown 2024 Metal-In TDD: A Dual-Target Approach

39
francliment.com
Red
GreenRefactor
Make It Work
Make It Right
Test code only
KISS : Keep it Simple, Stupid
1
DRY : Don’t Repeat Yourself
1
2
Production code only
1
Simple Design,
SOLID,
Design Patterns…
2
DAMP : Descriptive And
Maintainable Procedures
Make-It-Right: Time to engineer the code right
NDC TechTown 2024 Metal-In TDD: A Dual-Target Approach

40
francliment.comNDC TechTown 2024 Metal-In TDD: A Dual-Target Approach
4

41
francliment.com
Red
GreenRefactor
Make It Work
Make It Right
Next self-checking specification: a complete micro-cycle in action
NDC TechTown 2024 Metal-In TDD: A Dual-Target Approach

42
francliment.comNDC TechTown 2024 Metal-In TDD: A Dual-Target Approach
5

43
francliment.com
OnlywhenrunningonTARGET
TARGET run: Round 1
NDC TechTown 2024 Metal-In TDD: A Dual-Target Approach

44
francliment.com
OnlywhenrunningonTARGET
TARGET run: Round 1
NDC TechTown 2024 Metal-In TDD: A Dual-Target Approach
MCU
FW
MCU
FW

45
francliment.comNDC TechTown 2024 Metal-In TDD: A Dual-Target Approach
6

46
francliment.com
Red
GreenRefactor
Make It Work
Make It Right
Test code only
KISS : Keep it Simple, Stupid
1
DRY : Don’t Repeat Yourself
1
2
Production code only
1
Simple Design,
SOLID,
Design Patterns…
2
DAMP : Descriptive And
Maintainable Procedures
Make-It-Right: Time to engineer the code right
NDC TechTown 2024 Metal-In TDD: A Dual-Target Approach

47
francliment.comNDC TechTown 2024 Metal-In TDD: A Dual-Target Approach
7

48
francliment.com
OnlywhenrunningonTARGET
TARGET run: Round 2. Collaborator
NDC TechTown 2024 Metal-In TDD: A Dual-Target Approach
MCU
FW
MCU
FW

49
francliment.comNDC TechTown 2024 Metal-In TDD: A Dual-Target Approach
8

50
francliment.com
Only when
running on
HOST
HOST run: ‘Tied’ to the running MCU
NDC TechTown 2024 Metal-In TDD: A Dual-Target Approach
MCU
FW
MCU
FW

51
francliment.comNDC TechTown 2024 Metal-In TDD: A Dual-Target Approach
9

52
francliment.com
Only when
running on
HOST
HOST run: ‘Tied’ to the running MCU
NDC TechTown 2024 Metal-In TDD: A Dual-Target Approach
MCU
FW
MCU
FW

53
francliment.com
Current production code:
NDC TechTown 2024 Metal-In TDD: A Dual-Target Approach

54
francliment.comNDC TechTown 2024 Metal-In TDD: A Dual-Target Approach
MCU
FW
First make the change easy,
then make the easy change.

55
francliment.comNDC TechTown 2024 Metal-In TDD: A Dual-Target Approach
10

56
francliment.comNDC TechTown 2024 Metal-In TDD: A Dual-Target Approach
MCU
FW
First make the change easy,
then make the easy change.

57
francliment.comNDC TechTown 2024 Metal-In TDD: A Dual-Target Approach
11

58
francliment.com
HOST run: Production code decoupled from the running MCU
NDC TechTown 2024 Metal-In TDD: A Dual-Target Approach
MCU
FW

59
francliment.com
TARGET run: Production code decoupled from the running MCU
NDC TechTown 2024 Metal-In TDD: A Dual-Target Approach
MCU
FW

60
francliment.comNDC TechTown 2024 Metal-In TDD: A Dual-Target Approach
INCOMPLETENESS

61
francliment.comNDC TechTown 2024 Metal-In TDD: A Dual-Target Approach
BatteryMonitor_Init(unit8_t StatusLED1_GPIOId,
unit8_t StatusLED2 _GPIOId,
unit8_t StatusLED3 _GPIOId,
unit8_t StatusLED4 _GPIOId);

62
francliment.comNDC TechTown 2024 Metal-In TDD: A Dual-Target Approach
PAL_GPIO partially implemented

63
francliment.comNDC TechTown 2024 Metal-In TDD: A Dual-Target Approach
PAL_GPIO partially implemented
Test-Driving it through
test_PAL_GPIO

64
francliment.comNDC TechTown 2024 Metal-In TDD: A Dual-Target Approach
Neo:
Morpheus:
What are you trying to tell me? That I can dodge bullets?
No, Neo. I'm trying to tell you that when you're ready, you won't have to.

65
francliment.comNDC TechTown 2024 Metal-In TDD: A Dual-Target Approach
GRACIAS

66
francliment.comNDC TechTown 2024 Metal-In TDD: A Dual-Target Approach
Neo:
Morpheus:
Q&A