In the world of industrial and embedded computer systems, it is a top priority to design both hardware and software correctly functioning and reliable. A faulty solution can cause a significant financial loss to the manufacturer, or harm to the consumer.
Modern manufacturing techniques use the flexibility of software to control a production line, or to test and measure the finished product more efficiently. In the case of product prototyping, the use of engineering software is even more essential. A number of these solutions are implemented with the hardware and software products of National Instruments, whose main strength is quick prototyping, easy implementation and cost effectiveness.
During the development of such software, continuous verification should follow the implementation, a method of doing that is software testing. Unit testing is a type of software testing, it verifies the correct behaviour of the smallest testable part of a program, isolated from all other parts or the outside world.
However, testing is a time-consuming, expensive process, when not done effectively. Therefore, techniques to support or automatize testing, and test generation are being researched. One of these techniques is symbolic execution, which supports unit test generation with providing a set test inputs, that maximizes the coverage of the software by the test.
My task was to investigate symbolic execution and the topic of unit testing, and to implement a prototype of it for the software platform of National Instruments, the LabVIEW framework, where no similar tool exists yet. This is a challenging task, since the dataflow programming approach of LabVIEW is really different from traditional programming languages.
In my BSc thesis I am going to briefly cover the background of these topics, and walk through the steps of designing the tool, implementation and evaluation of the prototype.
The finished prototype of the tool is able to produce test input sets by performing symbolic execution on LabVIEW programs containing basic instructions.