2 THE PROPOSED PROCESS
We see an application as a set of inter-related
components. Each component has a functionality,
expressed as a set of functions, and encapsulates and
manages its own data: this is the component
paradigm, derived from object-orientation and
today's standard of development.
Let us consider we have at our disposal many
small off-the-shelf components, stored in
appropriate component repositories. Each one covers
a precise elementary function, an atom of
functionality – for example file management,
database access, GUI display mechanisms, text
translation, HTML pages reading from URLs,
elementary functions for text processing, etc. More
simply than the concept of semantic component
(Kaiya, 2005; Sjachyn, 2006; Hai, 2006), we
propose each component is described through a
semantic card which contains notably the goal of the
component, expressed in natural language form and
describing clearly what the component really does,
what its functions are and which data it manipulates.
Through an appropriate process we expose in
detail below, the meaning of the sentence
representing the component's goal - its semantics –
can be determine and expressed in terms of an
appropriate computable data structure. Thus, the
idea is to mark every semantic atom of functionality
with their appropriate semantic data structure.
We also have at our disposal a specification
document containing requirements describing what
the application will do, what its functional and non-
functional features are. The requirements are a set of
sentences expressed in natural language. Each
sentence has a meaning which can be found out by
using the same process. Each sentence, i.e. each
piece of specification, each atom of requirement, can
therefore be evaluated and marked, and each
sentence will receive its own semantic data.
Notice that this process is different than an
ontology-based requirement analysis approach
(Kaiya, 2005) – an ontology (McGuinness, 2004) is
a formal description of the concepts manipulated in
a given domain and of relationships between these
concepts. Here, no external ontology is used to help
requirements analysis, because semantics is
extracted from the text itself.
Sentences that compose requirements are
logically linked to each other. Then, it is possible to
determine a requirement network by scanning links
between requirement atoms: this browsing will
determine the structure of the 'specification
molecule' – the molecule that describes the problem.
Analyzing lots of specifications within the
context of numerous industrial projects developed
with an object-oriented approach (Larvet, 1994) has
led us to observe that a link between two different
requirements in the specification always leads to a
link between the classes implementing these
requirements. Indeed, two pieces of requirement are
linked to each other when they both talk about a
given data, constraint, functionality or feature of the
targeted application. Then, the same link exists
between the components implementing these
requirements.
Consequently, it makes sense to consider that
links between the bricks of the problem have a
similar correspondence to links between the blocks
of the solution. In other terms, problem structure –
'specification molecule' – is isomorphic to solution
structure – 'design molecule'.
Our proposed process consists of three steps:
1. finding the components whose semantic
distance is the shortest with semantic atoms of
requirements;
2. organizing these components in order to
constitute the 'solution molecule', i.e. the initial
architecture of the application – this initial
design being made by replicating the problem
molecule and using solution atoms instead of
problem atoms – but these kinds of atoms do
not have exactly the same nature, so the initial
component interaction model has to be
optimized; and
3. optimizing the structure of solution molecule in
order to determine the best component
interaction model.
Within this approach, the initial component
interaction model – corresponding to the initial
design of the future application - is built from
relationships between application's requirements: an
association between two requirements will
determine an association between the two
components that cover these requirements.
3 SEMANTIC CARDS FOR
COMPONENTS
Semantic cards (semCards) formally describe the
small off-the-shelf components that are used to build
applications. Each semCard contains the goal of the
component and the list of its public functions with
their input and output data. We propose a semCard
has an XML representation where input and output
data are described with three main attributes:
ENASE 2008 - International Conference on Evaluation of Novel Approaches to Software Engineering
48