[Haskell] Interesting experiences of test automation in Haskell? Automation of Software Test 2010

Tom Hawkins tomahawkins at gmail.com
Thu Dec 3 03:02:19 EST 2009


On Fri, Nov 27, 2009 at 9:30 PM, John Hughes <rjmh at chalmers.se> wrote:
> This is a "heads up" about a workshop on test automation that I just joined
> the programme committee of. Automation of Software Test will be co-located
> with ICSE in Cape Town in May--the workshop home page is here:
>
> http://www.cs.allegheny.edu/ast2010/
>
> Tools like QuickCheck, SmallCheck and HUnit fit the call for papers
> perfectly. So if you're doing some interesting automated testing in Haskell,
> why not submit a paper about it, and show a new audience what the Haskell
> community is up to? Both research papers and case studies are welcome, and
> the latter can even be in the form of a presentation of up to 15 slides--so
> there's no excuse for not putting something together!

Recently we added a unit testing framework to Atom: a haskell DSL for
hard realtime embedded applications.  The framework hooks into Atom's
assertion and functional coverage statements and provides some basic
randomization utilities for automatic test generation.  We've used
this framework to test the embedded software of Eaton's parallel
hydraulic hybrid application (HLA).

One nice feature we've incorporated for our application is in the
event of an assertion violation, simulation data is formated such that
we can use the same analysis and debug tools that we use for real
vehicle telemetry.

I don't think we can make it to Cape Town, but I'll see if one of us
can write up a case study.  (Shruti, Tejas, Jake, any interest?)

Here's an example test log from Language.Atom.Unit:

pass:  processTest1
 cycles =    1000
pass:  dualProcessTest
 cycles =    1000
pass:  processNoDeactivationGuard
 cycles =    1000
pass:  processNoActivationGuard
 cycles =    1000
pass:  processDuelingProcesses
 cycles =    1000
pass:  arbiterTest1
 cycles =    1000
pass:  arbiterTest2
 cycles =    1000
pass:  arbiterTest3
 cycles =    1000
pass:  arbiterTest8
 cycles =    1000
pass:  arbiterTest10
 cycles =    1000
pass:  absDisengagementTest
 cycles =   35000
pass:  cruiseControlDisengagementTest
 cycles =   35000
pass:  engineSpeedDisengagementTest
 cycles =   35000
pass:  pumpSpeedDisengagementTest
 cycles =   35000
pass:  ignitionDisengagementTest
 cycles =   35000
pass:  selectedGearDisengagementTest
 cycles =   35000
pass:  currentGearDisengagementTest
 cycles =   35000
pass:  modeDisengagementTest
 cycles =   35000
pass:  commissioningProcessDisengagementTest
 cycles =   35000
pass:  canEEC1DisengagementTest
 cycles =   35000
pass:  canEEC2DisengagementTest
 cycles =   35000
pass:  canETC1DisengagementTest
 cycles =   35000
pass:  canETC2DisengagementTest
 cycles =   35000
pass:  canEBCDisengagementTest
 cycles =   35000
pass:  canECCDisengagementTest
 cycles =   35000
pass:  driverisolationFaultDisengagementTest
 cycles =   35000
pass:  drivermodeDrainFaultDisengagementTest
 cycles =   35000
pass:  drivermodeFillFaultDisengagementTest
 cycles =   35000
pass:  drivermainBypassFaultDisengagementTest
 cycles =   35000
pass:  driverchargeBypassFaultDisengagementTest
 cycles =   35000
pass:  driverclutch1FaultDisengagementTest
 cycles =   35000
pass:  driverclutch2FaultDisengagementTest
 cycles =   35000
pass:  driverclutch3FaultDisengagementTest
 cycles =   35000
pass:  driverpumpFaultDisengagementTest
 cycles =   35000
pass:  drivermotorFaultDisengagementTest
 cycles =   35000
pass:  coolerFanOnOffTest
 cycles =   40000
pass:  stateTransitionTest
 cycles =   75000
pass:  swashCmdInBootstrapTest
 cycles =   40000
pass:  brakePressureAboveRangeAndTxSpeedDisengagementTest
 cycles =   35000
pass:  brakePressureAboveRangeDisengagementTest
 cycles =   35000
pass:  accumulatorPressureBelowRangeDisengagementTest
 cycles =   35000
pass:  accumulatorPressureAboveRangeDisengagementTest
 cycles =   35000
pass:  sawsh1BelowRangeDisengagementTest
 cycles =   35000
pass:  swash1AboveRangeDisengagementTest
 cycles =   35000
pass:  swash2BelowRangeDisengagementTest
 cycles =   35000
pass:  swash2AboveRangeDisengagementTest
 cycles =   35000
pass:  swashDiffOnBoundaryDisengagementTest
 cycles =   35000
pass:  swashDiffAboveRangeDisengagementTest
 cycles =   35000
pass:  pumpCaseOilTempCAboveRangeDisengagementTest
 cycles =   35000
pass:  pumpCaseOilTempCBelowRangeDisengagementTest
 cycles =   35000
pass:  pumpCaseOilTempCBoundaryDisengagementTest
 cycles =   35000
pass:  reservoirOilTempCAboveRangeDisengagementTest
 cycles =   35000
pass:  reservoirOilTempCBelowRangeDisengagementTest
 cycles =   35000
pass:  reservoirOilTempCBoundaryDisengagementTest
 cycles =   35000
pass:  tempSensorMiscompareAboveRangeDisengagementTest
 cycles =   35000
pass:  tempSensorMiscompareBoundaryDisengagementTest
 cycles =   35000
pass:  reservoirOilTempCTooExtremeDisengagementTest
 cycles =   35000
pass:  reservoirOilTempCTooExtremeBoundaryDisengagementTest
 cycles =   35000
pass:  reservoirOilLevelGalLDisengagementTest
 cycles =   35000
pass:  reservoirOilLevelGalHDisengagementTest
 cycles =   35000
pass:  pumpSpeedAboveRangeLDisengagementTest
 cycles =   35000
pass:  pumpSpeedAboveRangeHDisengagementTest
 cycles =   35000
pass:  accumOverPressureBoundaryDisengagementTest
 cycles =   35000
pass:  accumOverPressureAboveRangeDisengagementTest
 cycles =   35000
pass:  filterPressureBelowRangeDisengagementTest
 cycles =   35000
pass:  filterPressureAboveRangeDisengagementTest
 cycles =   35000
pass:  5VSupplyBelowRangeDisengagementTest
 cycles =   35000
pass:  5VSupplyAboveRangeDisengagementTest
 cycles =   35000
pass:  12VSupplyBelowRangeDisengagementTest
 cycles =   35000
pass:  12VSupplyAboveRangeDisengagementTest
 cycles =   35000
pass:  stuckEngagedDisengagementTest
 cycles =   35000
pass:  stuckOilLevelDisengagementTest
 cycles =   35000
pass:  clutchdisengagementFaultTest
 cycles =   40000
pass:  clutchSensorMiscompareFault
 cycles =   40000
pass:  clutchSensorMiscompareFaultAbovePumpSpeedandabsRangeTest
 cycles =   40000
pass:  clutchSensorMiscompareFaultAbovePumpSpeedandBelowabsRangeTest
 cycles =   40000
pass:  clutchSensorMiscompareFaultBoundaryTest
 cycles =   40000
pass:  clutchSensorMiscompareFaultAboveRangeTest
 cycles =   40000
pass:  unexpectedDisengagementTest
 cycles =   40000
pass:  failedEngagementAttemptsTest
 cycles =   40000
pass:  fanOffTest
 cycles =   30000
pass:  evuTest
 cycles =   30000
pass:  swashCalTest
 cycles =   40000
pass:  seedKey32Test1
 cycles =     100
pass:  seedKey32Test2
 cycles =     100
pass:  seedKey32Test3
 cycles =     100
pass:  seedKey32Test4
 cycles =     100
pass:  seedKey32Test5
 cycles =     100
pass:  seedKey32Test6
 cycles =     100
pass:  seedKey32Test7
 cycles =     100

Total Passing Tests     : 90 / 90
Total Simulation Cycles : 2650700
Total Function Coverage : 102 / 102

GREEN LIGHT


>
> So how about it? It would be great to see some Haskell papers at the
> workshop! Deadline 20 January.
>
> John Hughes
>
> PS Check out the ICSE web site for information on the location:
> http://www.sbs.co.za/ICSE2010/
>
> _______________________________________________
> Haskell mailing list
> Haskell at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell
>
>


More information about the Haskell mailing list