Toward Component Based Software Engineering
Toward Component Based Software Engineering
Ju An Wang
Department of Computer Science and Information Systems
University of Nebraska at Kearney
Kearney, NE 68849, USA
Telephone: (308) 865 8822
E-mail: [email protected]
ABSTRACT
This paper presents a background and the state-of-the-art of component-based
software engineering (CBSE hereafter), an emerging software technology aiming at
developing high-quality software with lower cost. A number of research topics
around CBSE are discussed which fit well into an upper-level software engineering
course as student projects at small colleges. The paper starts with the rationales of
CBSE after looking into software engineering practices for the past 30 years. The
proposed solution involves the concept of highly reusable software components.
Software development needs a revolutionary change: from writing code line by line
to assembling pre-built, ready-tested components systematically. A component
framework incorporating both syntax and semantics of reusable components is
proposed.
INTRODUCTION
For the last 50 years, the technology for producing computer hardware has radically
changed. At the early days, vacuum tubes and transistors were used. Since 1975, the integrated
circuits (IC) and very large-scale integrated circuits (VLSI) have been used and will continue
to do so for the foreseeable future. A transistor is simply an on/off switch controlled by
electricity. The integrated circuit combined dozens to hundreds of transistors into a single chip.
A VLSI
circuit then, is just millions of combinations of conductors, insulators, and switches manufactured
in a single, small package. The integrated circuits (IC) and very large-scale integrated circuits
(VLSI) make the basic building blocks from which faster and less expensive computers can be
assembled (Figure 1).
183
JCSC 16, 1 (November 2000)
Nineteen research and development goals are proposed which fit well into an upper-level
software engineering course as student projects at small colleges.
ESSENCE OF ENGINEERING
Engineering refers to the profession devoted to designing, constructing, and operating the
structures, machines, and other devices of industry and everyday life [Encyc 98]. For instance,
chemical engineering is dealing with the design, construction, and operation of plants and
machinery for making such products as acids, dyes, drugs, plastics, and synthetic rubber;
aerospace engineering comprises the design and production of aircraft, spacecraft, and missiles.
Software engineering, similarly, is the field of computer science that deals with the building of
software systems which are so large or so complex that they are built by a team or teams of
engineers [Ghezzi 91].
One of the essential characteristics of engineering disciplines is to build a product by
assembling pre-made, standard components. Before the industrial revolution (1750-1850),
there was no factory system of large-scale machine production. Products were typically made
by handcraft through custom-building fashion. That is, one craftsperson ? a mechanic, a
carpenter, a watchmaker or a shoemaker, etc. ? built every part of the product by himself
according to the user requirements. Dramatic changes in the social and economic structure took
place as inventions and new technology created modern industries after the middle of 19
century. Nowadays custom-building fashion disappears in almost every engineering discipline.
A variety of standard, pre-manufactured components are available for reuse when a new
product is designed. A new component-based product has higher quality and lower cost than
custom-built product since standard reusable components have been produced massively and
are well tested for a long time in different applications.
It is the common practice to use pre-fabricated components in designing and implementing
new engineering products. In designing a new car, the engineers will more likely to adopt
existing radio, tires, lights and other standard parts rather than build these components from
scratch. Civil engineers build a new house by reusing standard windows, furnace, and
air-conditioning systems. Computer hardware engineers have a vast collection of integrated
circuits (IC) or chips reusable for new product. In order to build a seven-segment display, for
instance, hardware engineers look into the library of reusable hardware components, just pick
up chip 7448 as a decoder and connect it to digit seven-segment displays. It is a usual practice
for a college student to assemble a personal computer based on different hardware components:
processor, motherboard, RAM chips, disk drives, modem, keyboard, mouse, etc.
Modern industries depend highly on large-scale manufacturing and engineering process
as opposed to hand crafts, the designing and hand fabrication of functional objects. Any
engineering discipline requires three pre-conditions: (1) the fundamental theory exist as a
guidance of the engineering practice; (2) widely accepted standards exists; (3) highly reusable
components available so that massively production of high quality products becomes possible.
If we apply these criteria to software engineering, we find great challenges still remain especially
184
CCSC: Rocky Mountain Conference
regarding highly reusable software components. Our ability to build new software cannot keep
pace with hardware advances and application demand.
Structured Programming
Structured programming has a narrow definition and a broad definition. By the narrow
definition, structured programming means programming without using goto statements,
programming using only while loops and if statements as control constructs and designing using
a top-down approach. The broad definition of structured programming refers to any software
development technique that includes structured design and results in the development of a
structured program. Structured programming allows programs to be broken down into blocks
or procedures which can be written without detailed knowledge of the inner workings of other
blocks, thus allowing a top-down design approach or stepwise refinement. Stepwise refinement
is an iterative process. At each step, the problem to be solved is decomposed into
sub-problems that are solved separately. The sub-solutions that comprise the solution of the
original problem are then linked together by means of simple control structures.
The adoption of structured programming was an important milestone in the development
of software engineering because it was the first step away from an undisciplined approach to
software development. However, apart from goto statements, there are also several other
constructs in programming languages which are inherently error-prone, for instance,
floating-point numbers, pointers, dynamic memory allocation, parallelism, recursion, interrupts,
and so on. Stepwise refinement, on the other hand, cannot provide a systematic strategy for
finding a solution, not to speak of a good solution. Sometimes, the top-level function may not
exist. Structured programming is an effective technique for small-sized programs. But it fails to
scale up to large system development. It does not help designers reuse components from
previous applications or design reusable components when applied to larger programs. It does
not support information hiding. There is a premature commitment to the control structures that
govern the flow of control among modules.
185
JCSC 16, 1 (November 2000)
Object-Oriented Programming
Object-oriented programming has been recognized as a new programming paradigm in
contrast to the alternative programming paradigms, which are predominantly procedural, logical,
186
CCSC: Rocky Mountain Conference
WHAT IS A COMPONENT?
Component-based software engineering (CBSE) intends to build large software systems
by integrating pre-built software components. The high productivity is achieved by using
standard components. The principles of CBSE can be best described by the following two
guiding principles: reuse but do not reinvent (the wheel); assemble pre-built components rather
than coding line by line. Obviously we must answer first: what is a component?
[G 1] Give an appropriate, exact, and concise definition for software components in CBSE.
A number of characteristics of a component should be captured by the definition. A
component should be a piece of self-contained code. A consequent question will be: what kind
187
JCSC 16, 1 (November 2000)
188
CCSC: Rocky Mountain Conference
COMPONENT REPRESENTATION
[G 6] How can a component be documented so that it is easy to use?
The documentation of a component has to be different from the documentation of
traditional software because it must not only describe what the component does but also what
are the interactions between the components and its users. Thus the description should contain
two parts: (1) static functionalities; (2) dynamic behaviors, i.e., the communications with other
components. It is not enough to provide only the source code of components. Formal notations
plus hypertext, visualization, simulation and prototyping will be helpful.
[G 7] Establish the formal computation model of components.
We need a more rigorous basis for describing software components. At the very least, we
should be able to define precisely the extension and intension of software components. [Wegner
97] proposes a new computation model: interactive machine, which was proved to be more
powerful than traditional Turing machines. We can define a component as a 6-tuple interactive
machine: C = (Q, I, f, O, q0, F) where Q is the set of states, Q can be infinite; I is the set of
input streams; f is the transition function; O is the set of output streams; q0 is the initial state; F
is the set of final states. The composition, transformation, minimization and grammar
correspondence of such component machines can be discussed following the traditional formal
language theory. Interactive machines provide a potential formal semantics for component
algebra.
[G 8] Investigate the metrics of components.
Software metrics provide measurement to assess the quality of software products. We
need to investigate the appropriate metrics for component based software development. The
primary objectives for component metrics include the following:
1. to better understand the quality of components;
2. to assess the effectiveness of component assembling;
3. to improve the quality of components and final products.
To be useful in component-based development, component metrics must be simple and
computable, consistent and objective. They capture the characteristics of a component including
easy to implement, amenable to test and simple to modify. High-level design metrics should be
combined with function-based and event-based metrics at component level.
[G 9] Find out appropriate representation scheme for components by examining different
representation methods.
189
JCSC 16, 1 (November 2000)
Over the past years, several knowledge representation schemes have been proposed and
implemented in artificial intelligence field. These representation methods can be used in
representing software components.
1. Logical representation schemes. Logic formulas are used to represent components and
inference rules and proof procedures are used to express the composition of components.
2. Procedural representation schemes. Procedural schemes represent components as a set
of instructions for solving a problem. This contrasts with the declarative representations
provided by logic representation schemes.
3. Network representation schemes. Network representations capture components as a
graph in which the nodes represent components and the arcs represent relations or
associations between them. Unified Modeling Language (UML) might be a good starting
point to investigate the proper representation of components based on graphical notations.
4. Structured representation schemes. Structured representation languages extend networks
by allowing each node to be a complex data structure consisting symbolic data, pointers
to other frames, or even procedures for performing a particular task.
Each of these representation schemes has its own strengths and weaknesses. We need
to tailor these representation methods or combine them for the purpose of best representing
software components.
190
CCSC: Rocky Mountain Conference
answered in designing such a specification language, to name but a few: What are the most
fundamental operations among components? How to formalize component communications?
What semantic basis should be set up for such a specification language?
191
JCSC 16, 1 (November 2000)
valid for reasonable software components and compositions. The key issue to be investigated
is to decide the structured axiom set of the component calculus.
[G 15]Develop a software prototype for component framework.
A software prototype is usually constructed for early assessment of a software product.
For component framework, the prototype should provide a visual design environment for
software engineers to manipulate software components. It has two major functions: (1) to
develop components for reuse; (2) to develop software products based on existing
components. Figure 2 presents a tentative graphical user interface for component framework.
The first window contains common operations on components. For instance, the submenu
Project includes menu-items like New Project, Open, Close, Save, Save As, Versions, Print
etc. The submenu Component includes menu-items New Component, Open, Close, Operations
and so on. The submenu Operations again contains all component manipulating mechanisms
defined in the component algebra.
The Component Library window can be used as a component base. All existed
components are stored in this component base. Different searching methods are provided for
users to pick up desired components for manipulation.
[G 16] How to develop a component with extensibility and reusability?
[G 17] What is the systematic way to classify and store existing software components in the
component library?
[G 18] How to search and retrieve software components effectively?
[G 19] How to simulate software components?
DISCUSSION
There are two basic activities in component-based software development: First, develop
components for reuse. The production process model for this activity involves component
specification, design, coding, testing, and maintenance. Second, develop software with
components. The component search engine is used in this activity to obtain the appropriate
components while the composing logic is applied to prove the correctness of component
integration. Due to the similar reasons argued in [Wegner 97], such a component composing
logic might not be complete, but it should be sound. Moreover, only syntax proofs will not
enough. We need semantic information in verification and we need simulation in validation
process.
The author has proposed 19 research topics and goals to investigate fundamental issues
in component-based software engineering. They can be incorporated in an upper-level software
engineering course for undergraduate students majored in computer science or for graduate
students specialized in software engineering in small colleges. The ultimate goal of such research
is to provide a scientific and engineering basis for designing, building, and analyzing reusable
software components and their systematic composition methods. In addition to the research
192
CCSC: Rocky Mountain Conference
agenda discussed in previous sections, there are certainly more research topics that are worth
further exploring. Your comments and suggestions are highly appreciated.
Component Framework
Component Library
Open Search
REFERENCES
[Ambler 97] Ambler S. W., What's Missing from the UML? Object Magazine, October
1997.
[Encyc 98] Infonautics Corporation, On-line Encyclopedia, http://www.encyclopedia.com,
1998.
193
JCSC 16, 1 (November 2000)
[Luger 98] Luger G. F. and Stubblefield W. A., Artificial Intelligence, Stuctures and
Strategies for Complex Problem Solving, Addison Wesley Longman, Inc. 3rd
ed., 1998.
[Ghezzi 91] Ghezzi C., Jazayeri M. and Mandrioli D, Fundamentals of Software
Engineering, Prentice-Hall, Englewood Cliffs, NJ, 1991.
[Hand 92] Henderson-Sellers B., A Book of Object-Oriented Knowledge, Prentice-Hall,
Englewood Cliffs, NJ, 1992.
[Leav 97] Leavens G.T., and Sitaraman M., Proceedings of Foundations of
Component-based Systems Workshop, Zurich Switzerland, September 1997.
[Moss 96] Hanspeter Mossenbock, Trends in Object-Oriented Programming, ACM
Computing Surveys 28A(4), December 1996.
[OMG 98] Object Management Group, CORBA 2.2/IIOP Specification, OMG Formal
Documentation, http://www.omg.org/library/specindx.htm.
[Pat&Hen 98] Patterson D.A. and Hennessy J.L., Computer Organization & Design: The
Hardware/Software Interface, 2nd Ed., Morgan Kaufmann Publishers, Inc.,
1998.
[Pressman 97] Pressman R.S., Software Engineering, A Practitioner's Approach, 4th eds.,
McGraw-Hill, 1997.
[Somme 96] Sommerville, I., Software Engineering, Addison-Wesley, 1996.
[UML 98] Rational Software Corporation, Unified Modeling Language: UML Resource
Center, http://www.rational.com/uml/index.shtml.
[Wang 92] Wang J. A., Concurrent Calculus and Its Applications, Ph.D. thesis, 1992.
[Wang 98] Wang J.A., Object Orientation in Computer Graphics, seminar presentation,
April 1998.
[Wegner 97] Wegner P., Why Interaction is More Powerful than Algorithms, CACM, May
1997.
194