版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第二章软件设计的基本概念,2.1设计过程,2.2设计原则,2.3启发式规则,软件设计宣言:米切尔卡普尔“什么是设计?设计就是你站在两个世界里,技术世界和人类的目标世界,你试图把这两个世界结合起来。罗马建筑批评家维特鲁威提出“设计好的建筑应该坚固、实用、赏心悦目。”设计阶段:从项目管理的角度来看,软件设计可以分为概要设计阶段和详细设计阶段。从技术角度来看,传统的结构化方法将软件设计分为四个部分:体系结构设计、数据设计、接口设计和过程设计。面向对象方法将软件设计分为四个部分:体系结构设计、类设计/数据设计、接口设计和组件级设计。结构化设计与结构化分析的关系:总体设计过程:首先,寻找不同的方案来实现
2、目标系统;然后分析员从这些备选方案中选择几个合理的方案,并选择最佳方案推荐给用户和用户部门的负责人;分析师应该为这个最佳方案进一步设计软件结构,设计必要的数据库,确定测试需求并制定测试计划。必要性:总体设计可以站在全局的高度,花费更少的成本,从更抽象的层面分析比较各种可能的系统实现方案和软件结构,选择最佳的方案和最合理的软件结构,从而以更低的成本开发出更高质量的软件系统。5.1设计过程包括两个主要阶段:系统设计阶段,确定系统的具体实施方案,设想备选方案,选择合理的方案,推荐最佳方案,结构设计阶段,确定功能分解设计的软件结构设计数据库,制定测试计划,编写文档,评审和复审。典型的总体设计过程包括以
3、下九个步骤:1 .设想备选方案,根据需求分析阶段得到的数据流图,考虑各种可能的实施方案,努力选择最佳方案。2.选择合理的方案从上一步获得的一系列备选方案中选择几个合理的方案。每个合理的程序分析员都应该准备以下四个文件:系统流程图;组成系统的物理元素列表;成本/效益分析;实现该系统的时间表。3.推荐最佳方案分析员应综合分析比较各种合理方案的优缺点,推荐最佳方案,并对推荐方案制定详细的实施方案。4.功能分解:首先设计结构,然后设计流程。结构设计决定了程序由哪些模块组成以及这些模块之间的关系;过程设计决定了每个模块的过程。结构设计是总体设计阶段的任务,工艺设计是详细设计阶段的任务。5.设计软件结构通
4、常,程序中的一个模块完成一个适当的子功能。模块应该被组织成一个好的层次系统。软件结构可以用层次图或结构图来描述。如果数据流图已经被细化到适当的级别,软件结构可以直接从数据流图中映射出来,这就是面向数据流的设计方法。6.设计数据库对于那些需要使用数据库的应用系统,软件工程师应该根据需求分析阶段确定的系统数据需求进一步设计数据库。7.制定测试计划在软件开发的早期考虑测试问题可以促使软件设计者在设计中重视提高软件的可测试性。8.书写文档应该使用正式的文档来记录整体设计的结果。在此阶段应完成的文件通常有以下类型:(1)系统描述;(2)用户手册;(3)测试计划;(4)详细的实施计划;(5)数据库设计结果
5、。9.在审查和复审结束时,应对总体设计的结果进行严格的技术审查和管理复审。5.2设计原则,5.2.1模块化,模块:它是由边界元素定义的相邻程序元素的序列,并由整体标识符表示。模块化:程序分为独立命名和可访问的模块,每个模块完成一个子功能,这些模块集成为一个整体,可以完成指定的功能,满足用户的需求。为什么模块化?模块化是软件为了让复杂的大型程序由人类智能管理而应该具备的唯一属性。如果一个大程序只有一个模块,人们就很难理解。根据:如果C(P1)C(P2),显然E(P1)E(P2)根据人类解决一般问题的经验,C(P1 ), C(P2)C(P1)C(P2)归纳起来,得到如下不等式E(P1 P2)E(P
6、1) E(P2),每个程序都有一个最合适的相应的模块化和软件成本,功能模块化:利用模块化的原理可以使软件结构清晰,这不仅易于设计,而且易于阅读和理解。模块化使软件易于测试和调试,有助于提高软件的可靠性。模块化可以提高软件的可修改性。模块化也有助于软件开发项目的组织和管理。摘要:现实世界中的某些事物、状态或过程总是有一些相似的方面(共性)。集中和总结这些相似的方面并暂时忽略它们的差异是抽象的。抽象是提取事物的本质特征,暂时不考虑细节。摘要是人类处理复杂问题的基本方法之一.一般抽象过程:处理复杂系统的唯一有效方法是以层次的方式构造和分析它。一个复杂的动态系统首先可以由一些高级的抽象概念来构造和理解
7、,而这些高级的概念可以由一些低级的概念来构造和理解,以此类推,直到最低级的具体元素。例子:过程抽象,数据抽象,开放(行为抽象)(数据抽象),19,身体,服装,个性,抽象,抽象例子,外观,软件工程抽象过程:软件工程过程的每一步都是软件解决方案抽象层次的细化。在可行性研究阶段,软件是系统的一个组成部分。在需求分析期间,软件解决方案在问题环境中以熟悉的方式描述。当整体设计转移到详细设计时,抽象程度会降低。最后,当编写源程序时,它达到了最低的抽象层次。5.2.3逐步细化:尽量推迟对问题细节的考虑,以便集中精力解决主要问题。逐步求精是人类解决复杂问题的基本方法,也是许多软件工程技术的基础。米勒法则:一个
8、人在任何时候都只能专注于(72)个知识块。逐步完善的例子,包括外貌、身体、服装、个性、头发、脸、领带、抽象和逐步完善,例如,通过筛选方法找出100以内的质数。所谓的筛选方法是从2到100之间去掉2、3、5和7的倍数,剩下的就是100以内的素数。首先,根据程序功能写一个帧主()并建立一个从2到100的数组,其中Ai;.1建立一个从2到10的素数表B,存储2到10之间的素数;2如果所有的都是B的倍数,人工智能就被消除了;.3输出A中所有未消除的数字;4,上述框架中的每个处理语句可以进一步细化main() /*以建立一个从2到100的数组,其中Aii*/.1代表(I=2;i=100I)Ai=I;/*
9、建立一个从2到10的素数表B,并将素数存储在2到10之间*/. 2 B1=2;B2=3;B3=5;B4=7;/*如果Ai是b中任意数的倍数,那么Ai*/.3代表(j=1;j=4;j)检查A的所有数字是否都可以被Bj整除,并从A中消除它们;3.1 /*输出a中所有未消除的数字*/. 4(I=2;i=100I)如果Ai未被消除,则输出.4.1。继续完善3.1和4.1,直到每个语句都可以用编程语言表达。逐步细化的功能:它可以帮助软件工程师专注于那些与当前开发阶段最相关的方面,而忽略那些对整体解决方案来说是必要的、但目前不需要考虑的细节。一步一步细化的方法确保每一个问题都会得到解决,每一个问题都会在适
10、当的时候得到解决。然而,在任何时候,一个人不需要同时处理超过7个知识块。沃斯自己对逐步细化策略的总结表明,我们处理复杂问题的最重要方式是抽象。因此,复杂的问题不应该立即用计算机指令、数字和逻辑符号来表达,而应该用更自然的抽象句子来表达,从而获得抽象程序。抽象程序对抽象数据执行一些特定的操作,并用一些适当的标记(也许是自然语言)来表达它们。进一步分解抽象程序,进入下一个抽象层次。这种改进过程一直持续到程序被计算机接受。此时,程序可能是用某种高级语言或机器指令编写的。5.2.4信息隐藏和本地化,信息隐藏:模块的设计和确定应确保模块中包含的信息(过程和数据)不能被不需要此类信息的模块访问。本地化:本
11、地化的概念与信息隐藏的概念密切相关。本地化是指将一些紧密相关的软件元素物理地放置在一起。显然,本地化有助于实现信息隐藏。信息隐藏和定位的功能:“隐藏”意味着通过定义一组独立的模块可以实现有效的模块化,这些模块只交换为了完成系统功能而必须交换的信息。将信息隐藏原理作为模块化系统设计的标准将会带来巨大的好处。因为绝大多数数据和过程对软件的其他部分是隐藏的,所以在修改过程中由于疏忽而引入的错误不太可能传播到软件的其他部分。5.2.5模块独立性:模块独立性的概念是模块化、抽象、信息隐藏和本地化的直接结果。希望软件结构的设计使得每个模块能够完成一个相对独立的特定子功能,并且与其他模块的关系简单。模块独立
12、性的重要性:有效的模块化软件(即具有独立模块)更容易开发。这是因为功能可以划分,接口可以简化。当许多人一起开发同一个软件时,这种优势尤其重要。独立模块更容易测试和维护。这是因为,相对而言,修改设计和程序所需的工作量相对较小,错误传播范围较小,并且当需要扩展功能时,可以“插入”模块。两个定性标准衡量模块的独立性:耦合衡量不同模块之间相互依赖(联系)的紧密程度。耦合应该低,即每个模块与其他模块之间的关系应该简单;内聚性衡量模块中每个元素的紧密程度。内聚力应该很高,每个模块完成一个相对独立的特定子功能。1.耦合耦合是软件结构中不同模块之间互连程度的度量。要求:软件设计应追求松耦合系统。您可以在不太了
13、解系统其他模块的情况下研究、测试或维护任何模块。模块之间的连接简单,一个地方发生的错误扩散到整个系统的可能性很小;模块间的耦合程度强烈影响系统的可理解性、可测试性、可靠性和可维护性。耦合度的测量:(1)间接耦合/无直接耦合如果两个模块中的每一个都可以独立工作而不需要另一个模块的存在,那么它们就是完全独立的。在软件系统中,不可能所有模块都没有连接。(2)数据耦合如果两个模块通过参数相互交换信息,并且交换的信息只是数据,那么这种耦合称为数据耦合。评估:系统中必须至少有这样的耦合。一般来说,一个系统只能包含数据耦合。数据耦合是一个理想的目标。维护更容易,并且一个模块的修改不会导致另一个模块的降级错误
14、。(3)控制耦合如果在两个模块之间传输的信息中有控制信息,这种耦合称为控制耦合。评估:控制耦合通常是冗余的,数据耦合通常可以在模块被适当分解后替换它。被调用模块需要知道调用模块的内部结构和逻辑,这降低了重用的可能性。(4)标记耦合当被调用的模块只需要使用数据元素的一部分,同时将整个数据结构作为参数传递时,就发生了标记耦合。评估:被调用的模块可以使用比实际需要更多的数据,这将导致对数据访问的失控,从而为计算机犯罪提供机会。每当指针作为参数传递时,应该仔细检查耦合。(5)公共环境耦合当两个或多个模块通过公共数据环境进行交互时,它们之间的耦合称为公共环境耦合。公共环境可以是整体变量、共享通信区域、存
15、储器的公共覆盖区域、任何存储介质上的文件、物理设备等等。公共环境耦合类型:一个模块向公共环境发送数据,另一个模块从公共环境获取数据。数据耦合的一种形式是松散耦合。这两个模块都用于从公共环境中发送和获取数据,公共环境在数据耦合和控制耦合之间紧密耦合。示例:while (global _ variable=0) if(自变量_ XYZ 25)module _ 3();else模块_ 4();评估:与结构化编程相反,生成的代码完全不可读。如果在模块中修改了全局变量的声明,则必须修改每个可以访问全局变量的模块。在公共环境中耦合的模块很难重用,因此必须提供全局变量列表。即使模块本身没有改变,它与产品中其
16、他模块之间公共环境耦合的实例数量也会发生很大变化。有很大的潜在危险。该模块暴露了对更多数据的需求,使得难以控制数据访问,并导致计算机犯罪。在某些情况下,公共环境耦合更好。一个函数可以重新输入的概念,也可以理解为重新输入,意味着重复输入。首先,它意味着这个函数可以被中断,其次,它意味着它不依赖于任何环境(包括静态的),除了在它自己的堆栈上使用变量。这样一个函数被重新输入purecode,并且这个函数的多个副本可以被允许运行。因为它们使用独立的堆栈,所以不会相互干扰。如果你真的需要访问全局变量(包括静态变量),你必须注意互斥的实现。再入函数在并行运行环境中非常重要,但它通常会为访问全局变量付出一定的性能代价。(6)内容耦合度最高的是内容耦合。如果出现以下情况之一,两个模块之间会发生内容耦合:一个模块访问另一个模块的内部数据;一个模块不能通过正常入口进入另一个模块的内部;两个模块的一些程序代码重叠;一个模块有多个入口。耦合是影响软件复杂性的一个重要因素。应采用以下设计原则:尽可能多地使用数据耦合,少用控制耦合和特征耦合,限制公共环境耦合的范围,完全不使用内容耦合。内聚力:它表示模块中的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 建筑装饰企业铣工日常检查安全操作规程
- 2026年时事政治热点题库考试试题库及参考答案
- 加油站纵火事件应急演练脚本
- 新生儿科血液透析管路蛋白沉积应急演练脚本演练方案
- 炼钢厂安全制度考试题及答案
- 2026年春广东省中职“3+证书”高职高考语文真题(含解析)
- 项目开工扬尘治理方案落实与监管手册
- 《房屋产权赠与登记管理手册》
- 2025-2026学年教学楼园林设计
- 2025-2026学年pep三上u5大单元教学设计
- (新版)中国心理卫生协会心理咨询师考试复习题库(浓缩400题)
- 自动控制系统应急预案
- GB/T 10810.1-2025眼镜镜片第1部分:单焦和多焦
- 四川省水电集团笔试题库
- 骨盆及髋臼骨折的护理
- 可持续棕榈油圆桌倡议组织RSPO供应链认证管理手册及程序文件
- JBT 13043-2017 铸造用球形陶瓷砂
- 古希腊文明智慧树知到期末考试答案章节答案2024年复旦大学
- 《墙绘表现》课件-9-2《墙绘起形》
- SWITCH暗黑破坏神3超级金手指修改 版本号:2.7.7.92380
- 初三化学1-4单元测试卷
评论
0/150
提交评论