Software Design Fernando Brito e Abreu (fba@di.fct.unl.pt) Universidade Nova de Lisboa (http://www.unl.pt) QUASAR Research Group (http://ctp.di.fct.unl.pt/QUASAR) SWEBOK: the 10 Knowledge Areas � Software Requirements � Software Design � Software Construction � Software Testing � Software Maintenance � Software Configuration Management � Software Engineering Management � Software Engineering Process � Software Engineering Tools and Methods � Software Quality 5-Apr-05 Software Engineering / Fernando Brito e Abreu 2 1
Design is … � “the process of defining the architecture, components, interfaces, and other characteristics of a system or component” � … and “the result of that process.” [IEEE 610.12-90] 5-Apr-05 Software Engineering / Fernando Brito e Abreu 3 Summary � Software Design Fundamentals � Key Issues in Software Design � Software Structure and Architecture � Design Quality Analysis and Evaluation � Software Design Notations � Software Design Strategies and Methods 5-Apr-05 Software Engineering / Fernando Brito e Abreu 4 2
Summary � Software Design Fundamentals � Key Issues in Software Design Key Issues in Software Design Key Issues in Software Design � � � Software Structure and Architecture Software Structure and Architecture Software Structure and Architecture � � � Design Quality Analysis and Evaluation Design Quality Analysis and Evaluation Design Quality Analysis and Evaluation � � � Software Design Notations Software Design Notations Software Design Notations � � � Software Design Strategies and Methods Software Design Strategies and Methods Software Design Strategies and Methods � � 5-Apr-05 Software Engineering / Fernando Brito e Abreu 5 Software design is a 2-step process � Architectural design � Architectural design describes how software is decomposed and organized into components (the software architecture) [IEEEP1471-00] � Detailed design � Detailed design describes the specific behavior of those components 5-Apr-05 Software Engineering / Fernando Brito e Abreu 6 3
Important design principles � Abstraction � Coupling and cohesion � Decomposition and modularization � Encapsulation/information hiding � Separation of interface and implementation � Sufficiency, completeness and primitiveness 5-Apr-05 Software Engineering / Fernando Brito e Abreu 7 Abstraction � … is a concept or idea not associated with any specific instance � … is the process of forgetting information so that things that are different can be treated as if they were the same. � … is the process of combining multiple smaller operations into a single unit that can be referred to by name. � … is the process of picking out (abstracting) common features of objects and procedures. � Abstraction can have different flavors: � procedural abstraction � data abstraction � control abstraction � Abstraction leads us to different views of a system … 5-Apr-05 Software Engineering / Fernando Brito e Abreu 8 4
Abstraction system assembly functionality configuration mgmt. performance scalability throughput Implementation Design View View Requirements View Process View Deployment View system topology methods distribution people delivery plans installation activities control 5-Apr-05 Software Engineering / Fernando Brito e Abreu 9 Coupling and cohesion � Coupling is defined as the strength of the relationships between modules � High coupling is usually considered harmful � Cohesion is defined by how the elements making up a module are related � Low cohesion is usually considered harmful 5-Apr-05 Software Engineering / Fernando Brito e Abreu 10 5
Decomposition and modularization � Divide ut regnes ... is a fundamental engineering principle! � The “divide-and-conquer” strategy is applied in most industry fields to deal with complexity, specialization and mass production � This is specially important for breaking large sw products into a number of smaller independent parts (components) � The decomposition usually aims at placing different functionalities or responsibilities in different components 5-Apr-05 Software Engineering / Fernando Brito e Abreu 11 Decomposition and modularization � Advantages : � design and develop different parts of the same system by different people / distinct companies � handle large systems complexity (split, simpler parts, can be better understood individually) � test systems in a parallel fashion (different people) � substitute or repair defective parts of a system without interfering with other parts � reuse existing parts in different contexts � divide the system in configuration units to be put under CM � restrict change propagation . 5-Apr-05 Software Engineering / Fernando Brito e Abreu 12 6
Modularity: beware of synonyms! � Categories (Booch) � Namespaces (C++) � Subsystems (Jacobson) � Packages (Java) � Domains (Page-Jones) � Units (Delphi) � Clusters (B. Meyer) � Components ... � Packages (UML) All are class aggregates … 5-Apr-05 Software Engineering / Fernando Brito e Abreu 13 Modularity is often not guided by structural criteria! 0 . 7 0 . 6 0 . 5 0 . 4 0 . 3 0 . 2 0 . 1 0 IM P _ M M F O P T _ M M F S p e c if ic a t io n 5-Apr-05 Software Engineering / Fernando Brito e Abreu 14 7
Encapsulation / information hiding � Stands for grouping and packaging the elements and internal details of an abstraction and making those details inaccessible � e.g. C++ include files, Java Interfaces 5-Apr-05 Software Engineering / Fernando Brito e Abreu 15 Separation of interface and implementation � Involves defining a component by specifying a public interface, known to the clients, separate from the details of how the component is realized � e.g. Web services (WSDL) 5-Apr-05 Software Engineering / Fernando Brito e Abreu 16 8
Sufficiency, completeness and primitiveness � A software component should capture all the important characteristics of an abstraction, and nothing more (aka “separation of concerns”) � e.g. distribution concerns should be treated separately from security concerns or from transactional concerns � This principle is related with the one of decomposition and modularization and has given rise to Aspect- Oriented Development 5-Apr-05 Software Engineering / Fernando Brito e Abreu 17 Summary � Software Design Fundamentals � Key Issues in Software Design Software Structure and Architecture � Software Structure and Architecture Software Structure and Architecture � � Design Quality Analysis and Evaluation � Design Quality Analysis and Evaluation Design Quality Analysis and Evaluation � � Software Design Notations � Software Design Notations Software Design Notations � � Software Design Strategies and Methods � Software Design Strategies and Methods Software Design Strategies and Methods � � 5-Apr-05 Software Engineering / Fernando Brito e Abreu 18 9
Design Aspects � Some design issues (aka “aspects”) are not specific to a given application domain � they are “cross-cutting” the system’s functionality � Aspects tend not to be units of software’s functional decomposition � but rather to be properties that affect the performance or semantics of the components 5-Apr-05 Software Engineering / Fernando Brito e Abreu 19 Design Aspects (examples) � Concurrency � How to decompose the software into processes, tasks, and threads � How to deal with related efficiency, atomicity, synchronization, and scheduling issues. � Control and Handling of Events � How to organize data and control flow � How to handle reactive and temporal events through various mechanisms such as implicit invocation and call-backs � Distribution of Components � How to distribute the software across the hardware � How the components communicate � How middleware can be used to deal with heterogeneous sw 5-Apr-05 Software Engineering / Fernando Brito e Abreu 20 10
Design Aspects (more examples) � Error and Exception Handling and Fault Tolerance � How to prevent and tolerate faults � How to deal with exceptional conditions � How to degrade nicefully � Interaction and Presentation � How to structure and organize the interactions with users and the presentation of information � e.g. separation of presentation and business logic using the Model- View-Controller approach � Note : specifying user interface details, is a task of user interface design (a part of Sw Ergonomics, not Software Engineering ) � Data Persistence � How long-lived data are to be handled 5-Apr-05 Software Engineering / Fernando Brito e Abreu 21 Summary � Software Design Fundamentals � Key Issues in Software Design � Software Structure and Architecture Design Quality Analysis and Evaluation � Design Quality Analysis and Evaluation Design Quality Analysis and Evaluation � � Software Design Notations � Software Design Notations Software Design Notations � � Software Design Strategies and Methods � Software Design Strategies and Methods Software Design Strategies and Methods � � 5-Apr-05 Software Engineering / Fernando Brito e Abreu 22 11
Recommend
More recommend