functional testing for embedded software