How do you approach the testing and validation of software that interacts directly with physical hardware?