Keynote:
Software isn't built from LEGO blocks
Towards architecture based reuse.


Alexander Ran
Principal Scientist
Nokia Research Center
3 Burlington Woods Drive #260
Burlington, MA 012803, USA
voice: +1 (781) 238 4904
fax: +1 (781) 359 5196
alexander.ran@research.nokia.com

Abstract

Component-based reuse is seen by many software engineers and managers as a promising approach to reduce high costs of building complex software. LEGO blocks often serve as a metaphor for component-based reuse. Different kinds of blocks from standard block sets can be used for constructing endless variety of structures. Why cannot software be constructed as easily using ready-made, well- designed, carefully implemented, thoroughly tested, and clearly documented components?

On one hand, graphical user interface frameworks, Visual Basic controls, and other examples provide evidence that this is indeed possible. On the other hand, of many industrial projects that attempt to develop repositories of reusable components for specific domain only few achieve any degree of success. What makes the difference?

I believe the difference is in the context. Complex software is not built from simple components, like LEGO blocks. Complex components depend on other components providing specific functionality; they need to observe system-wide policies for security, flow-control, overload control, fault detection and handling; they must rely on infrastructure for communication, coordination, state maintenance, execution tracing, etc.

For a project to develop reusable components the context of use must be well understood. The context of use for software components is determined by software architecture. Therefor component-based reuse is only possible as a consequence of architecture-based reuse. If we intend to reuse architectures we need to improve our understanding regarding what it is and how it can be reused. This understanding must be shared by software engineers as well as product and project managers. I will present a conceptual framework for software architecture that can help establish stable partitions of software thus supporting evolution of software and enabling reuse.