Further, GUI test tools are typically of little use for objects in embedded systems. If programmers were more careful, testing would be unnecessary. Programming errors can be eliminated by extra effort, extra pressure, or extra incentive. Bugs are simply an indication of poor work habits. These poor work habits could be avoided if we'd use a better management strategy.
Many bugs only surface during integration.
There are many interactions among components that cannot be easily forseen until all or most components of a system are integrated and exercised. So, even if we could eliminate all individual sources of error, integration errors are highly likely. Compared to conventional systems, object-oriented systems have more components which must be integrated earlier in development. Since there are elements of a system that are not present until the code has been loaded into the target machine and exercised, there is no way that all faults could be removed by class or class-cluster testing alone, even if every method was subjected to a formal proof of correctness. Static methods cannot reveal interaction errors with the target or transient performance problems in hard real-time systems.