33
Automated Tes,ng for Embedded Products Michael Corr June 8, 2016 (C) 2016 - Michael Corr 1 [email protected] www.linkedin.com/in/michaelgcorr v1

Automated Tes,ng for Embedded Products · Automated Tes,ng for Embedded Products Michael Corr June 8 ... Total Cost $60 $760 +$700 ... Need to find the right balance v1 (C) 2016

Embed Size (px)

Citation preview

AutomatedTes,ngforEmbeddedProducts

MichaelCorrJune8,2016

(C)2016-MichaelCorr 1

[email protected]/in/michaelgcorr

v1

HardwareisHard•  Tes,ngforhardwareproductsishard

•  Toomanyvariablestocontrol•  HardwareplaMorm,environmentalcondi,ons,mechanicalinterfaces,

sensorvalues,etc.

•  Rigorous(automated)tes,ngbecomesin,mida,ngforhardwareproductscausingteamstooOenprocras,nate,resul,nginminimaltes,ngperformed

•  Inaddi,on,tes,ngisoOenanaOerthought,andcompaniesdon’thireaformaltes,ngteamearlyenough

•  Tes,ngismostcommonlydonemanuallysinceinves,nginautomatedtoolscanbeoverwhelming

(C)2016-MichaelCorr 2v1

AddingInsulttoInjury•  Webandmobileproductsaremucheasiertoautomate

tes,ng

•  Therewasanexplosionofinnova,oninthe2000’sintoolsfordevelopmentandtestforthewebandmobilemarkets

•  Hardwaretoolswereneglected-bothdevelopmentandtes,ngtools

(C)2016-MichaelCorr 3v1

HardwareisBack,Baby!•  But,inearly2010’shardwarebecamemoreaccessible

•  Anincreasednumberofyoungengineersbecameinterestedinembeddedproducts

•  Withthisresurgencecamethementalityofusingmoderndevelopmenttoolsandbestprac,ces•  FileVersionControl•  Con,nuousIntegra,on(CI)•  Automatedtes,ng

(C)2016-MichaelCorr 4v1

NoWalkInThePark•  Automatedtes,ngiss,lldifficultforhardwareand

embeddedproducts

•  Mul,pledisparateengineeringteamsworkingonthefinalsolu,on,makescollabora,onandcoordina,ondifficult•  Electrical,Mechanical,Firmware

•  ThehardwareplaMormisoOenbeingdevelopedsimultaneouslytothefirmware–leavingnofirmgroundtostandon

•  Infrastructuretocontrolandautomatevariablesisexpensiveanddifficulttoimplement,ornon-existent

(C)2016-MichaelCorr 5v1

WhyBother?•  Asastartup,,meandmoneyarepreciousresources

•  YourgoalsaretoconstantlyminimizewasteandincreaseROI

•  Latenightstroubleshoo,ngortryingtore-createanissue-wastesresources

•  Fieldtripstocustomersitestotroubleshootissues-wastesresources

•  Notcatchingahardwarebugbeforegoingintoproduc,on-wastes(serious)resources

•  Usingemployeestoimplementrote,repeatabletasks-wastesresources

(C)2016-MichaelCorr 6v1

TheRealWorld

(C)2016-MichaelCorr 7

Step Task Who Salary Time(Hrs) Cost

1 Developerwritesautomatedtests Engineer/OriginalAuthor $120k 1 $60

2 (Regression)Testisrunevery,mecodeiscommiied

BuildServer N/A N/A Free

WriteAutomatedTestAlongWithFeatureCode

v1

TheRealWorld

(C)2016-MichaelCorr 8

Step Task Who Salary Time(Hrs) Cost

1 Developerwritesautomatedtests Engineer/OriginalAuthor $120k 1 $60

2 (Regression)Testisrunevery,mecodeiscommiied

BuildServer N/A N/A Free

Step Task Who Salary Time(Hrs) Cost

1 Email/Phonesupportwithcustomer CustomerSupportRep $60k 1 $30

2 RecreateCustomer’sEnvironment Technician $60k 1 $30

3 ReviewOriginalCode Engineer/Not-OriginalAuthor $120k 2 $120

4 RecreateIssueandSolve Engineer/Not-OriginalAuthor $120k 2 $120

5 Writeautomatedtests Engineer/Not-OriginalAuthor $120k 1 $60

6 TestPatchRelease TestEngineer $80k 8 $320

7 (Regression)Testisrunevery,mecodeiscommiied

BuildServer N/A N/A Free

8 ReleasetoCustomer ReleaseEngineer $80k 2 $80

WriteAutomatedTestAlongWithFeatureCode

CustomerDiscoversBug

v1

TheRealWorld

(C)2016-MichaelCorr 9

WriteTestwithCode CustomerFindsBug Delta

TotalTime 1hour 17hours +16hours

TotalCost $60 $760 +$700

TeamSizeU@lized 1employee 5employees +4employees

SummaryComparison

•  Ifyouhave10incidentslikethisinayear,youarewas,ng•  $7konlaborcosts•  160hours(1month)ofcalendar,me

•  Thisapproachscaleslinearlywithnumberofincidents

•  So,whynotspend$7kontestequipmentandtools,instead?It’samuchbeierROI

v1

HiddenFees•  Writethetestsconcurrentlyatthe,meofdevelopment,notattheendof

thesprint/releasecycle

•  It’smuchmoreefficientfortheoriginalauthorofproduc,oncodetowritetestsatthe,meoffeaturedevelopment•  "Whilethesuckeriscutopen”•  Codeiss,ll“intheirhead”•  Morelikelytonottakeshortcuts(lessrushed)•  Morelikelytowritemoretestsresul,nginbeiertestcoverage

•  Atestthattakes1hourtowritewhileproduc,oncodeisfreshandinthedeveloper’sheadcantake1.5to2hourstowritejustaweekortwolaterbecausetheauthorhastoremember/reviewfeature’sdetails

(C)2016-MichaelCorr 10

FeatureA FeatureB FeatureC

TestA

TestB TestC

FeatureA

TestA

TestBFeatureB TestCFeatureC

Post:

Concurrent:v1

I’mABeliever!•  Startwithastrongfounda,onof3rdpartyproducts

•  Con,nuousIntegra,onServer(e.g.Jenkins,TeamCity,CruiseControl)•  Exis,ngandpopularxUnitbasedtesttools•  TestRepor,ngtools(e.g.TestRail)

•  Removeallfric,onfromwri,ngautomatedtests.•  Talktoyourdevelopers

•  Ifwri,ngtestshasfric,on,developerswilltakeshortcutsandfollowpathofleastresistance

(C)2016-MichaelCorr 11v1

StartWithPolicy1.  Alltests(automatedandmanual)arerevisioncontrolled

(svn,git)

2.  Don’tmergecodeunlesstestsarewriienandpeerreviewed

3.  Createtesttemplatesformanualtests,followingtheautomatedxUnitmodel(Setup,Test,Teardown)

4.  Spend10%ofeverysprint/releaseautoma,ngtheexis,ngmanualtests

5.  Promoteacompanyculturewhere“Development”==“Produc,onCode”+“TestCode”

(C)2016-MichaelCorr 12v1

I’mDownWithTDD•  TestDrivenDevelopmentisthemostefficientwayto

develop*

•  Completelypairstestcodewithdevelopmentcode

•  Greatercertaintyof100%codecoverage

•  Ensuresyourproduc,oncodeisDesignedForTest(DFT)

•  Notforthefaintofheart*AddPair-Programmingandyourefficiencyimprovesevenmore

(C)2016-MichaelCorr 13v1

ShowMeTheMoney•  Exercise: Assignacostvaluetorunatest•  Goal: Con,nuouslyiterateandreducethecostofatest

(C)2016-MichaelCorr 14

Variable Value Cost

TestExecu@on 1.  Manual2.  Semi-Automated3.  Automated

$$$$$$

Testenvironmentsetup 1.  EveryTime2.  Once

$$$$

Tes@ngLoca@on 1.  CustomerSite2.  RemoteTestLab3.  In-HouseTestLab4.  Engineer’sDesk/BuildServer

$$$$$$$$$$

Testrepeatability 1.  AllVariablesNotUnderControl2.  AllVariables100%theSame

$$$$

TestResultEvalua@on 1.  Manual2.  Automated

$$$$

v1

Example•  Product: CommercialUAV(quadcopter)•  Test: AssertfirmwarecontrolalgorithmholdsUAV

posi,onundervariouswindcondi,ons

(C)2016-MichaelCorr 15

Variable (1)OutintheField (2)WindTunnel (3)Simulated

TestExecu@on Manual:$$$

Semi-Automated:$$

Automated:$

Testenvironmentsetup

EveryTime:$$$

EveryTime:$$$

Once:$

Tes@ngLoca@on Mul,pleRemoteSites:$$$$

In-HouseTestLab:$$

BuildServer:$

Testrepeatability NotUnderControl:$$$

AllVariablestheSame:$

AllVariablestheSame:$

TestResultInterpreta@on

Manual:$$$

Manual:$$$

Automated:$

Totals Time:2daysPeople:2pilotsFrequency:EveryReleaseCost:$16

Time:1dayPeople:1TestEngineerFrequency:EverySprintCost:$11

Time:10minPeople:0Frequency:EveryBuildCost:$5

v1

Example•  Product: CommercialUAV(quadcopter)•  Test: AssertfirmwarecontrolalgorithmholdsUAV

posi,onundervariouswindcondi,ons

(C)2016-MichaelCorr 16

Variable (1)OutintheField (2)WindTunnel (3)Simulated

TestExecu@on Manual:$$$

Semi-Automated:$$

Automated:$

Testenvironmentsetup

EveryTime:$$$

EveryTime:$$$

Once:$

Tes@ngLoca@on Mul,pleRemoteSites:$$$$

In-HouseTestLab:$$

BuildServer:$

Testrepeatability NotUnderControl:$$$

AllVariablestheSame:$

AllVariablestheSame:$

TestResultInterpreta@on

Manual:$$$

Manual:$$$

Automated:$

Totals Time:2daysPeople:2pilotsFrequency:EveryReleaseCost:$16

Time:1dayPeople:1TestEngineerFrequency:EverySprintCost:$11

Time:10minPeople:0Frequency:EveryBuildCost:$5

v1

Example•  Product: CommercialUAV(quadcopter)•  Test: AssertfirmwarecontrolalgorithmholdsUAV

posi,onundervariouswindcondi,ons

(C)2016-MichaelCorr 17

Variable (1)OutintheField (2)WindTunnel (3)Simulated

TestExecu@on Manual:$$$

Semi-Automated:$$

Automated:$

Testenvironmentsetup

EveryTime:$$$

EveryTime:$$$

Once:$

Tes@ngLoca@on Mul,pleRemoteSites:$$$$

In-HouseTestLab:$$

BuildServer:$

Testrepeatability NotUnderControl:$$$

AllVariablestheSame:$

AllVariablestheSame:$

TestResultInterpreta@on

Manual:$$$

Manual:$$$

Automated:$

Totals Time:2daysPeople:2pilotsFrequency:EveryReleaseCost:$16

Time:1dayPeople:1TestEngineerFrequency:EverySprintCost:$11

Time:10minPeople:0Frequency:EveryBuildCost:$5

v1

ToAutomateorNotToAutomate•  There’sliiledebate:100%Automatedtestsarepreferredto

Manuallyruntests

•  But,ittakes,meandmoneytosetupandvalidateautomatedtests

•  Canspend$1M’sinves,ngincompleteautoma,ontools,or$1k’sinmanualtes,ng.Needtofindtherightbalance

(C)2016-MichaelCorr 18v1

Simulate,Simulate,Simulate•  Architectyourcodetoruncross-plaMorm

•  RequiresaproperHALdesign•  It’sgoodprac,ceanyway,forfutureexpansiontonewplaMorms

•  Runapplica,onlayercodeontestserverplaMorm•  Invest,mewri,ngstubsandmocks:ExcellentROI

(C)2016-MichaelCorr 19

Applica,onCode

APIs

HardwareAbstrac,onLayer(HAL)

Drivers

TargetHardwarePlaMorm

Applica,onCode

APIs

HardwareAbstrac,onLayer(HAL)

StubsandMocks

TestHardwarePlaMorm

=

TargetProduct TestPla9orm

v1

StubsandMocks•  Veryimportant

•  StartwithGPIO

•  Builduptoexternals,muli(e.g.sensorvalues)

•  Use3rdpartytools;don’tcreateyourown

•  SeeWebformoredetailsonwri,ngStubs,Mocks,Fakes,etc.

(C)2016-MichaelCorr 20v1

NothingBeatsTheRealThing•  Therewillalwaysbeaneedtos,llruntestsonyourhardware

plaMorm

•  NeedtorunontargetplaMorminordertotest:•  Realworld,ming•  ISRs•  RAM,Stack,Heapu,liza,on•  etc.

•  BoiomLine:Sometestsarejusttoodifficultorexpensivetoautomate

(C)2016-MichaelCorr 21v1

BringOnTheHard•  RuncodeontargetplaMormthroughinterfacetobuildserver

•  UsesoOwarecontrolledexternaltoolstosimulateenvironments,muli

•  Requiresbuilding:•  Customtools•  APIstotalktoyourproduct•  Interfacesbetweenyourfounda,on3rdpartytesttoolsandyour

specificproduct

(C)2016-MichaelCorr 22

github CI

Ruby:raketestAPI:RPCfunc,ons Target

PlaMorm

UART/USB

gcc:compile

v1

ForRealz•  Automatedtestfixturetosimulateenvironments,muli

(C)2016-MichaelCorr 23 It’snotalwayspre=y,butitcanbebeau@ful

v1

ForRealz•  Automatedtestfixturetosimulateenvironments,muli

(C)2016-MichaelCorr 24

TargetProductsNetworkedProgrammers

It’snotalwayspre=y,butitcanbebeau@fulv1

ForRealz•  Automatedtestfixturetosimulateenvironments,muli

(C)2016-MichaelCorr 25

VoltageReferences

TargetProducts

USBControlledRelays

NetworkedProgrammers

It’snotalwayspre=y,butitcanbebeau@fulv1

DFT•  DesignForTestisoOenoverlooked,whichleadstoinefficient

testsandinefficient,medevelopingtests.i.e.waste

•  FirmwareandHardwarerequire‘hooks’tosimplifytes,ng•  Valuesrequiredbyteststovalidateasser,onsneedaccessormethods•  Electricalsignalsneedeasilyaccessibletestpoints•  Produc,oncodearchitectureneedstobelayeredproperlytoeasily

stub/mockorshim

•  Eveniffollowingbestprac,cesandaddingtestsearlyinthedevelopmentcycle,s,llneedtodoitright•  Justlikeproduc,oncode,testsneedtobewriienwelland

maintained(i.e.peerreviewed,versioncontrolled,refactored,etc.)•  Ensuretestsexecutequickly•  Ensureinterfaceprovidesforextensibility

(C)2016-MichaelCorr 26v1

UnitTestResources•  TestFrameworksforEmbeddedCEnvironments

•  Ceedling(Unity,CMock)hip://www.throwtheswitch.org/ceedling/

•  GeneralunittestframeworksthatcanbeusedforEmbedded•  Free:CppUtest,GoogleTest,GoogleMock,Minitest•  Paid:ParasoO

•  FullList:

hips://en.wikipedia.org/wiki/List_of_unit_tes,ng_frameworks

•  Findonethat•  IsFree•  Includesstubandmocksupport•  IntegrateseasilywithyourCIbuildserver•  Isanac,veprojectandhasawellsupportedcommunity

•  JamesGrenningBlog:hips://wingman-sw.com/renaissance/ (C)2016-MichaelCorr 27v1

•  Unit•  Testssmallestunitofcode•  Small/quickteststoensureastrongcodefounda,on

•  Integra,on•  Testsinterfacesbetweenunits•  EnsuresAPIsarecorrectanddon’tregress

•  System•  Higherlevel,end-to-endtes,ng•  Catchesuserinterac,on

•  Environment•  Testacrossvariousenvironmentalcondi,ons(temp,humidity,etc.)•  Ensuresyourproductfunc,onsacrossrealworldcondi,ons

TestTypes

(C)2016-MichaelCorr 28v1

Who’sGotTheTime?•  Asyourlibraryofautomatedtestsgrows,the,metoexecute

willincrease

•  ThevalueofusingCon,nuousIntegra,ondiminishesifteststaketoolongtocompleteaOereverycommit

•  Con,nuousIntegra,onbuildsshouldcompletefromcodecommittofinalresult<15minutes•  Developersloseefficiencyifwai,nglongerthanthat•  Developersstoplookingatresultsiflongerthanthat(moveontonext

task)

(C)2016-MichaelCorr 29v1

Separa,onAnxiety•  Segregateyourtests

(C)2016-MichaelCorr 30

Category RunTime TestTypes

EveryBuild <15min •  Currentsprint/releasefeatures•  “Younger”code•  Cri,calcode

EveryNight(Start:1am)

<8hours •  “Old/Robust”code•  Lesscri,calfeatures•  Longerrunningtests

EverySprint/Release •  EnvironmentTests•  ManualTests

v1

MeasureTwice,CutOnce•  Hardwarebugsaremoreexpensiveanddifficulttofixonce

productsarereleasedtocustomers,comparedtoWebandMobileproducts

•  Hardware•  TakataAirbagrecall$360M•  MarsOrbiter$125M

vs

•  SoOware •  FacebookViewsBug:3hrs

(C)2016-MichaelCorr 31v1

Takeaways•  Don’toverlookthevalueof(automated)tes,ng

•  Assignacosttoimplementandexecuteeachtest

•  Con,nuetolookforwaystoreducethecostofatest

•  Timeismoney,andstartupsdon’thavemuchofeitherone-sousewhatyouhave,wisely.•  UseCostsandROItoevaluatedecisions

•  InvestmentsinautomatedtesttoolshaveahugeROIforhardwareproductdevelopment

(C)2016-MichaelCorr 32v1

ThankYou

(C)2016-MichaelCorr 33

[email protected]/in/michaelgcorr

v1