The Design Model Design Engineering Concepts

J.E.D.I the number of links an object has and by the degree of interaction it has with other objects. For object-oriented design, two types of coupling are used.

1. Interaction Coupling is the measure of the number of message types an

object sends to another object, and the number of parameters passed with these message types. Good interaction coupling is kept to a minimum to avoid possible change ripples through the interface.

2. Inheritance Coupling is the degree to which a subclass actually needs the

features attributes and operations it inherits from its base class. One minimize the number of attributes and operations that are unnecessarily inherited. Cohesion is the measure to which an element attribute, operation, or class within a package contributes to a single purpose. For object-oriented design, three types of cohesion are used.

1. Operation Cohesion is the degree to which an operation focuses on a single

functional requirement. Good design produces highly cohesive operations.

2. Class Cohesion is the degree to which a class is focused on a single

requirement.

3. Specialization Cohesion address the semantic cohesion of inheritance.

Inheritance definition should reflect true inheritance rather than sharing syntactic structure. Refinement Refinement is also known as the process of elaboration. Abstraction complements refinement as they enable a software engineer to specify the behavior and data of a class or module yet suppressing low levels of detail. It helps the software engineer in creating a complete design model as the design evolves. Refinement helps the software engineer to uncover the details as the development progresses. Refactoring Refactoring is a technique that simplifies the design of the component without changing its function and behavior. It is a process of changing the software so that the external behavior remains the same and the internal structures are improved. During refactoring, the design model is checked for redundancy, unused design elements, inefficient or unnecessary algorithms, poorly constructed or inappropriate data structures or any other design failures. These are corrected to produce a better design.

4.1.2 The Design Model

The work product of the design engineering phase is the design model which consists of the architectural design, data design, interface design and component-level design. Architectural Design This refers to the overall structure of the software. It includes the ways in which it provides conceptual integrity for a system. It represents layers, subsystems and components. It is modeled using the package diagram of UML. Software Engineering 123 J.E.D.I Data Design This refers to the design and organization of data. Entity classes that are defined in the requirements engineering phase are refined to create the logical database design. Persistent classes are developed to access data from a database server. It is modeled using the class diagram. Interface Design This refers to the design of the interaction of the system with its environment, particularly, the human-interaction aspects. It includes the dialog and screen designs. Report and form layouts are included. It uses the class diagram and state transition diagrams. Component-level Design This refers to the design of the internal behavior of each classes. Of particular interest are the control classes. This is the most important design because the functional requirements are represented by these classes. It uses the class diagrams and component diagrams. Deployment-level Design This refers to the design of the how the software will be deployed for operational use. Software functionality, subsystems and components are distributed to the physical environment that will support the software. The deployment diagram will be used to represent this model. Software Engineering 124 J.E.D.I

4.2 Software Architecture

There is no general agreed definition for the term software architecture. It is interpreted differently depending upon the context. Some would describe it in terms of class structures and the ways in which they are grouped together. Others used it to describe the overall organization of a system into subsystem. Buschmann et al. 5 defined it as follows: A software architecture is a description of the sub-systems and components of a software system and the relationships between them. Subsystems and components are typically specified in different views to show the relevant functional and non-functional properties of a software system. The software architecture of a system is an artifact. It is the result of software design activity. It is this definition that is being followed by this section. Software architecture is the layered structure of software components and the manner in which these components interact, and the structure of the data that are used by these components. It involves making decisions on how the software is built, and normally, controls the iterative and incremental development of the software. Defining the architecture is important for several reasons. First, representation of software architecture enables communication between stakeholders end-users and developers. Second, it enables design decisions that will have a significant effect on all software engineering work products for the softwares interoperability. Lastly, it gives an intellectual view of how the system is structured and how its components work together. It is modeled using the Package Diagram of UML. A package is a model element that can contain other elements. It is a mechanism used to organize design elements and allows modularization of the software components.

4.2.1 Describing the Package Diagram

The Package Diagram shows the breakdown of larger systems into logical groupings of smaller subsystems. It shows groupings of classes and dependencies among them. A dependency exists between two elements if changes to the definition of one element may cause changes to other elements. Figure 4.1 shows the basic notation of the package diagram. 5 Buschmann, F., Meunier, R., Rohnert, H., Sommerland, P. and Stal, M., Pattern Oriented Software Architecture Volume 1, Chichester:John Wiley, 1996. Software Engineering 125