软件工程理论与实践 (吕云翔) 第七章 软件设计课后习题及答案解析

第七章 软件设计

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)请简述在软件设计的过程中需要遵循的规则。

在软件设计过程中需要遵循以下规则:

  1. 单一责任原则:每个模块或类只应该负责一个单一的功能。
  2. 开放封闭原则:设计应该对扩展开放,对修改封闭。
  3. 里氏替换原则:子类应该能够替换父类并保持一致的行为。
  4. 接口隔离原则:客户端不应该依赖于不需要的接口。
  5. 依赖倒置原则:高层模块不应该依赖于低层模块,而是依赖于抽象接口。
  6. 最少知识原则:一个对象应该与其直接的朋友进行交互,减少耦合。
  7. 高内聚低耦合:模块内部元素紧密相关,模块之间的依赖关系尽可能松散。
  8. 清晰明确的命名和注释:使用清晰、准确的命名和注释,提高代码可读性和维护性。

这些规则可以提高软件的可扩展性、可维护性和可读性,降低代码的复杂性和耦合度,提高软件的质量和可靠性。

(5)软件设计如何分类,分别有哪些活动?

软件设计可以从活动任务观点和工程管理观点分别对其进行分类。

从活动任务来看,软件设计是对软件需求进行数据设计、体系结构设计、接口设计、构件设计和部署设计。

从工程管理角度来看,软件设计分为概要设计(总体设计)和详细设计。前期进行概要设计,得到软件系统的基本框架。后期进行详细设计,明确系统内部的实现细节。

(6)什么是模块和模块化?软件设计为什么要模块化?

模块是数据说明、可执行语句等程序对象的集合,是构成程序的基本构件,可以被单独命名并通过名称来访间。模块化就是把系统或程序划分为独立命名并且可以独立访问的模块,每个模块完成一个特定的子功能。模块集成起来可以构成一个整体,完成特定的功能,进而满足用户的需求。

模块化软件设计的主要好处包括:

  1. 可维护性:模块化使得软件的各个功能模块相对独立,便于维护和修复问题。
  2. 可重用性:模块化设计使得模块可以在不同的项目中被重复使用,提高开发效率。
  3. 可扩展性:通过模块化的设计,可以方便地添加新的功能模块或扩展现有模块,适应变化的需求和业务规模的增长。
  4. 可测试性:模块化设计使得单个模块可以独立进行测试,简化了测试过程,提高软件质量。
  5. 可理解性:模块化设计将系统分解为相对独立的模块,便于理解和协作开发。

综上所述,模块化设计提供了结构化和组织化的方式,使得软件开发更加可控、可维护和可扩展。它支持代码重用、简化测试和维护工作,提高开发效率和软件质量。

(7)请简述用户界面设计应该遵循的原则。

用户界面设计应该遵循以下原则:

  1. 一致性:保持界面在整个应用程序中的外观和行为一致。
  2. 可视化层次结构:使用合适的视觉元素,突出显示重要信息,创建清晰的层次结构。
  3. 简洁性:避免复杂元素和冗余信息,保持界面简洁。
  4. 导航和反馈:提供明确的导航和反馈机制,帮助用户理解和操作界面。
  5. 易学性:使界面易于学习和使用,降低学习曲线。
  6. 可访问性:考虑各种用户需求,提供可调整的字体大小、对比度等功能。
  7. 反应性:快速响应用户操作,减少加载时间,提供即时反馈。
  8. 容错性:提供容错机制,减少用户错误的影响,提供明确的错误提示和帮助信息。

这些原则有助于创建用户友好、易于使用和令人愉悦的界面,提升用户体验。

(8)比较概要设计和详细设计的目标,并分别阐述概要设计和详细设计的内容。

概要设计的目标是定义系统的整体结构和核心功能,确定模块划分和模块间的关系。其内容包括系统架构、模块划分、接口设计和数据流设计。

详细设计的目标是在概要设计的基础上,详细规划各个模块的内部结构和实现细节。详细设计关注模块的具体实现和算法设计,包括函数和类的设计、数据结构和算法选择等。

简而言之,概要设计关注系统的整体框架和模块划分,详细设计则关注模块的具体实现和算法设计。

(9)如何理解抽象的概念?

抽象是人们认识复杂的客观世界时所使用的一种思维工具。在客观世界中,一定的事物、现象、状态或过程之间总存在着一些相似性,如果能忽略它们之间非本质性的差异,而把其相似性进行概括或集中,那么这种求同存异的思维方式就可以看做抽象。

相关推荐
Theodore_10225 小时前
4 软件工程——总体设计
java·开发语言·数据库·算法·java-ee·软件工程·设计
Theodore_10225 小时前
1 软件工程——概述
java·开发语言·算法·设计模式·java-ee·软件工程·个人开发
shinelord明11 小时前
【再谈设计模式】享元模式~对象共享的优化妙手
开发语言·数据结构·算法·设计模式·软件工程
人才程序员2 天前
QML z轴(z-order)前后层级
c语言·前端·c++·qt·软件工程·用户界面·界面
Theodore_10222 天前
3 需求分析
java·开发语言·算法·java-ee·软件工程·需求分析·需求
做人求其滴2 天前
GDPU软件工程习题(挖空版)
软件工程
MrFlySand_飞沙2 天前
软件工程
软件工程
jokr_2 天前
【软件工程复习】
软件工程
云空2 天前
《软件工程文档攻略:解锁软件开发的“秘籍”》
软件工程
人才程序员2 天前
【无标题】
c语言·前端·c++·qt·软件工程·qml·界面