Keynote: |
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.