第七章 软件设计
1.判断题
(1)模块独立要求高耦合、低内聚。(×)
解析:模块独立要求低耦合、高内聚。高耦合意味着模块之间的依赖程度高,而低内聚意味着模块内部的功能关联性较低。
(2)软件设计说明书是软件概要设计的主要成果。(×)
解析:软件设计说明书是软件详细设计的主要成果。软件概要设计阶段的主要成果是概要设计文档,其中包含了系统的整体结构、模块划分和接口设计等信息。
(3)划分模块可以降低软件的复杂度和工作量,所以应该将模块分得越小越好。(×)
解析:划分模块的目的是将系统分解为相对独立的功能单元,但模块划分过细可能导致模块之间的通信和管理复杂化,增加开发和维护的工作量。
(4)软件设计中设计复审和设计本身一样重要,其主要作用是避免后期付出高代价。(√)
2.选择题
(1)模块的独立性是由内聚性和耦合性来度量的,其中内聚性是(C)。
A.模块间的联系程度
B.信息的隐藏程度
C.模块的功能强度
D.接口的复杂程度
解析:内聚性是指模块内部各个元素(函数、类等)之间的功能联系紧密程度,即一个模块内部的元素彼此相关联,共同完成一个特定的功能。内聚性高表示模块内的功能强度高,模块内的元素相互依赖性强。
(2)为了提高模块的独立性,模块之间最好是(C)。
A.公共环境耦合
B.控制耦合
C.数据耦合
D.特征耦合
(3)属于软件设计的基本原理是(D)。
A.数据流分析设计
B.变换流分析设计
C.事务流分析设计
D.模块化
(4)软件设计阶段一般又可分为(B)。
A.逻辑设计与功能设计
B.概要设计与详细设计
C.概念设计与物理设计
D.模型设计与程序设计
(5)软件设计一般分为总体设计和详细设计,它们之间的关系是(A)。
A.全局和局部
B.抽象和具体
C.总体和层次
D.功能和结构
3.简答题
(1)为什么说"高内聚、低耦合"的设计有利于提高系统的独立性?
"高内聚、低耦合"的设计有利于提高系统的独立性,因为高内聚使得模块内部功能紧密,独立完成特定任务,而低耦合减少了模块之间的相互依赖,使得模块可以独立开发、测试和维护。这样的设计使得系统中的模块可以独立修改和扩展,而不会对其他模块造成影响,提高了系统的灵活性和可维护性。
(2)请简述软件设计与需求分析的关系。
需求分析是对用户需求进行调研和分析的过程,为软件设计提供基础和指导。软件设计将需求转化为可执行的软件方案,并根据需求进行整体架构设计、模块划分和接口定义。需求分析和软件设计密切相关,需求分析指导设计的范围和功能,而设计过程中的反馈和需求变更也会影响需求分析。它们共同促进开发出满足用户需求的高质量软件系统。
(3)请简述软件设计的目标和任务。
软件设计是所有软件工程活动和随后的软件支持活动的基础。
目标:软件设计的目标是创建一个能够满足用户需求、可靠、可扩展和易于维护的软件系统
任务:
1)设计必须实现所有包含在分析模型中的明确需求,而且必须满足用户期望的所有隐含需求。
2)对于程序员、测试人员和维护人员而言,设计必须是可读的、可理解的指南。
3)设计必须提供软件的全貌,从实现的角度说明数据域、功能域和行为域。
(4)请简述在软件设计的过程中需要遵循的规则。
在软件设计过程中需要遵循以下规则:
- 单一责任原则:每个模块或类只应该负责一个单一的功能。
- 开放封闭原则:设计应该对扩展开放,对修改封闭。
- 里氏替换原则:子类应该能够替换父类并保持一致的行为。
- 接口隔离原则:客户端不应该依赖于不需要的接口。
- 依赖倒置原则:高层模块不应该依赖于低层模块,而是依赖于抽象接口。
- 最少知识原则:一个对象应该与其直接的朋友进行交互,减少耦合。
- 高内聚低耦合:模块内部元素紧密相关,模块之间的依赖关系尽可能松散。
- 清晰明确的命名和注释:使用清晰、准确的命名和注释,提高代码可读性和维护性。
这些规则可以提高软件的可扩展性、可维护性和可读性,降低代码的复杂性和耦合度,提高软件的质量和可靠性。
(5)软件设计如何分类,分别有哪些活动?
软件设计可以从活动任务观点和工程管理观点分别对其进行分类。
从活动任务来看,软件设计是对软件需求进行数据设计、体系结构设计、接口设计、构件设计和部署设计。
从工程管理角度来看,软件设计分为概要设计(总体设计)和详细设计。前期进行概要设计,得到软件系统的基本框架。后期进行详细设计,明确系统内部的实现细节。
(6)什么是模块和模块化?软件设计为什么要模块化?
模块是数据说明、可执行语句等程序对象的集合,是构成程序的基本构件,可以被单独命名并通过名称来访间。模块化就是把系统或程序划分为独立命名并且可以独立访问的模块,每个模块完成一个特定的子功能。模块集成起来可以构成一个整体,完成特定的功能,进而满足用户的需求。
模块化软件设计的主要好处包括:
- 可维护性:模块化使得软件的各个功能模块相对独立,便于维护和修复问题。
- 可重用性:模块化设计使得模块可以在不同的项目中被重复使用,提高开发效率。
- 可扩展性:通过模块化的设计,可以方便地添加新的功能模块或扩展现有模块,适应变化的需求和业务规模的增长。
- 可测试性:模块化设计使得单个模块可以独立进行测试,简化了测试过程,提高软件质量。
- 可理解性:模块化设计将系统分解为相对独立的模块,便于理解和协作开发。
综上所述,模块化设计提供了结构化和组织化的方式,使得软件开发更加可控、可维护和可扩展。它支持代码重用、简化测试和维护工作,提高开发效率和软件质量。
(7)请简述用户界面设计应该遵循的原则。
用户界面设计应该遵循以下原则:
- 一致性:保持界面在整个应用程序中的外观和行为一致。
- 可视化层次结构:使用合适的视觉元素,突出显示重要信息,创建清晰的层次结构。
- 简洁性:避免复杂元素和冗余信息,保持界面简洁。
- 导航和反馈:提供明确的导航和反馈机制,帮助用户理解和操作界面。
- 易学性:使界面易于学习和使用,降低学习曲线。
- 可访问性:考虑各种用户需求,提供可调整的字体大小、对比度等功能。
- 反应性:快速响应用户操作,减少加载时间,提供即时反馈。
- 容错性:提供容错机制,减少用户错误的影响,提供明确的错误提示和帮助信息。
这些原则有助于创建用户友好、易于使用和令人愉悦的界面,提升用户体验。
(8)比较概要设计和详细设计的目标,并分别阐述概要设计和详细设计的内容。
概要设计的目标是定义系统的整体结构和核心功能,确定模块划分和模块间的关系。其内容包括系统架构、模块划分、接口设计和数据流设计。
详细设计的目标是在概要设计的基础上,详细规划各个模块的内部结构和实现细节。详细设计关注模块的具体实现和算法设计,包括函数和类的设计、数据结构和算法选择等。
简而言之,概要设计关注系统的整体框架和模块划分,详细设计则关注模块的具体实现和算法设计。
(9)如何理解抽象的概念?
抽象是人们认识复杂的客观世界时所使用的一种思维工具。在客观世界中,一定的事物、现象、状态或过程之间总存在着一些相似性,如果能忽略它们之间非本质性的差异,而把其相似性进行概括或集中,那么这种求同存异的思维方式就可以看做抽象。