Muutke küpsiste eelistusi

Software Engineering Design: Theory and Practice [Kõva köide]

  • Formaat: Hardback, 368 pages, kõrgus x laius: 254x178 mm, kaal: 740 g, 66 Tables, black and white; 60 Illustrations, black and white
  • Sari: Applied Software Engineering Series
  • Ilmumisaeg: 11-Jun-2012
  • Kirjastus: Auerbach
  • ISBN-10: 1439851689
  • ISBN-13: 9781439851685
Teised raamatud teemal:
  • Formaat: Hardback, 368 pages, kõrgus x laius: 254x178 mm, kaal: 740 g, 66 Tables, black and white; 60 Illustrations, black and white
  • Sari: Applied Software Engineering Series
  • Ilmumisaeg: 11-Jun-2012
  • Kirjastus: Auerbach
  • ISBN-10: 1439851689
  • ISBN-13: 9781439851685
Teised raamatud teemal:
Taking a learn-by-doing approach, Software Engineering Design: Theory and Practice uses examples, review questions, chapter exercises, and case study assignments to provide students and practitioners with the understanding required to design complex software systems. Explaining the concepts that are immediately relevant to software designers, it begins with a review of software design fundamentals.

The text presents a formal top-down design process that consists of several design activities with varied levels of detail, including the macro-, micro-, and construction-design levels. As part of the top-down approach, it provides in-depth coverage of applied architectural, creational, structural, and behavioral design patterns. For each design issue covered, it includes a step-by-step breakdown of the execution of the design solution, along with an evaluation, discussion, and justification for using that particular solution.



The book outlines industry-proven software design practices for leading large-scale software design efforts, developing reusable and high-quality software systems, and producing technical and customer-driven design documentation. It also:





Offers one-stop guidance for mastering the Software Design & Construction sections of the official Software Engineering Body of Knowledge (SWEBOK®) Details a collection of standards and guidelines for structuring high-quality code Describes techniques for analyzing and evaluating the quality of software designs

Collectively, the text supplies comprehensive coverage of the software design concepts students will need to succeed as professional design leaders. The section on engineering leadership for software designers covers the necessary ethical and leadership skills required of software developers in the public domain. The section on creating software design documents (SDD) familiarizes students with the software design notations, structural descriptions, and behavioral models required for SDDs.

Course notes, exercises with answers, online resources, and an instructors manual are available upon qualified course adoption. Instructors can contact the author about these resources via the author's website: http://softwareengineeringdesign.com/

Arvustused

intended for use as a textbook for an advanced course in software design. Each chapter ends with review questions and references. provides an overview of the software development process, something that would not be out of line in a course on software engineering including such topics as software process, software management, balancing conflicting values of stakeholders, testing, quality, and ethics. The author has principally focused on software design though, extracting the design phase from the surrounding software development lifecycle. Software design strategies are addressed, including structured, functional, and object oriented design. Theres also a chapter on UML (Unified Modeling Language). UML is a set of design paradigms (and tools) used for design modeling, and examples are provided throughout. The author also provides coded examples of UML diagrams in C++ and Java. To sum up, the intent of this book is educational on the topic of software design with emphasis on UML, software patterns and object oriented programming. There is also enough software engineering material that makes this text also appropriate for use in a software engineering, object oriented or software patterns lab course.Robert Schaefer, Research Engineer, MIT Haystack Observatory, writing in the New York Journal of Books

Preface xvii
Acknowledgments xix
About the Author xxi
Chapter 1 Introduction to Software Engineering Design
1(34)
Chapter Objectives
1(1)
Conceptual Overview
1(1)
Engineering Design
2(1)
Engineering Problem Solving
3(6)
Initial State
4(1)
Operational State
4(1)
Thinking about the Problem
5(1)
Problem Solution
6(1)
Goal State
6(3)
Software Engineering Design
9(1)
Why Study Software Engineering Design?
10(1)
Reasons for Studying Software Design in Product Development
10(1)
Reasons for Studying Software Design in Project Management
11(1)
Software Design Challenges
11(4)
Design Challenge 1 Requirements Volatility
12(1)
Design Challenge 2 Process
12(1)
Design Challenge 3 Technology
12(1)
Design Challenge 4 Ethical and Professional Practices
13(1)
Design Challenge 5 Managing Design Influences
13(1)
Stakeholders
14(1)
Development Organization's Structure
14(1)
Context of Software Design
15(2)
Software Design Process
17(5)
Software Architecture
18(1)
Detailed Design
19(1)
Interface Design
19(1)
Component Design
20(1)
Construction Design
20(1)
Human-Computer Interface Design
21(1)
Software Design Documentation
21(1)
Software Design Management
21(1)
Roles of the Software Designer
22(2)
Systems Engineer
23(1)
Software Architect
23(1)
Component Designer
23(1)
Software Design Fundamentals
24(8)
General Software Design Principles
24(1)
Modularization
25(1)
Abstraction
25(1)
Encapsulation
26(1)
Coupling
27(1)
Cohesion
28(1)
Separation of Interface and Implementation
29(1)
Completeness and Sufficiency
30(1)
Practical Software Design Considerations
30(1)
Design for Minimizing Complexity
31(1)
Design for Change
31(1)
Software Design Strategies
31(1)
Structured Design
31(1)
Object-Oriented Design
32(1)
Chapter Summary
32(1)
Review Questions
33(1)
References
34(1)
Chapter 2 Software Design with Unified Modeling Language
35(32)
Chapter Objectives
35(1)
Conceptual Overview
35(1)
What Is UML?
36(1)
Why Study UML?
37(1)
The UML's Fundamentals
37(3)
Structural Modeling
40(1)
Component Diagrams
40(3)
Logical versus Physical Components
42(1)
Class Diagrams
43(10)
Classes
43(1)
Name Compartment
44(1)
Attribute Compartment
44(1)
Operation Compartment
45(1)
Relationships
46(1)
Dependency
47(1)
Association
47(1)
Aggregation
48(1)
Composition
48(1)
Generalization
49(1)
Realization
50(3)
Deployment Diagrams
53(2)
Behavioral Modeling
55(1)
Use Case Diagrams
55(2)
Interaction Diagrams
57(6)
Communication Diagrams
58(1)
Sequence Diagrams
59(1)
Concurrency in Interaction Diagrams
59(4)
Chapter Summary
63(1)
Review Questions
63(1)
Chapter Exercises
64(1)
References
65(2)
Chapter 3 Principles of Software Architecture
67(40)
Chapter Objectives
67(1)
Conceptual Overview
67(1)
What Is Software Architecture?
68(2)
Why Study Software Architecture?
70(1)
Key Tasks in Architectural Design
70(6)
Identifying Stakeholders' Concerns
71(1)
Identifying Appropriate Architectural Views
71(1)
Identifying Architectural Styles and Patterns
71(1)
Identifying System Interfaces
72(1)
Identifying Impact of Architectural Decisions in Organization
72(1)
Impact on Customer Base
73(1)
Impact on Budget and Schedule
73(1)
Impact from Resource Availability
74(1)
Identifying the System's Major Components and Interfaces
74(1)
Evaluating and Validating the Architecture
74(1)
Introducing Policies for Design Synchronicity
75(1)
Problem Solving in Software Architecture
76(2)
Inputs
77(1)
Constraints
77(1)
Outputs
77(1)
Software Architecture Process
78(1)
Understand and Evaluate Requirements
79(9)
Elicitation
79(1)
Requirement Sources
79(2)
Elicitation Techniques
81(1)
Analysis
82(2)
Specification and Validation
84(1)
Specific
85(1)
Correct
86(1)
Complete
86(1)
Consistent
87(1)
Attainable
87(1)
Verifiable
88(1)
Designing the Architecture
88(15)
The 4 + 1 View Model
89(1)
User View
89(1)
Process View
90(1)
Physical View
90(1)
Development View
91(1)
Logical View
91(1)
Components and Connectors
92(1)
Designing Logical Architectural Elements Using Data Flows
92(1)
Designing Logical Architectural Elements Using Styles and Patterns
93(1)
Designing the Process Architecture
93(1)
Processes
93(1)
Threads
94(9)
Evaluating the Architecture
103(1)
Chapter Summary
104(1)
Review Questions
105(1)
Chapter Exercises
106(1)
References
106(1)
Chapter 4 Patterns and Styles in Software Architecture
107(32)
Chapter Objectives
107(1)
Conceptual Overview
107(1)
Architectural Styles and Patterns
108(3)
History of Architectural Styles and Patterns
108(1)
Architectural Pattern Classification
109(2)
Data-Centered Systems
111(5)
Blackboard Pattern
111(5)
Data Flow Systems
116(4)
Pipe and Filter Pattern
116(4)
Distributed Systems
120(7)
Client-Server Pattern
120(2)
Broker Pattern
122(5)
Interactive Systems
127(4)
Model-View-Controller Pattern
127(4)
Hierarchical Systems
131(5)
Main Program and Subroutine
131(2)
Layered Pattern
133(3)
Chapter Summary
136(1)
Review Questions
136(1)
Chapter Exercises
137(1)
References
137(2)
Chapter 5 Principles of Detailed Design
139(38)
Chapter Objectives
139(1)
Conceptual Overview
139(1)
What Is Detailed Design?
140(2)
Key Tasks in Detailed Design
142(1)
Detailed Design Process
142(1)
Understanding the Architecture and Requirements
143(1)
Creating Detailed Designs
144(25)
Interface Design
144(1)
External Interface Design
144(1)
Internal Interface Design
145(1)
Graphical User Interface Design
145(1)
Designing Internal Structure of Components
145(1)
Classes
146(1)
Interfaces, Types, Subtypes, Dynamic Binding, and Polymorphism
147(1)
Objects
148(1)
Design Principles for Internal Component Design
149(1)
Open-Closed Principle
149(7)
Liskov Substitution Principle
156(1)
Interface Segregation Principle
157(2)
Programming Styles in Detailed Design
159(1)
Function Names
160(2)
Variable Names
162(2)
Modeling Internal Behavior of Components
164(2)
Design Components Using Design Patterns
166(1)
Architectural versus Design Patterns
167(1)
Classification of Design Patterns
167(1)
Documenting Design Patterns
168(1)
Document the Software Design
169(4)
Interface Control Document
171(1)
Software Version Document
172(1)
Monitor and Control Implementation
173(1)
Chapter Summary
173(1)
Review Questions
174(1)
Chapter Exercises
175(1)
References
175(2)
Chapter 6 Creational Design Patterns in Detailed Design
177(38)
Chapter Objectives
177(1)
Conceptual Overview
177(1)
Creational Design Patterns
178(1)
Abstract Factory
178(10)
Problem
179(1)
Structure
179(2)
Implementation
181(7)
Benefits
188(1)
Factory Method
188(5)
Problem
189(1)
Structure
189(2)
Implementation
191(1)
Benefits
192(1)
Builder
193(8)
Problem
195(1)
Structure
195(2)
Implementation
197(1)
Benefits
197(4)
Prototype
201(6)
Problem
201(3)
Structure
204(1)
Implementation
205(2)
Benefits
207(1)
Singleton
207(4)
Problem
208(1)
Structure
208(1)
Implementation
209(2)
Benefits
211(1)
Chapter Summary
211(1)
Review Questions
211(1)
Chapter Exercises
212(2)
Reference
214(1)
Chapter 7 Structural and Behavioral Patterns in Detailed Design
215(44)
Chapter Objectives
215(1)
Conceptual Overview
215(1)
Structural Design Patterns
216(1)
Adapter
216(7)
Problem
217(2)
Structure
219(1)
Implementation
219(2)
Benefits
221(2)
Composite
223(9)
Problem
224(1)
Structure
225(2)
Implementation
227(4)
Benefits
231(1)
Facade
232(6)
Problem
234(1)
Structure
235(2)
Implementation
237(1)
Benefits
238(1)
Behavioral Design Patterns
238(1)
Iterator
238(14)
Problem
239(2)
Structure
241(4)
Implementation
245(6)
Benefits
251(1)
Observer
252(4)
Problem
252(1)
Structure
252(2)
Implementation
254(1)
Benefits
254(2)
Chapter Summary
256(1)
Review Questions
256(1)
Chapter Exercises
257(1)
Reference
258(1)
Chapter 8 Principles of Construction Design
259(34)
Chapter Objectives
259(1)
Conceptual Overview
259(1)
What Is Construction Design?
259(1)
Why Study Construction Design?
260(1)
Behavioral Construction Design
261(13)
Flow-Based Designs
261(1)
State-Based Designs
262(2)
Table-Based Designs
264(2)
Limited-Entry Decision Table
266(2)
Extended-Entry Decision Table
268(2)
Mixed-Entry Decision Table
270(1)
Table-Based Construction
270(1)
Programming Design Language
271(3)
Software Construction Using Styles
274(9)
Formatting Conventions
275(1)
Indentation
276(2)
Brace Placement
278(1)
Naming Conventions
279(3)
Documentation Conventions
282(1)
Documenting Files
282(1)
Documenting Functions
282(1)
Minimizing Complexity in Construction Design
283(1)
Quality Evaluation of Construction Design
284(6)
Peer Reviews
285(1)
Unit Testing
286(1)
Cyclomatic Complexity
286(4)
Chapter Summary
290(1)
Review Questions
290(1)
Chapter Exercises
291(1)
References
292(1)
Chapter 9 Human-Computer Interface Design
293(18)
Jacob Somervell
Chapter Objectives
293(1)
Conceptual Overview
293(1)
What Is Human-Computer Interface Design?
294(1)
Why Study Human-Computer Interface Design?
294(3)
General HCI Design Principles
297(2)
Human-Computer Interface Design Methods
299(6)
Getting Started
299(1)
Fidelity in Prototypes
300(1)
Metaphors
301(2)
Gestalt Principles
303(2)
Reusing Earlier Designs
305(1)
Evaluation of HCI Quality
305(4)
Usability Testing
305(1)
Analytic Testing
306(1)
Empirical Testing
307(2)
Chapter Summary
309(1)
Review Questions
309(1)
Chapter Exercises
309(1)
References
310(1)
Chapter 10 Software Design Management, Leadership, and Ethics
311(30)
Luis Daniel Otero
Chapter Objectives
311(1)
Conceptual Overview
311(1)
What Is Software Design Management?
312(1)
Why Study Design Management?
312(1)
The Concept of Quality
312(1)
Design Management Framework
313(1)
Planning Design Efforts
314(11)
Scoping
315(1)
Work Breakdown Structure
315(1)
Budgeting
316(1)
Organizing
317(1)
Linear Responsibility Chart
318(1)
Scheduling with Gantt Charts and Network Diagrams
318(4)
Probability of Time to Completion
322(2)
Establish Change Control Policy
324(1)
Implementation Phase
325(4)
Earned Value Management
326(3)
Termination Stage
329(1)
Leading the Design Effort
329(3)
Personality Traits and Leadership
329(1)
Personality Dimensions
329(1)
Traits of Effective Leaders
330(1)
Ethical Leadership
330(1)
Power
331(1)
Key Leadership Skills
332(3)
Communication Skills
332(1)
Networking Skills
333(1)
Motivation Skills
333(1)
Negotiation Skills
334(1)
Ethics in Software Design
335(1)
Public and Product Principles
335(1)
Judgment Principle
336(1)
Management Principle
336(1)
Chapter Summary
336(2)
Review Questions
338(1)
Chapter Exercises
339(1)
References
340(1)
Index 341
Carlos E. Otero, PhD, is assistant professor in the College of Technology and Innovation at the University of South Florida (USF). Prior to joining USF, Dr. Otero worked as assistant professor of software engineering in the Department of Mathematics and Computer Science at the University of Virginia, College at Wise, where he created the software engineering design course for Virginias first and (at the time of writing) only EAC/ABET-accredited BS in software engineering.

Prior to his academic career, Dr. Otero spent 11 years in the private industry, where he worked as design and development engineer in a wide variety of military computer systems, including satellite communications systems, command and control systems, wireless security systems, and unmanned aerial vehicle systems. Currently, he continues to consult with industry in the areas of requirements engineering, software systems analysis, design and development, quality assurance, and systems engineering.

Dr. Otero received his BS in computer science, MS in software engineering, MS in systems engineering, and PhD in computer engineering from Florida Institute of Technology in Melbourne. He has published over 35 technical publications in scientific peer-reviewed journals and conferences proceedings. He is a senior member of the Institute of Electrical and Electronics Engineers (IEEE), an active professional member of the Association for Computing Machinery (ACM), and a member of several journal editorial boards in technology and engineering.