Electronic – equivalent to a daily build (and smoke test) for schematic designs

best practiceschematics

Daily build in software is taking the source code, compiling it and generating the executables, then running that nightly. This is considered a best practice since it catches errors that prevent the build sooner rather than later, which makes it easier to fix. And if the build works, then others can make sure they aren't introducing errors.

What would be the equivalent for a schematic design? Clearly I can't build the PCB, but there might be something more than generating the netlist.

Edit 1/21/11: Also a smoke test is running some tests against the build. Again, not possible. I like the DRC (design rule check) idea, I'm thinking of checks such as that.

Edit 1/24/11: I was think of the schematic since that's what I do, rather than the PCB.

Best Answer

One little nit: Only really sloppy developers use daily builds because one build a day means having to wait up to a day to find out if you broke the build.

The best solution is to build and test every single change individually before letting it hit the public branch and revert the change if it breaks the build in any way.

Doing any sort of automatic testing on a schematic or a board layout might be very hard or impossible, but everything you can automate should be automated via something like Hudson, things that come to mind are:

  • ERC
  • DRC
  • BOM updating (check that the parts exist, are available and calculate total cost)
  • Generate Gerbers and other manufacuring files.
  • Generate PDFs of the schematic and PCB layers as well as 3d renderings of the PDB, BOM diff and other documentation.
  • Drop a mail to the developer mailing list with the commit message and links to the output files, so developers can review the change easily.

The number of errors that can be caught automatically might not be terribly high, but having the CI system generate the output files means that it will happen correctly every time and that you don't forget some silly setting when doing it manually.