Software engineering means the ability to manufacture software products automatically, without writing any code manually. This concept is still relatively theoretical and unattainable in software industry, although it could be implemented practically by generating codes automatically out of Modeling Diagrams, using special software products called CASE Tools, like StarUML/WhiteStarUML, Modelio, and others.
This trend represents the bedrock for transforming the process of software producing and development from a human, creative and ad-hoc process into systematic, industrial, and engineering process. Just like transforming in tangible physical industries from handicraft to process to manufactural automatic process. The only main difference between these two cases is the role of real software engineering to avoid human error that represents in fact a real watchful obsession in software industry comparing to it —i.e. human error— in other industries.
Software-Component Reusability helps in enhancing the automated software process, due to its role in reducing the need to write more codes. The success of Reusability actually depends exceedingly on the extent of how much developer knows about the components and resources enclosed and offered by the platform he/she intend to target.
In contrast, the obsession of interoperability, which means the ability of a software product to work in different platforms, stands often as a discouraging factor against Reusability adoption and moving forward toward the best investment on a specific-platform’s components.
Thus, Interoperability stands actually as a prevention against the automated software process, not to mention its role as a prevention too against software usability in the end.
This section highlights some of these components and resources, in attempt to develop and optimize them and adopt them to be better reusable components.