Powering up testing – getting a grip on software projects
"Long ago, testers were often considered killjoys that threw punches in the final stage of software projects. In the worst case, a project manager’s nightmare would arrive just a week before the deadline in a form of a shocking list of errors”, says Jukka Lappalainen with a slight grin. He is Etteplan's chief design engineer and has tested embedded software and systems since 2004.
Nowadays, software development relies on agile practices and methods, which avoid large debacles and promote teamwork. Testing is an inseparable part of the development process right from the definition phase. The tasks overlap and information moves smoothly within a modern design team. The tester is a team member and no longer considered a messenger of bad news.
“In defining requirements, testability has to be taken into account both in the software and in the planned product. It’s important to ensure that automatic testing can be carried out seamlessly as part of product development. An experienced tester can often predict right from the start where problems are to be expected”, Jukka Lappalainen points out.
“Well designed and implemented testing right from the beginning of a project supports developers in achieving high quality and enables measuring and monitoring quality throughout product development”, says Jukka.
Continuous integration (CI) is the practice of compiling, integrating, and testing the entire software in short cycles, whenever something has been changed or added. This means that software can be published very quickly at any point in time – at least in principle. The goal is to automate the software production process and testing as much as possible.
Powering up routines
Dozens of automation tools are available. One of them which Etteplan has found good is Jenkins.
The Jenkins system is a framework for automation of those stages of the software production process that don’t require human intervention. Jenkins is typically defined to fetch the newest versions of program code pieces from version control, to trigger assemblers, to report on errors and warnings, and to load the machine code program into the target system. Jenkins, together with its plugins analyzes, for example, whether the program code complies with agreed rules and reports any deviations. Reports improve readability and maintainability of the code.
Many think that the testing itself consists of pushing buttons and entering commands and values.
“Human beings are indeed good at experimental testing. They are inventive. They connect things and notice more things than machines do. But most of us get tired of pushing buttons at the latest after ten rounds of testing”, Jukka Lappalainen points out.
Most of the testing can fortunately be automated. For this, programs are set up that test programs. There are also many tools available for test automation.
Robot Framework, developed and popular in Finland, is a framework that Etteplan has noticed is well suited for test automation, in other words the implementation of the actual test cases.
Mass tests with Robot Framework
Test definitions with Robot Framework consists of clear key words such as “open browser”, “start operation X with parameter Y”, or “was this successful?”. Anyone even without coding skills can understand these and can change the tests without writing a single line of code.
Libraries readily available for different purposes can be easily connected with Robot Framework, so there’s no need to reinvent the wheel. Suitable libraries are available for testing, for example, Web UIs, frameworks, and mobile apps. Even though these libraries provide large numbers of keywords, but it’s often necessary to create one’s own test libraries with Python, for example, for the device being tested when testing embedded systems.
Machines and automated testing are at their best when dealing with large amounts of tests and many repetitions.
“It’s a good idea to develop tests and software hand in hand and one small step at a time. One small change or addition to the software, and then ensure with an automated test that everything still works. In other words, ensure there’s no regression. By eating the elephant one bite at a time, testing proactively, there’s not too much pressure when the deadline approaches. The project and the software stay under control. And the software becomes easier to maintain in the long run”, Jukka reminds.
Proactive testing ensures staying on schedule and a maintainable result.
“Even the most experienced designers have their blind spots. Our perspective tends to narrow when we get absorbed in a task. Another team member, especially a testing professional, brings new perspectives, which helps noticing errors as early as possible.”
“Especially in embedded systems, there aren’t always the necessary connectors for the software testing to be carried out in the device, for example a serial or a USB port. The Procket Rapid system registers accurately also the statuses and responses of selected measurement points of a circuit board. Originally developed for testing the production of electronics, Procket is also suited for testing hardware and embedded software during the design phase.
Jukka’s mission is to improve quality and throughput in development projects by providing professional test design services.