Upload
nguyentu
View
215
Download
1
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