Manuscript Instructions/Template for 2001

advertisement
Defining an Architecture with a COTS-Aware
Software Engineering Process
Lawrence Chung
The University of Texas at Dallas
P.O. Box 830688
Richardson, Texas, USA 75083
chung@utdallas.edu
Kendra Cooper
The University of Texas at Dallas
P.O. Box 830688
Richardson, Texas, USA 75083
kcooper@utdallas.edu
Ruediger Kaffenberger
Marconi Communications GmbH
D-71522 Backnang, Germany
Ruediger.Kaffenberger@marconi.com
Abstract. The goals of developing systems better, faster, and cheaper continue to drive software
engineering practitioners and researchers to investigate software engineering methodologies that
are novel, yet practical. As the size and complexity of systems continues to grow, there has been
a growing interest in the investigation of social paradigms (e.g., agent- and goal-oriented
approaches) and the use of COTS components. These are being viewed more and more as
promising, and also perhaps inevitable, solutions to this problem. The effective application of
social paradigms and use of COTS components, however, requires a systematic approach that
provides a set of concepts for modeling the subject matter, a set of guidelines for using such
concepts, and tool support to assist the developer.
In this paper, we present part of a COTS-Aware Requirements Engineering and Architecting
(CAREA) approach that explicitly supports the use of COTS components. Our CAREA
approach, an extension of our previous work in system and software requirements engineering, is
agent- and goal-oriented, knowledge based, and has a defined process. In particular, we present
part of the process that supports the formal definition of a software architecture. Our CAREA
approach is validated using a Digital Library System example; a prototype of the CAREA
Assistant tool is used to present some of our preliminary results.
Introduction
Engineering practitioners and researchers continue to investigate software engineering
methodologies that offer novel, yet practical solutions to the on-going problem of developing
systems better, faster, and cheaper. As the size and complexity of systems continues to grow,
there has been a growing interest in the investigation of social paradigms (e.g., agent- and goaloriented approaches) and the use of commercial off-the-shelf (COTS) components. These are
being viewed more and more as promising, and also perhaps inevitable, solutions to this
problem. The effective application of social paradigms and use of COTS components, however,
requires a systematic approach that provides a set of concepts for modeling the subject matter, a
set of guidelines for using such concepts, and tool support to assist the developer.
Our work is focused on creating, modeling, and analyzing a goal- and agent-oriented
requirements engineering and architecting approach that explicitly supports the use of COTS
components. Our approach is called the COTS-Aware Requirements Engineering and
Architecting (CAREA) approach. It is agent-oriented as in (Yu 1994)(Wooldridge 2001), goaloriented as in (Anton 1998)(Chung 2000)(van Lamsweerde 2000), has a defined process as in
(Maiden 2002), and is knowledge-based as in (Liu 1995)(Rolland 1994). The CAREA approach
is intended to provide a framework for integrating and extending existing work in agent-oriented,
goal-oriented, requirements engineering (RE), architecture, conceptual modeling, and COTS
research. Due to this integrative approach, there are a number of related techniques that we draw
upon including the Rational Unified Process model (Jacobson 1999)(Krutchen 1998), Model
Based Architecting and Software Engineering framework (Boehm 1998)(Boehm 2000), and the
Procurement Oriented Requirements Engineering technique (Maiden 2002)(Ncube 1999). Due to
space constraints, we refer the reader to (Chung 2002a)(Chung 2002b) for surveys on these
techniques. The CAREA approach is intended to assist the engineer in developing high quality
specifications, not to replace their intelligence and experience. This work may be of interest to
researchers and practitioners involved in developing large-scale, complex systems.
We recognize that developing the CAREA approach is an ambitious project. To accomplish
the work, we are using an iterative approach to define, refine, and validate the CAREA models
and tool support. This iteration is focused on developing the models and tool support for defining
a system architecture. Here, we define a process model to support the definition of a software
architecture. The prototype of the CAREA Assistant Tool is also extended to support the
architecture definition. The approach is validated by applying it to (part of) a Digital Library
System (DLS). This example is selected because it is a complex, non-proprietary system with a
rich set of functional and non-functional requirements. A detailed description of the CAREA
approach (including the process model, product model, meta-model, and ontology) is available in
the complimentary technical report (Chung 2002b).
This paper is organized as follows. Following the introduction, we present an overview of the
CAREA approach from an activity-oriented perspective. This is followed by a description of the
process model that supports the definition of an architecture. Part of the process is illustrated
using a Digital Library System (DLS) example; the architecture is formalized and presented
using a prototype of the CAREA Assistant Tool. We also present some of our lessons learned,
conclusions, and areas for future work.
Overview of CAREA
The CAREA approach is characterized as agent-oriented, goal-oriented, knowledge based,
and has a defined process (refer to Figure 1). On the right side of Figure 1, the early artifacts for
the system under development are accounted for including the agents, softgoals (non-functional
goals that are achieved not absolutely but in a “good-enough” sense), hardgoals (functional
goals), system requirements, software requirements, and architectural elements. The traceability
relationships among the artifacts are also established and maintained (e.g., a softgoal is refined
and traced to specific system requirements). On the left side of Figure 1 the descriptions of the
COTS components are stored and maintained in a knowledge base, or repository. For each COTS
component, the high-level goals (softgoals and hardgoals) and the chosen product specifications
which meet the goals are stored and maintained. The goals provide high-level descriptions of the
capabilities of a COTS component; they contain information like that found on marketing
brochures for existing products. These general descriptions provide enough information, at least
initially, for a RE to determine if the product appears to be potentially useful and, as a result,
warrants further investigation. A product specification is the detailed description of the
functional and non-functional characteristics of the projected system, including its components
and relationships between the components, which, as a means/solution, meets the (potentially
conflicting) goals and constraints of the various stakeholders, technical constraints, laws, etc.
(Davis, 1993) (Loucopolos, 1995); they contain information like that found on the technical
product specifications or data sheets for an existing product. When using the CARE approach,
the RE identifies possibly matching COTS components for the goals and subsequently, the
requirements and architectural elements of the system under development; these mapping
relationships are also established and maintained.
Component Repository
(Component Goals, Specifications, …)
System Under Development
(System Goals, Requirements, Architecture…)
Softgoal2
…
Goaln
Goal1
Goals
Goals
Specification
Specification
Component 2
Component 1
Goals
Specification
System
Requirement
System
Requirement
System
Architecture
…
Hardware
Requirement
Interface
Requirement
Software
Requirement
Subsystem
Architecture
Subsystem
Architecture
Architecture
Elements
Architecture
Elements
Component n
Legend
Mapping System Goals to Component Goals
Mapping Requirements to Component Specification
Mapping Architectures to Component Specifications
Agent
Figure 1. Mapping System Goals, Requirements, and Architectures to Components
In this section, we present an overview of the CAREA process model; a detailed description
is available in (Chung 2002b). An overview of the CAREA process is illustrated in Figure 2
using the IDEF0 notation (FIPS 1993). The IDEF0 notation is activity oriented, and is suitable
for describing a process. Activities in the IDEF0 notation have inputs, mechanisms, controls, and
outputs. An activity transforms inputs into outputs and is represented with a labeled rectangle.
Inputs and outputs are represented with arrows arriving at the left-hand side of the activity and
leaving the right-hand side respectively. Mechanisms are the people or tools that perform the
activity; these are represented with labeled arrows arriving at the bottom of the activity. Controls
are used to constrain when or how the activity can be done; these are represented as labeled
arrows arriving at the top.
At this high level, the activities of the CAREA approach include Define System Agents,
Define System Goals (with COTS), Define System Requirements (with COTS), Define Software
Requirements (with COTS), Maintain COTS Repository, and Define Architecture (with COTS)
(refer to Figure 2). Each of these is described in more detail by decomposing the activity.
The CAREA process defines the goals, requirements, and architecture with an iterative and
interleaving approach; this approach supports the use of COTS components. In CAREA the
selection of possible COTS components begins very early in the development lifecycle when the
goals are being defined (Chung 2002a). The requirements engineer (RE) maps goals and
requirements to possible matches of COTS components by searching, matching, and selecting
from the components in the repository. The RE, with the assistance of the component engineer
(CE) and the system or software architect (SA), considers the functional and non-functional
capabilities and the impact of using a component on the software architecture. If a match is not
found, then the RE has a number of options. The RE may ask the CE to find another component
in the marketplace and add it to the repository. The RE may try bridge the gap between the
customer's needs and the capabilities available in the components by asking the vendor to change
a component or asking the customer to change a goal or requirement. Using this process, the
goals and requirements are negotiated and refined while considering the constraints imposed by
COTS components.
As the goals and requirements are being developed, the SA outlines the system architecture.
When system goals, system requirements, software requirements become available, the SA uses
them to refine the architecture model. With the assistance of the CE, the SA evaluates COTS
components already mapped from goals and requirements and may search, match, and select
additional COTS components in the repository. Again, if a COTS component is not available the
SA has several options. The SA may ask the CE to find another component in the marketplace
and add it to the repository, ask a vendor to change a component, or ask the RE to negotiate a
change to a goal or requirement with the customer. As a result, the goals, requirements, and
system architecture are negotiated and refined while considering the constraints imposed by
COTS components. The artifacts relating the co-definition of the goals and requirements with the
RE and CE Expertise
Initial System Concept,
System Goals
(WIP, Baselined, Corrections),
System Requirements
(WIP, Baselined, Corrections),
Software Requirements
(WIP, Baselined, Corrections),
Component Repository
Architecture (WIP, Baselined , Corrections),
SA Decisions
Define
Architecture
(with COTS)
5
System Goals
(WIP, Baselined, Corrections),
System Requirements
(WIP, Baselined, Corrections),
Software Requirements
(WIP, Baselined, Corrections)
Architecture
(WIP, Baselined, Corrections),
Component Repository
SA
Elicitation Tech.
Initial System Concept,
Enterprise Goals
Define
WIP System Agents,
System
RE Decisions
Agents 1 Baselined System Agents
RE
Initial System Concept,
WIP Architecture,
Component Goals,
Enterprise Goals
Corrections to
System Goals
Update Component Goals,
Update Component Specs.
RE and SA Expertise
Maintain
Component
Repository
CE
Updated Component
6 Repository,
CE Decisions
Elicitation Tech., COTS Decision Tech., SA and CE Expertise
Update Component Goals
WIP System Goals, RE Decisions
Baselined System Goals (with COTS)
Define
System
Goals
2
RE
Component Specs.,
WIP Architecture
Elicitation Technique, COTS Decision Technique
Define
Update Component Specs.
System
WIP System Requirements, RE Decisions
Reqs.
Baselined System Requirements (with COTS)
3
RE
Corrections to System Reqs.
Component Specs.,
WIP Architecture
Elicitation Tech., COTS Decision Tech., SA and CE Expertise
Define
Software
Reqs.
RE
4
Update Component Specs.
WIP Software Requirements,
Baselined Software
Requirements (with COTS),
RE Decisions
Corrections to Software Reqs.
Figure 2. A High Level Activity-oriented View of CAREA
architecture are highlighted in blue in Figure 2.
Defining an Architecture with the CAREA Process
In the overview of the CAREA process (refer to Figure 2), one of the steps is to Define the
Architecture (activity 5). CAREA is concerned with both systems architecture and software
architecture. Since systems engineering is a predecessor to software engineering, we believe it is
of paramount importance to detect model mismatches at the earliest possible moment,
concerning both the context in which the projected software system is to function and the
software system functionality. Here, we focus on defining and validating the activities used to
define the software architecture; we plan to extend CAREA to support the system architecture
definition in the next step of the work. Defining the software architecture is decomposed into
activities to select architectural styles, define, establish traceability from the requirements to the
architecture, analyze, correct, verify, integrate, and baseline subsystems. We (partially) illustrate
the process using a Digital Library System (DLS) example. Due to space constraints, only part of
the example is presented. In each step, the SA documents the decisions and the rationale for the
decisions performing the task.
Select Architectural Style(s). The SA selects one or more architectural styles to define the
overall structure of the software solution. Architectural styles capture a recurring solution to a
recurring problem (Clements 2002). Examples of styles in (Bass 2002) include independent
components (e.g., client server), data flow (e.g., pipe and filter), data-centred (e.g., repository),
virtual machine (e.g. rule based), and call/return (e.g. layered). The SA uses the initial concept of
the system, goals, and requirements to select the style(s); they can overlap or can contain one
another hierarchically.
For the DLS, the SA examines the initial concept of the system to identify the (initial)
architectural styles used; the SA selects client-server, layered, and repository. The overall
structure of the architecture is illustrated in Figure 3.
…
Client
Client
(maximum 500 clients)
Server
CHI Layer
CHI Layer
Loadsharing Configuration
Server
Server Manager Layer (web)
Client Manager Layer
Client Manager Layer
Proxy
Server Manager Layer (web)
Library Repository
Security Layer
Security Layer
Library Repository
Communication Layer
Communication Layer
Communication Layer
Communication Layer
Real Time O/S Layer (Utilities)
Real Time O/S Layer (Utilities)
Real Time O/S Layer (Utilities)
Real Time O/S Layer (Utilities)
Logical Communication
Figure 3. Initial DLS Architecture
Outline
Define Subsystem Architecture. Once the architectural styles are selected, the SA defines the
subsystems. For example, if a layered style is used, then each layer is a subsystem that needs to
be defined in terms of its capabilities (i.e., meets specific functional requirements), interfaces,
and constraints (i.e., meets specific non-functional requirements). As the subsystems are defined,
the SA may update the architectural styles used and/or update the topology (e.g., three layers
may be redefined as two layers). For the DLS, the SA defines the CHI layer as:
Capabilities. The CHI layer manages the presentation of audio, video, and images, a graphical user
interface, supports the extensible markup language (XML), type and range error checking on user
inputs, and builds and decodes requests going to/arriving from Client Manager layer.
Interfaces. The CHI Layer uses the Client Layer to process the following request/responses: log-on,
log-off, add library object, search for library object, modify library object, delete library object, add
user account, modify user account, search for user account, delete user account, …
Constraints. 1) Complies with the following standards: Extensible Markup Language (XML), MPEG,
JPEG, … 2) Non-COTS code is implemented with JAVA.
Establish Traceability. The SA establishes the traceability between the requirements and the
subsystems. For the DLS, the SA traces system requirement 023, which states that the DLS shall
provide the capability to present files in the motion picture expert group 3 standard (MPEG-3), to
the CHI Layer.
Analyze, Correct, and Verify Subsystem Architecture. The SA analyzes each subsystem
description to identify errors of commission (e.g., conflicting, incorrect, or redundant
capabilities, interfaces, or constraints) and omission (e.g., missing capabilities, interfaces, or
constraints). The SA corrects the definitions of the subsystems based on the analysis results.
Once the subsystem is corrected, the SA verifies it with respect to the system goals, system
requirements, and software requirements. The SA identifies errors of commission and omission.
For the DLS, the SA analyzes the subsystem architecture; a number of errors are detected and
corrected. Typical errors include descriptions of capabilities, interfaces, and constraints that are
marked as "TBD" and incomplete references to standards. For example, in the CHI Layer
description the specific version of XML standard not specified and needs to be corrected. The
current version of this standard is 1.0, October 2000. Once the subsystem is corrected the SA
verifies it with respect to the system and software requirements. Using the traceability, a number
of errors are detected in this step. For example, the traceability report indicates the CHI layer
supports the requirement to present audio-video using MPEG-3; this is not included in the layer’s
description and is added.
Define COTS Subsystem Architecture. Once the subsystems are verified, the SA determines if
COTS components are available that may provide the capabilities, match the interfaces, and
match the constraints. Earlier in the CAREA process, potential matches are identified when the
goals and the requirements for the system under development are defined. If components are
already identified, then the SA determines if one or more of the components are a match for the
current definition of the architecture. If one or more components are a good match, then the SA
selects a component. Currently, selection technique in CAREA is ad-hoc (i.e., relies solely on the
experience of the SA). In the future, CAREA will be extended with multi-criteria decision
making techniques. If there is not a good COTS match, then the SA has several options. The SA
may a) determine the impact of selecting one of the possible components on the architecture b)
consult with the CE and request a search for additional components c) consult with the RE and
determine if the requirements can be modified d) develop the subsystem from scratch.
For the DLS, when the SA begins to define the COTS components used in the CHI Layer,
the JAVA Media Framework (JMF) components have already been identified by the RE. After
investigating (reviewing the RE's rationale for selecting the components, searching the
repository, matching and analyzing additional components), the SA determines the JMF is the
best COTS component available to deliver the capabilities needed.
Integration and Baselining. Once subsystems are defined, they need to be iteratively integrated,
analysed, corrected, and verified. The integration may proceed top down, bottom up, or middle
out. This large activity is described in (Chung 2002b). Ultimately, the SA and CM baseline the
verified, integrated architecture and place it under configuration management.
The DLS example is further illustrated using the prototype of the CAREA Assistant Tool.
The prototype supports a subset of the constructs in the meta-model, including the agents, goals,
system requirements, software requirements, COTS components, architecture, and a set of basic
queries. The tool uses the deductive object management database tool called ConceptBase
(ConceptBase 2002), which supports the O-Telos language (Mylopoulos 1990). O-Telos is a
descendant of RML (Greenspan 1994) - an object-oriented requirements modeling language for
functional requirements. O-Telos provides a formal, object-oriented notation with classification,
generalization, aggregation, attribution, and time. Using the semi-formal CAREA architecture,
the classes for the architecture and instances for the DLS example are defined in O-Telos and
included in the knowledge base of the CAREA Assistant Tool. Examples are available in (Chung
2002b). Part of the DLS architecture is presented graphically in Figure 4.
Figure 4. Partial Illustration of the Formalized Architecture
We have already learned a number of lessons in developing this phase of the work. The
formalization into O-Telos class definitions has encouraged the development of a more
complete, consistent, and correct process model. As the model was being developed, it became
an iterative process to define, validate, and correct the definitions. In particular, when
formalizing the subsystem architectures in O-Telos, the following problem arose: How do we
translate parts of the architecture that are defined with overlapping styles? For example, the
client server style defines specific interface types for the process communication; these types
need to be related to layers within the client and sever. After several iterations, this problem is
addressed by refining the definitions, for example, of an interface as a class, not a simple
attribute. With this approach, instances can be related across "chunks", or overlapping styles, of
the architecture. When displaying all the relationships, however, the graphical representation of
the architecture became difficult to read. The GraphicBrowser tool that is available with
ConceptBase currently does not support moving the relationships or the labels on the
relationships. ConceptBase does provide an API; we propose to use the API to build a more
flexible interface for displaying the architecture model.
CONCLUSIONS AND FUTURE WORK
In this paper, our contribution is to present our preliminary work in the CAREA approach
that supports the definition of a software architecture as the goals and requirements are being
defined. We present part of the process model and illustrate it with an example from a Digital
Library System. A more detailed description of CAREA is available in (Chung 2002b). The
activity step to define the architecture is refined into steps to select architectural styles, define
subsystem architectures, establish traceability from the requirements to the subsystem
architectures, analyze, correct, verify, define COTS, and integrate subsystems, and baseline an
architecture. Classes and instances of agents for part of a Digital Library System are formalized
in the O-Telos notation and presented using a prototype of our CAREA Assistant Tool.
As we have only used one example system to validate the work, we recognize that additional
validation with different systems is needed. The next example system we intend to use is a
telepresence system. We also plan to extend and refine the CAREA approach's process, product,
and meta-model and tool support. More specifically, we propose to a) extend the prototype to
support reasoning about contradictory, non-functional goals as in (Chung 2000), b) develop a
better user interface using the API in ConceptBase for the CAREA Assistant Tool, c) extend the
knowledge base with additional architectural styles, and d) extend the approach to support the
definition of a system architecture.
REFERENCES
Antón, A., Potts, C., “The Use of Goals to Surface Requirements for Evolving Systems”, Int.
Conf. on Software Engineering, Kyoto, Japan, 19-25 April 1998, pp. 157-166.
Bass, L., Clements, P., and Kazman, R., Software Architecture in Practice, Addison Wesley
Longman, Inc., 1998.
Boehm, B., Port, D., Abi-Antoun, M., and Egyed, A., “Guidelines for the Life Cycle Objectives
(LCO) and the Life Cycle Architecture (LCA) deliverables for Model-Based Architecting
and Software Engineering (MBASE)”, TR USC-CSE-98-519, USC-Center for Software Eng.
Boehm, B. “Requirements that handle IKIWISI, COTS, and Rapid Change", IEEE Computer,
Vol. 33 Issue: 7, July 2000, pp. 99 –102.
Brownsword, L., Oberndorf, T., and Sledge, C., “Developing New Processes for COTS-Based
Systems”, IEEE Software, July/August 2000, pp. 48-55.
Chung, L., Nixon, B., Yu, E., and Mylopoulos, J., Non-Functional Requirements in Software
Engineering, Kluwer Academic Publishing, 2000.
Chung, L. and Cooper, K., "A COTS-Aware Requirements Engineering Process: a Goal-and
Agent Oriented Approach", Proc. of the Int. Council on Systems Engineering Symposium,
2002 (INCOSE '02), Las Vegas, Nevada.
Chung, L. and Cooper, K., "A COTS-Aware Requirements Engineering and Architecting
Approach: Defining System Level Agents, Goals, Requirements, and Architecture", TR
UTDCS-20-02, The University of Texas at Dallas, 2002.
Clements, P., Kazman, R., and Klein, M. Evaluating Software Architectures Methods and Case
Studies, Addison-Wesley, USA, 2002.
ConceptBase, A deductive object manager for meta databases, Aachen University of Technology
(RWTH), Germany, version 5.2, 2002.
Davis, A. M., Software Requirements: Objects, Functions, States. Prentice Hall: Englewood
Cliffs, 1993.
Federal Information Processing Standard (FIPS) Publication 183, Integration Definition for
Function Modeling (IDEF0), December 21, 1993.
Greenspan, S., Mylopolous, J., and Borgida, A., “On formal requirements modeling languages:
RML revisited”, 16th Int. Conf. on Software Eng., 1994, pp. 135-147.
Jacobson, I., Booch, G., and Rumbaugh, J., The Unified Software Development Process, Addison
Wesley Longman, Inc., USA, 1999.
Kruchten, P., “Modeling Component Systems with the Unified Modeling Language”, Int.
Workshop
on
Component-Based
Software
Eng.,
1998,http://www.sei.cmu.edu/cbs/icse98/papers/p1.html.
Liu, A. and Tsai, J.J.P., "A knowledge-based approach to requirements analysis", 7th Int. Conf.
on Tools with Artificial Intelligence, 1995, pp. 26 - 33.
Loucopoulos, P. and Karakostas, P., System Requirements Engineering, McGraw-Hill, 1995.
Maiden, N.A.M., Kuim, H. and Ncube, C. “Rethinking Process Guideance for Software
Component Selection", Proc. of the 1st Int. Conf. of Component Based Eng., 2002, pp. 151164.
Mylopoulos, J., Borgida, A., Jarke, M., and Koubarakis, M., “Telos: Representing Knowledge
about Information Systems”, ACM Trans. Info. Sys., 8 (4), October 1990, pp. 325-362.
Ncube, C. and Maiden, N., “Guiding parallel requirements acquisition and COTS software
selection”, Proc. of the IEEE Int. Symp. on Requirements Eng. 1999, pp. 133-140.
Rolland, C. and Grosz, G., "A general framework for describing the requirements engineering
process", IEEE Int. Conf. on Systems, Man, and Cybernetics, 1994, vol. 1, pp. 818 - 823.
Yu, E., “Modelling Strategic Relationships For Process Reengineering”, DKBS-TR-94-6, Univ.
of Toronto, Canada, Dec. 1994.
van Lamsweerde, A. and Letier, E., “Handling Obstacles in Goal-Oriented Requirements
Engineering”, IEEE Trans. on Software Eng., Vol. 26, September 2000, pp. 978-1005.
Wooldridge, M. and Ciancarini, P., "Agent-Oriented Software Engineering: The State of the
Art," Handbook of Software Engineering and Knowledge Engineering, World Scientific
Publishing Co., 2001, pp 1-28.
BIOGRAPHIES
Lawrence Chung is an Associate Professor in the department of Computer Science at The
University of Texas at Dallas. He received a Ph.D. in Computer Science from The University of
Toronto, is on the editorial board of Requirements Engineering Journal, and is the principal
author of "Non-Functional Requirements in Software Engineering".
Kendra Cooper is an Assistant Professor in the department of Computer Science at The
University of Texas at Dallas. She received a Ph.D. in Electrical and Computer Engineering from
The University of British Columbia. Her research interests include requirements engineering,
system and software architecture, formal methods, and the empirical assessment of software
engineering methodologies.
Ruediger Kaffenberger has worked as a systems engineer for more than eight years. He is now
with the Access Networks Division of Marconi Communications. Ruediger Kaffenberger
received a M.S. degree in Electrical Engineering from the Univeritat Stuttgart. He is a founding
member of INCOSE German Chapter, and a member of the IEEE and the IEEE Computer
Society.
Download