Similarly, the key to the power of software components lies in large-scale integration and reuse, not solely with the individual components themselves. Components composed of other components allow thinking about problems at the appropriate level of abstraction. Without this, we wind up thinking about individual transistors instead of chips and boards. But creating correct, reusable component hierarchies requires designing correct architectures. Component technology and good architecture are intimately related.
Tools can help.
Modeling tools focused on component-based development can be an effective means of understanding the problem and arriving at the correct solution. Component-based development also does not remove the requirement for testing. If anything, it does the reverse, increasing the demand for this potentially expensive part of the process. In iterative development, each of these steps is performed several times. The first iteration produces a running system that's only a subset of the complete solution, but still allows the developers to find and fix any major problems that show up.