软件工程:软件设计
简介
本博客围绕软件工程中至关重要的“软件设计”展开,系统介绍了软件设计的基本概念、原则以及详细的模块化、体系结构、算法与人机界面设计方法。内容依托典型关卡式学习方式分为五大模块:从基本设计原则的理解,到模块内聚与耦合的优化,再到软件体系结构的构件与视图模型,深入介绍了详细设计中的算法描述与文档构建,最终以人机界面设计的用户中心原则收尾。无论是初学者理解基本概念,还是开发者回顾设计要点,本博客都提供了清晰、实用的知识支持。通过题目练习和答案解析,读者不仅能够巩固理论,还能在实践中强化应用能力。
第1关:软件设计的概念和原则
任务描述
本关任务:掌握软件设计的概念和原则。
相关知识
为顺利通关,你需要掌握:1.什么是软件设计,2.软件设计的基本原则。
什么是软件设计
软件设计是把许多事物和问题抽象起来,并且抽象它们不同的层次和角度。将问题或事物分解并模块化使得解决问题变得容易,分解的越细模块数量也就越多,它的副作用就是使得设计者考虑更多的模块之间耦合度的情况。
抽象的示意图如图1所示。以人的外表为例,在设计人的外表时,需要把形体、衣着等方面进行抽象,但是性格不属于人的外表,因此这方面不需要抽象进来。软件设计也是如此,它是一个将需求转变为软件陈述(表达)的过程。
图1 抽象的示意图
软件设计是从软件需求规格说明书出发,根据需求分析阶段确定的功能设计软件系统的整体结构、划分功能模块、确定每个模块的实现算法以及编写具体的代码,形成软件的具体设计方案。
软件设计的基本原则
软件设计具有以下基本原则:
可靠性
软件可靠性意味着该软件在测试运行过程中避免可能发生故障的能力,且一旦发生故障后,具有解脱和排除故障的能力。软件系统的可靠性直接关系到自身的声誉和生存发展竞争能力;
健壮性
又称鲁棒性,是指软件对于规范要求以外的输入能够判断出这个输入不符合规范要求,并能有合理的处理方式。软件健壮性是一个比较模糊的概念,但是却是非常重要的软件外部量度标准。软件设计的健壮与否直接反应了分析设计和编码人员的水平;
可修改性
以科学的方法设计软件,使之具有良好的结构和完备的文档,当系统面临调整的需求时,软件易于修改以达到目标;
容易理解
软件的可理解性是其可靠性和可修改性的前提。它并不仅仅是文档清晰可读的问题,更要求软件本身具有简单明了的结构;
程序简便
软件程序要简单,代码应简洁;
可测试性
可测试性就是设计一个适当的数据集合,用来测试所建立的系统,并保证系统得到全面的检验;
效率性
软件的效率性一般用程序的执行时间和所占用的内存容量来度量。在达到原理要求功能指标的前提下,程序运行所需时间愈短和占用存储容量愈小,则效率愈高;
标准化原则
在结构上实现开放,基于业界开放式标准,符合国家和信息产业部的规范;
先进性
满足客户需求,系统性能可靠,易于维护;
可扩展性
软件设计完要留有升级接口和升级空间。对扩展开放,对修改关闭;
安全性
安全性要求系统能够保持用户信息、操作等多方面的安全要求,同时系统本身也要能够及时修复、处理各种安全漏洞,以提升安全性能。
作答要求
根据相关知识,按照要求完成右侧选择题任务。作答完毕,通过点击“测评”,可以验证答案的正确性。
参考资料
【1】软件设计的概念 软件设计(把事物抽象和模块化)_百度百科
【2】软件设计的基本原则 软件设计原则_百度百科
题目
-
1、
软件设计是在()的基础上,设计软件系统的整体结构、划分功能模块、确定每个模块的实现算法以及编写具体的代码,形成软件的具体设计方案。
A、软件需求规格说明书
B、开发人员自行决定
C、领导提供要求
-
2、
软件设计的基本原则包括下面哪些内容()
A、可靠性
B、健壮性
C、可修改性
D、容易理解
E、可测试性
F、安全性
答案
A,ABCDEF
思考
理论补充:
-
面向对象设计的五大基本原则(SOLID):
-
SRP(单一职责)
-
OCP(开闭原则)
-
LSP(里氏替换)
-
ISP(接口隔离)
-
DIP(依赖反转)
-
第2关:模块化设计:内聚与耦合
任务描述
本关任务:掌握模块化设计,熟练掌握内聚与耦合的概念。
相关知识
为了完成本关任务,你需要掌握:1. 什么是模块化设计,2. 内聚与耦合的含义。
什么是模块化设计
所谓的模块化设计,简单地说就是将产品的某些要素组合在一起,构成一个具有特定功能的子系统,将这个子系统作为通用性的模块与其他产品要素进行多种组合,构成新的系统,产生多种不同功能或相同功能、不同性能的系列产品。
模块是模块化设计的功能单元,具有相对独立性、可复用性和可维护性。
模块化设计的优点:
灵活架构,焦点分离;
方便模块间组合、分解;
方便单个模块功能调试、升级;
多人协作互不干扰。
随着软件系统的日益复杂,软件的模块化设计也越来越复杂,内聚与耦合的设计越发重要。
内聚与耦合
内聚度是信息隐藏和局部化概念的自然扩展,它标志着一个模块内部各成分彼此结合的紧密程度。好处也很明显,当把相关的任务分组后去阅读就容易多了。 设计时应该尽可能的提高模块内聚度,从而获得较高的模块独立性。
耦合度则是指模块之间的关联程度的度量。耦合度取决于模块之间接口的复杂性,进入或调用模块的位置等。与内聚度相反,在设计时应尽量追求松散耦合的系统。
高内聚,低耦合是软件模块化设计的核心思想。内聚和耦合之间的关系如图1所示,其中,一个小圆圈代表一个小模块,小模块内聚在一起形成大模块,大模块与大模块进行耦合。
图1 内聚与耦合的关系示意图
作答要求
根据相关知识,按照要求完成右侧选择题任务。作答完毕,通过点击“测评”,可以验证答案的正确性。
参考资料
高内聚低耦合 高内聚低耦合_百度百科
题目
-
1、
软件模块化设计的核心思想是()
A、高内聚,高耦合
B、高内聚,低耦合
C、低内聚,高耦合
D、低内聚,低耦合
答案
B
思考
理论补充:
-
7种内聚类型(从低到高):偶然、逻辑、时间、过程、通信、顺序、功能内聚。
-
6种耦合类型(从高到低):内容、公共、控制、标记、数据、无耦合。
第3关:软件体系结构
任务描述
本关任务:掌握软件体系结构相关知识。
相关知识
为了完成本关任务,你需要掌握:
什么是软件体系结构;
软件体系结构的组成部分;
软件体系结构的设计模式有哪些;
如何实现软件体系结构建模。
什么是软件体系结构
软件体系结构是具有一定形式的结构化元素,即构件的集合,包括处理构件、数据构件和连接构件。处理构件负责对数据进行加工,数据构件是被加工的信息,连接构件把体系结构的不同部分组合连接起来。这一定义注重区分处理构件、数据构件和连接构件。
软件体系结构是软件系统的结构、行为和属性的高级抽象,它处理的是关于整体系统结构设计和描述方面的问题。
软件体系结构的意义:
是系统开发中不同参与者进行交流和信息传播的媒介;
是早期设计决策的体现;
可以反映软件的的质量以及瓶颈;
本身也是一种可传递可重用的模型。
软件体系结构的组成部分
软件体系结构组成部分:
构件(Component):一组代码,或程序块或一个独立的程序,如 SQL 服务器等;
连接件(Connector):关系的抽象,用以表示构件之间的相互作用,如过程调用、管道等;
配置(Configuration):用于对构件与连接件的语义说明;
端口:表示构件与外部环境的交互点;
角色:连接件的接口。
软件体系结构的设计模式有哪些
设计模式(Design pattern)是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的,代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。
设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。
设计模式分为三类:创建型模式、结构型模式和行为型模式。以下是具体的分类:
创建型模式:单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式;
结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式;
行为型模式:模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式(责任链模式)、访问者模式。
设计模式具有六大原则:
单一原则(Single Responsibility Principle):一个类只负责一项职责,尽量做到类的只有一个行为原因引起变化;
里氏替换原则(LSP liskov substitution principle):子类可以扩展父类的功能,但不能改变原有父类的功能;
依赖倒置原则(dependence inversion principle):面向接口编程;(通过接口作为参数实现应用场景)抽象就是接口或者抽象类,细节就是实现类;
接口隔离(interface segregation principle):建立单一接口;
迪米特原则(law of demeter LOD):最少知道原则,尽量降低类与类之间的耦合;
开闭原则(open closed principle):用抽象构建架构,用实现扩展原则。
软件体系结构建模
软件体系结构模型:
结构模型:最直观最普遍的建模方法,通过体系结构的构件、连接件和其他概念来刻画结构,力图通过结构,来反映系统的重要语义内容;
框架模型:与结构模型类似,但不侧重结构的细节,而侧重整体的结构,主要以一些特殊的问题作为目标,建立只针对和适应这类问题的结构;
动态模型:对结构或框架模型的补充,研究系统的“大粒度”的行为及其性质,如系统总体结构的配置或演化、通信通道或计算过程的建立或拆除等方面的行为;
过程模型:研究构造系统的步骤与过程,因而其机构是遵循某些脚本的结果;
功能模型:体系机构的一组功能构件,按照层次组成,下层向上层提供服务,可以看作为一种特殊的框架模型。
所谓的“4 + 1”视图模型是由逻辑视图、开发视图、进程视图、物理视图和场景视图一起构成的,如图1所示:
图1 “4 + 1”视图模型
逻辑视图:系统提供给最终用户的服务。逻辑视图中使用的标记符号如图2所示:
图2 逻辑视图中使用的标记符号
开发视图:侧重于软件模块的组织管理,开发视图的标记符号如图3所示:
图3 开发视图的标记符号
进程视图:侧重系统的运行特性,并关注一些非功能性需求,如系统性能与可用性。强调:并发性,分布性,系统集成性,容错性等。进程视图的标记符号如图4所示:
图4 进程视图的标记符号
物理视图:重视目标程序的静态位置问题,决定拓扑结构,系统安装,通讯方面的问题。物理视图的标记符号如图5所示:
图5 物理视图的标记符号
场景视图:重要系统获得的抽象,将其他4个视图联系起来。本地呼叫的一个原型如图6所示:
图6 场景视图的标记符号
作答要求
根据相关知识,按照要求完成右侧选择题任务。作答完毕,通过点击“测评”,可以验证答案的正确性。
参考资料
【1】软件体系结构 软件体系结构(学科名称)_百度百科
【2】23种设计模式 JAVA设计模式总结之23种设计模式 - pony1223 - 博客园
【3】设计模式六大原则 设计模式六大原则 - 百度文库
题目
-
1、
软件体系结构是具有一定形式的结构化元素,软件体系结构的意义包括以下哪些():
A、本身是一种可传递可重用的模型。
B、是系统开发中不同参与者进行交流和信息传播的媒介。
C、增加了软件设计的复杂性,不应该提倡
D、可以反映软件的的质量以及瓶颈。
E、是早期设计决策的体现。
-
2、
软件体系结构组成部分有哪些():
A、构件
B、连接件
C、配置
D、端口
E、角色
-
3、
设计模式分为三类:创建型模式、结构型模式和行为型模式。请问下面属于结构型模式的有():
A、抽象工厂模式
B、代理模式
C、观察者模式
-
4、
设计模式的六大原则中,下面()与“高内聚,低耦合”是思想相符合
A、里氏替换原则
B、开闭原则
C、单一原则
D、迪米特原则
-
5、
结构模型是软件体系结构建模中最直观最普遍的建模方法,通过体系结构的构件、连接件和其他概念来刻画结构;而()框架模型,与结构模型类似,但不侧重结构的细节,而侧重整体的结构。
A、过程模型
B、框架模型
C、动态模型
D、功能模型
-
6、
在“4 + 1”视图模型中,进程视图侧重系统的运行特性,并关注一些非功能性需求,强调:并发性,分布性,系统集成性,容错性等。而开发视图则侧重于()。
A、软件模块的组织管理
B、系统性能与可用性。
C、系统提供给最终用户的服务
D、决定拓扑结构,系统安装,通讯方面
答案
ABDE,ABCDE,B,D,B,A
思考
理论补充:
-
架构风格介绍:如MVC、三层架构、微服务、管道-过滤器、事件驱动架构等。
-
设计模式与体系结构的关系:模式可用于实现架构中的组件交互。
第4关:详细设计(算法设计)
任务描述
本关任务:掌握在软件设计中如何进行详细设计。
相关知识
为了完成本关任务,你需要掌握:什么是软件详细设计,它包括哪些方面的内容。
软件详细设计
详细设计的过程即是软件真正开始构建的过程,目的是为系统结构图中的每一个模块确定采用的算法,包括数据结构,用某种选定的表达工具给出清晰的描述,使程序员可以将这种描述直接翻译为某种程序代码。
详细设计的实施者是软件工程师、程序员或者程序开发人员。详细设计分为面向对象的软件详细设计与结构化软件详细设计两类。
同时,在软件详细设计阶段,软件测试的工作必不可少。因此,详细设计阶段的所有输出产物有:
详细设计文档,或者叫详细设计说明书;
源代码文档;
软件用户手册;
交付阶段的软件项目计划;
交付阶段的软件配置管理计划;
交付阶段的软件质量保证计划;
验收测试计划;
进度报告、配置状态报告等。
详细设计说明书是该阶段比较重要的产物,详细设计的质量决定着软件最终的使用效果。大概的模板如下:
1.引言
2.编写目的:阐明编写详细设计说明书的目的,指明读者对象;
3.项目背景:应包括项目的来源和主管部门等;
4.定义:列出本文档中所用到的专门术语的定义和缩写词的愿意;
5.参考资料: 5.1 列出有关资料的作者、标题、编号、发表日期、出版单位或资料来源; 5.2 项目经核准的计划任务书、合同或上级机关的批文;项目开发计划;需求规格说明书;概要设计说明书;测试计划(初稿);用户操作手册; 5.3 文档所引用的资料、软件开发的标准或规范;
6.总体设计
7.需求概述;
8.软件结构:如给出软件系统的结构图;
9.程序描述
10.逐个模块给出功能、性能、输入项目和输出项目的说明;
11.算法:模块所选用的算法;
12.程序逻辑:详细描述模块实现的算法,可采用:标准流程图;PDL语言;N-S图;判定表等描述13.算法的图表;
14.存储分配和限制条件接口;
15.测试要点:给出测试模块的主要测试要求。
作答要求
根据相关知识,按照要求完成右侧选择题任务。作答完毕,通过点击“测评”,可以验证答案的正确性。
参考资料
软件详细设计 软件详细设计 - 百度文库
题目
-
1、
详细设计阶段的所有输出产物有():
A、详细设计说明书
B、源代码文档
C、交付阶段的软件配置管理计划
D、需求规格说明书
E、验收测试计划
-
2、
详细描述模块实现的算法,可采用哪些图表进行描述()。
A、标准流程图
B、PDL 语言
C、N-S图
D、判定表
答案
ABCE,ABCD
思考
理论补充:
-
常见算法策略:贪心、动态规划、回溯、分治等的适用场景。
-
数据结构在模块中的使用原则:如链表适用于频繁插入删除,哈希适合快速查找。
第5关:人机界面设计
任务描述
本关任务:掌握人机界面设计中的相关要素。
相关知识
为了完成本关任务,你需要掌握:1.什么是人机界面,2.人机界面的设计原则。
什么是人机界面
所谓计算机系统,是指计算机硬件、软件和人共同构成的人机系统。人机界面是一类特殊的软件,它帮助实现计算机硬件、软件和人三者之间的恰当联系和协调一致。简单地说,人机界面是专门处理人机交互活动的软件,它是人与硬件、软件的交叉部分。人机界面设计示意图如图1所示:
图1 人机界面设计示意图
人机界面学是计算机科学、人类工程学和认知心理学等学科相结合的产物。它的研究内容很广,包括心理学领域的认知科学、软件工程领域的系统构架技术、信息处理领域的语音处理技术和图像处理技术、人工智能领域的智能控制技术。
除此之外,它还涉及哲学、医学、语言学、社会学等,是名副其实的跨学科、综合性的科学。
人机界面的表现形式有:
图形用户界面;
直接操作用户界面;
多媒体用户界面;
多通道用户界面。
在实际的软件设计过程中,人机界面设计占有重要的地位,它的设计决定着用户的体验感,不可轻视。
人机界面的设计原则
以用户为中心的基本设计原则
在系统的设计过程中,设计人员要抓住用户的特征,发现用户的需求。在系统整个开发过程中要不断征求用户的意见,向用户咨询。最好的方法就是让真实的用户参与开发,这样开发人员就能正确地了解用户的需求和目标,系统就会更加成功。
顺序原则
即按照处理事件顺序、访问查看顺序(如由整体到单项,由大到小,由上层到下层等)与控制工艺流程等设计监控管理和人机对话主界面及其二级界面。
功能原则
即按照对象应用环境及场合具体使用功能要求,各种子系统控制类型、不同管理对象的同一界面并行处理要求和多项对话交互的同时性要求等,设计分功能区分多级菜单、分层提示信息和多项对话栏并举的窗口等的人机交互界面,从而使用户易于分辨和掌握交互界面的使用规律和特点,提高其友好性和易操作性。
一致性原则
包括色彩的一致, 操作区域一致,文字的一致。即一方面界面颜色、形状、字体与国家、国际或行业通用标准相一致。另一方面界面颜色、形状、字体自成一体,不同设备及其相同设计状态的颜色应保持一致。
界面细节美工设计的一致性使运行人员看界面时感到舒适,从而不分散他的注意力。对于新运行人员,或紧急情况下处理问题的运行人员来说,一致性还能减少他们的操作失误。
频率原则
即按照管理对象的对话交互频率高低设计人机界面的层次顺序和对话窗口莱单的显示位置等,提高监控和访问对话频率。
重要性原则
即按照管理对象在控制系统中的重要性和全局性水平,设计人机界面的主次菜单和对话窗口的位置和突显性,从而有助于管理人员把握好控制系统的主次,实施好控制决策的顺序,实现最优调度和管理。
面向对象原则
即按照操作人员的身份特征和工作性质,设计与之相适应和友好的人机界面。根据其工作需要,应该以弹出式窗口显示提示、引导和帮助信息,从而提高用户的交互水平和效率。
人机界面设计的黄金原则是:
让用户拥有控制权;
减少用户的记忆负担;
保持界面一致。
作答要求
根据相关知识,按照要求完成右侧选择题任务。作答完毕,通过点击“测评”,可以验证答案的正确性。
参考资料
人机界面 用户界面_百度百科
题目
-
1、
在实际的软件设计过程中,人机界面设计占有重要的地位,它的设计决定着用户的体验感,不可轻视。人机界面的表现形式有()。
A、图形用户界面
B、人机随机应答界面
C、直接操纵用户界面
D、多通道用户界面
E、多媒体用户界面
-
2、
在系统的人机界面设计过程中,设计人员要抓住用户的特征,发现用户的需求,在系统整个开发过程中要不断征求用户的意见,向用户咨询。这属于人机界面设计原则中的哪个原则?()
A、重要性原则
B、功能原则
C、一致性原则
D、以用户为中心
答案
ACDE,D
思考
理论补充:
-
GUI设计的“十大可用性启发式”(Jakob Nielsen 提出),例如一致性、容错、最小化记忆负担。
-
设计系统概念:如Material Design、Ant Design,强调一致性与可维护性。
总结
通过对软件设计五个核心环节的学习,我们可以看出:良好的软件设计不仅仅是编码的前提,更是保证系统稳定性、可维护性与用户体验的基础。从第一关中抽象与原则的认识,到第二关高内聚低耦合思想的掌握,再到第三关架构设计中的模式与建模方法,每一环节都强调了结构与思维的严谨性。第四关详细设计强调算法清晰和文档规范,而第五关则进一步延伸到人机交互的易用性与用户参与。整体内容将理论与实践紧密结合,为软件开发提供了结构化的学习路线。希望读者能够结合这些知识进行实际项目设计与优化,形成自己的设计思维,最终实现高效、可靠、用户友好的软件系统。