版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
软件设计的目标和任务软件设计原理模块独立性软件体系结构描绘软件结构的图形工具面向数据流的结构化设计方法详细设计软件设计方法软件设计的目标和任务软件设计方法1软件设计的目标和任务
根据用信息域表示的软件需求,以及功能和性能需求,进行系统设计结构设计过程设计数据设计软件设计的目标和任务
根据用信息域表示的软件需求,以及功能和2系统设计确定系统的具体实现方案。数据设计侧重于数据结构的定义。结构设计定义软件系统各主要成份之间的关系。过程设计是把结构成份转换成软件的过程性描述。在编码步骤,根据这种过程性描述,生成源程序代码,然后通过测试最终得到完整有效的软件。系统设计确定系统的具体实现方案。3开发阶段的信息流程序模块测试编码系统设计信息域需求功能与性能需求数据设计过程设计结构设计组装好的有效的软件开发阶段的信息流程序模块测试编码系统设计信息域需求功能与性能4软件设计是后续开发步骤及软件维护工作的基础。如果没有设计,只能建立一个不稳定的系统结构软件设计是后续开发步骤及软件维护工作的基础。如果没有设计,只5软件设计任务从工程管理的角度来看,软件设计分两步完成。
总体设计,将软件需求转化为数据结构和软件的系统结构。
详细设计,即过程设计。通过对结构表示进行细化,得到软件的详细的数据结构和算法。软件设计任务从工程管理的角度来看,软件设计分两步完成。6软件设计方法课件7软件设计过程1.制定规范在进入软件开发阶段之初,首先应为软件开发组制定在设计时应该共同遵守的标准,以便协调组内各成员的工作。包括:
软件设计过程1.制定规范8阅读和理解软件需求说明书,确认用户要求能否实现,明确实现的条件,从而确定设计的目标,以及它们的优先顺序根据目标确定最合适的设计方法规定设计文档的编制标准规定编码的信息形式,与硬件,操作系统的接口规约,命名规则阅读和理解软件需求说明书,确认用户要求能否实现,明确实现的92.软件系统结构的总体设计基于功能层次结构建立系统。采用某种设计方法,将系统按功能划分成模块的层次结构确定每个模块的功能建立与已确定的软件需求的对应关系确定模块间的调用关系确定模块间的接口评估模块划分的质量2.软件系统结构的总体设计基于功能层次结构建立系统。103.处理方式设计确定为实现系统的功能需求所必需的算法,评估算法的性能确定为满足系统的性能需求所必需的算法和模块间的控制方式
周转时间响应时间吞吐量精度确定外部信号的接收发送形式3.处理方式设计确定为实现系统的功能需求所必需的算法,评估114.数据结构设计确定软件涉及的文件系统的结构以及数据库的模式、子模式,进行数据完整性和安全性的设计确定输入,输出文件的详细的数据结构结合算法设计,确定算法所必需的逻辑数据结构及其操作确定对逻辑数据结构所必需的那些操作的程序模块(软件包)4.数据结构设计确定软件涉及的文件系统的结构以及数据库的模12限制和确定各个数据设计决策的影响范围若需要与操作系统或调度程序接口所必须的控制表等数据时,确定其详细的数据结构和使用规则数据的保护性设计
防卫性设计:在软件设计中就插入自动检错,报错和纠错的功能限制和确定各个数据设计决策的影响范围13
一致性设计:保证软件运行过程中所使用的数据的类型和取值范围不变在并发处理过程中使用封锁和解除封锁机制保持数据不被破坏冗余性设计:针对同一问题,由两个开发者采用不同的程序设计风格不同的算法设计软件,当两者运行结果之差不在允许范围内时,利用检错系统予以纠正,或使用表决技术决定一个正确结果。
一致性设计:145.可靠性设计可靠性设计也叫做质量设计在运行过程中,为了适应环境的变化和用户新的要求,需经常对软件进行改造和修正。在软件开发的一开始就要确定软件可靠性和其它质量指标,考虑相应措施,以使得软件易于修改和易于维护。5.可靠性设计可靠性设计也叫做质量设计156.编写概要设计阶段的文档概要设计阶段完成时应编写以下文档:
概要设计说明书数据库设计说明书用户手册制定初步的测试计划6.编写概要设计阶段的文档概要设计阶段完成时应编写以下文档:167.概要设计评审可追溯性:确认该设计是否复盖了所有已确定的软件需求,软件每一成份是否可追溯到某一项需求接口:确认该软件的内部接口与外部接口是否已经明确定义。模块是否满足高内聚和低耦合的要求。模块作用范围是否在其控制范围之内风险:确认该设计在现有技术条件下和预算范围内是否能按时实现
7.概要设计评审可追溯性:确认该设计是否复盖了所有已确定的软17实用性:确认该设计对于需求的解决方案是否实用技术清晰度:确认该设计是否以一种易于翻译成代码的形式表达可维护性:确认该设计是否考虑了方便未来的维护质量:确认该设计是否表现出良好的质量特征实用性:确认该设计对于需求的解决方案是否实用18各种选择方案:看是否考虑过其它方案,比较各种选择方案的标准是什么限制:评估对该软件的限制是否现实,是否与需求一致其它具体问题:对于文档、可测试性、设计过程..等进行评估各种选择方案:看是否考虑过其它方案,比较各种选择方案的标准是195.2软件设计原理
自顶向下,逐步细化
软件结构
程序结构
结构图
模块化
抽象化
信息隐蔽5.2软件设计原理自顶向下,逐步细化20自顶向下,逐步细化将软件的体系结构按自顶向下方式,对各个层次的过程细节和数据细节逐层细化,直到用程序设计语言的语句能够实现为止,从而最后确立整个的体系结构。自顶向下,逐步细化将软件的体系结构按自顶向下方式,对各个层次21软件结构软件结构包括两部分。程序的模块结构和数据的结构软件的体系结构通过一个划分过程来完成。该划分过程从需求分析确立的目标系统的模型出发,对整个问题进行分割,使其每个部分用一个或几个软件成份加以解决,整个问题就解决了软件结构软件结构包括两部分。程序的模块结构和数据的结构22软件设计方法课件23程序结构程序结构表明了程序各个部件(模块)的组织情况,是软件的过程表示。
程序结构程序结构表明了程序各个部件(模块)的组织情况,是软件24结构图结构图反映程序中模块之间的层次调用关系和联系:它以特定的符号表示模块、模块间的调用关系和模块间信息的传递结构图结构图反映程序中模块之间的层次调用关系和联系:它以特定25①模块:模块用矩形框表示,并用模块的名字标记它。①模块:模块用矩形框表示,并用模块的名字标记它。26②模块的调用关系和接口:模块之间用单向箭头联结,箭头从调用模块指向被调用模块。②模块的调用关系和接口:模块之间用单向箭头联结,箭头从调用27③模块间的信息传递:当一个模块调用另一个模块时,调用模块把数据或控制信息传送给被调用模块,以使被调用模块能够运行。而被调用模块在执行过程中又把它产生的数据或控制信息回送给调用模块③模块间的信息传递:当一个模块调用另一个模块时,调用模块把28④在模块A的箭头尾部标以一个菱形符号,表示模块A有条件地调用另一个模块B。当一个在调用箭头尾部标以一个弧形符号,表示模块A反复调用模块C和模块D。④在模块A的箭头尾部标以一个菱形符号,表示模块A有条件地调29程序的系统结构图程序的系统结构图30模块化软件系统的模块化是指整个软件被划分成若干单独命名和可编址的部分,称之为模块。这些模块可以被组装起来以满足整个问题的需求。把问题/子问题的分解与软件开发中的系统/子系统或系统/模块对应起来,就能够把一个大而复杂的软件系统划分成易于理解的比较单纯的模块结构。模块化软件系统的模块化是指整个软件被划分成若干单独命名和可编31抽象化软件系统进行模块设计时,可有不同的抽象层次。在最高的抽象层次上,可以使用问题所处环境的语言概括地描述问题的解法。在较低的抽象层次上,则采用过程化的方法。抽象化软件系统进行模块设计时,可有不同的抽象层次。32(1)过程的抽象
在软件工程中,从系统定义到实现,每进展一步都可以看做是对软件解决方法的抽象化过程的一次细化。
在软件需求分析阶段,用“问题所处环境的为大家所熟悉的术语”来描述软件的解决方法。
在从概要设计到详细设计的过程中,抽象化的层次逐次降低。当产生源程序时到达最低抽象层次。(1)过程的抽象
在软件工程中,从系统定义到实现,每进展一33例:开发一个CAD软件的三层抽象抽象层次Ⅰ.用问题所处环境的术语来描述这个软件:
该软件包括一个计算机绘图界面,向绘图员显示图形,以及一个数字化仪界面,用以代替绘图板和丁字尺。所有直线、折线、矩形、圆及曲线的描画、所有的几何计算、所有的剖面图和辅助视图都可以用这个CAD软件实现……。例:开发一个CAD软件的三层抽象抽象层次Ⅰ.用问题所处环34抽象层次Ⅱ.任务需求的描述。
CADSOFTWARETASKS
userinteractiontask;
2-Ddrawingcreationtask;graphicsdisplaytask;
drawingfilemanagementtask;
end.
在这个抽象层次上,未给出“怎样做”的信息,不能直接实现。抽象层次Ⅱ.任务需求的描述。
CADSOFTWARET35抽象层次Ⅲ.程序过程表示。以2-D(二维)绘图生成任务为例:
PROCEDURE:2-Ddrawingcreation
REPEATUNTIL(drawingcreationtaskterminates)
DOWHILE(digitizerinteractionoccurs)digitizerinterfacetask;
DETERMINEdrawingrequestCASE;
line:linedrawingtask;
rectangle:rectangledrawingtask;
circle:circledrawingtask;
……抽象层次Ⅲ.程序过程表示。以2-D(二维)绘图生成任务为36(2)数据抽象
在不同层次上描述数据对象的细节,定义与该数据对象相关的操作。
例如,在CAD软件中,定义一个叫做drawing的数据对象。可将drawing规定为一个抽象数据类型,定义它的内部细节为:(2)数据抽象
在不同层次上描述数据对象的细节,定义与该37
TYPEdrawingISSTRUCTUREDEFIND
numberISSTRINGLENGTH(12);
geometryDEFIND……
notesISSTRINGLENGTH(256);
BOMDEFIND
ENDdrawingTYPE;TYPEdrawingISSTRUCTURE38数据抽象drawing本身由另外一些数据抽象,如geometry、BOM(billofmaterials)构成定义drawing的抽象数据类型之后,可引用它来定义其它数据对象,而不必涉及drawing的内部细节例如,定义:
blue-printISINSTANCEOFdrawing;
或
schematicISINSTANCEOFdrawing;
数据抽象drawing本身由另外一些数据抽象,如geomet39信息隐蔽信息隐蔽是指,每个模块的实现细节对于其它模块来说是隐蔽的。也就是说,模块中所包含的信息(包括数据和过程)不允许其它不需要这些信息的模块使用。信息隐蔽信息隐蔽是指,每个模块的实现细节对于其它模块来说是隐405.2.5模块的独立性 模块,又称“组件”、“构件”。一般采用两个准则度量模块独立性。即模块间耦合和模块内聚若一个模块只具有单一的功能且与其它模块没有太多的联系,则称此模块具有模块独立性模块具有三个基本属性:功能:即指该模块实现什么功能,做什么事情。逻辑:即描述模块内部怎么做。状态:即该模块使用时的环境和条件。
5.2.5模块的独立性 模块,又称“组件”、“构件”。41耦合:对一个软件结构内不同模块之间互连程度的度量内聚:标志一个模块内各个元素彼此结合的紧密程度模块独立性强的模块应是高内聚低耦合的模块,应该设计这种模块。耦合:对一个软件结构内不同模块之间互连程度的度量42模块间的耦合模块间的耦合43
非直接耦合(NondirectCoupling)
两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的。非直接耦合的模块独立性最强。
非直接耦合(NondirectCoupling)44数据耦合(DataCoupling)
一个模块访问另一个模块时,彼此之间是通过参数
交换信息,而且交换的仅仅是数据。标记耦合(StampCoupling)
一组模块通过参数表传递记录信息,就是标记耦合。这个记录是某一数据结构的子结构,而不是简单变量。数据耦合(DataCoupling)
一个模块访问另一个45控制耦合(ControlCoupling)如果一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能,就是控制耦合。控制耦合(ControlCoupling)46外部耦合(ExternalCoupling)
一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息,则称之为外部耦合。公共耦合(CommonCoupling)
若一组模块都访问同一个公共数据环境,则它们之间的耦合就称为公共耦合。公共的数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等。外部耦合(ExternalCoupling)
一组模块都访47公共耦合的复杂程度随耦合模块的个数增加而显著增加。若只是两模块间有公共数据环境,则公共耦合有两种情况。松散公共耦合和紧密公共耦合。公共耦合的复杂程度随耦合模块的个数增加而显著增加。若只是两模48内容耦合(ContentCoupling)
如果发生下列情形,两个模块之间就发生了内容耦合
(1)一个模块直接访问另一个模块的内部数据;
(2)一个模块不通过正常入口转到另一模块内部;
(3)两个模块有一部分程序代码重迭(只可能出现在汇编语言中);
(4)一个模块有多个入口。内容耦合(ContentCoupling)
如果发生下列49软件设计方法课件50
c
模块内聚
51功能内聚(FunctionalCohesion)
一个模块中各个部分都是完成某一具体功能必不可少的组成部分,或者说该模块中所有部分都是为了完成一项具体功能而协同工作,紧密联系,不可分割的。则称该模块为功能内聚模块。功能内聚52信息内聚(InformationalCohesion)这种模块完成多个功能,各个功能都在同一数据结构上操作,每一项功能有一个唯一的入口点。这个模块将根据不同的要求,确定该执行哪一个功能。由于这个模块的所有功能都是基于同一个数据结构(符号表),因此,它是一个信息内聚的模块。信息内聚53软件设计方法课件54信息内聚模块可以看成是多个功能内聚模块的组合,并且达到信息的隐蔽。即把某个数据结构、资源或设备隐蔽在一个模块内,不为别的模块所知晓。信息内聚模块可以看成是多个功能内聚模块的组合,并且达到信息的55通信内聚(CommunicationCohesion)
如果一个模块内各功能部分都使用了相同的输入数据,或产生了相同的输出数据,则称之为通信内聚模块。通常,通信内聚模块是通过数据流图来定义的。通信内聚56软件设计方法课件57过程内聚(ProceduralCohesion)
使用流程图做为工具设计程序时,把流程图中的某一部分划出组成模块,就得到过程内聚模块。例如,把流程图中的循环部分、判定部分、计算部分分成三个模块,这三个模块都是过程内聚模块。过程内聚58时间内聚(ClassicalCohesion)
时间内聚又称为经典内聚。这种模块大多为多功能模块,但模块的各个功能的执行与时间有关,通常要求所有功能必须在同一时间段内执行。例如初始化模块和终止模块。时间内聚59逻辑内聚(LogicalCohesion)
这种模块把几种相关的功能组合在一起,每次被调用时,由传送给模块的判定参数来确定该模块应执行哪一种功能。逻辑内聚(LogicalCohesion)
这种模块把几种60巧合内聚(CoincidentalCohesion)
巧合内聚(偶然内聚)。当模块内各部分之间没有联系,或者即使有联系,这种联系也很松散,则称这种模块为巧合内聚模块,它是内聚程度最低的模块。巧合内聚(CoincidentalCohesion)61软件体系结构软件体系结构的三要素是程序构件(模块)的层次结构、构件之间交互的方式,以及数据的结构。软件体系结构软件体系结构的三要素是程序构件(模块)的层次结构62构件特点和示例纯计算构件具有简单的输入∕输出关系,没有运行状态的变化。例如,数值计算、过滤器(Filters)、转换器(Transformers)等。存储构件存放共享的、永久性的、结构化的数据。例如,数据库、文件、符号表、超文本等。管理构件执行的操作与运行状态紧密耦合。例如,抽象数据类型(ADT)、面向对象系统中的对象、许多服务器(Servers)等。控制构件管理其它构件运行的时间、时机及次序。例如,调度器、同步器等。链接构件在实体之间传递信息。例如,通信机制、用户界面等。构件特点63构件连接特点与示例过程调用在某一个执行路径中传递执行指针。例如,普通过程调用(同一个命名空间)、远程过程调用(不同的命名空间)。数据流相互独立的处理通过数据流进行交互,在得到数据的同时被赋予控制权限。例如,UNIX系统中的管道(pipes)。间接激活处理是因事件的发生而激活的,在处理之间没有直接的交互。例如,事件驱动系统、自动垃圾回收等。消息传递相互独立的处理之间有明确的交互,通过显式的离散方式的数据传递。这种传递可以是同步的,也可以是异步的。例如,TCP∕IP。共享数据构件们通过同一个数据空间进行并发的操作。例如,多用户数据库、数据黑板系统。构件连接特64软件系统常出现下列体系结构
数据流系统:这种结构中的每一个组成成份都有一套输入和输出数据,都依输入数据―处理―输出结果的方式工作。进行数据变换的构件叫做过滤器,把数据从一个过滤器的输出导入到另一个过滤器的输入,就叫做管道。各个过滤器相互独立,每一个过滤器对它的上游或下游的过滤器的情况是不知道的。这种结构的优点是:数据流程设计明确,直接支持复用,系统容易维护和升级,可以进行某些性能分析(如流量、死锁等),容易支持并行计算。软件系统常出现下列体系结构数据流系统:这种结构中的每一个组65调用―返回系统:在层次结构中,每一层都只与上下相邻的两层通信。每一层在利用下层基础服务的条件下,为上层提供服务。最典型的例子就是OSI7层网络协议。这种结构的优点是:提供逐步抽象的编程支持,支持复用及系统升级。缺点是:不是所有的系统都适合于建成层次结构,不能提供最佳性能。
调用―返回系统:在层次结构中,每一层都只与上下相邻的两层通信66独立构件系统:这种结构的特点是事件的发出者不必知道对该事件的具体处理过程。它的优点是:提供了强大的可复用性支持。如事件驱动系统。数据为中心的系统:数据库独立构件系统:这种结构的特点是事件的发出者不必知道对该事件的675.4描绘软件结构的图形工具层次图:描述软件的层次结构和模块调用关系。层次图和层次方框图的区别HIPO图5.4描绘软件结构的图形工具层次图:描述软件的层次结构和模685.5面向数据流的结构化设计方法面向数据流的结构化设计方法(SD)面向数据结构的设计方法面向对象的设计
简介三种软件设计方法5.5面向数据流的结构化设计方法面向数据流的结构化设计方法(69结构化设计方法是基于模块化、自顶向下细化、结构化程序设计等程序设计技术基础上发展起来的。利用映射把数据流图变换成软件结构。而前面学过的系统流程图,重点在描述物理系统的构成,状态转换图是表示状态转换的,ER图是描述数据对象关系的。该方法实施的要点是:①建立数据流的类型:变换流?事务流?②指明流的边界。即输入、处理、输出的界限。③将数据流图映射到程序结构。结构化设计方法是基于模块化、自顶向下细化、结构化程序设计等程70首先研究、分析和审查数据流图。从软件的需求规格说明中弄清数据流加工的过程,对于发现的问题及时解决。然后根据数据流图决定问题的类型。
SD粗略设计步骤(6步)
首先研究、分析和审查数据流图。从软件的需求规格说明中弄清数71由数据流图推导出系统的初始结构图。利用一些启发式原则来改进系统的初始结构图,直到得到符合要求的结构图为止。修改和补充数据词典。制定测试计划。
由数据流图推导出系统的初始结构图。72预备知识:在系统结构图中的模块传入模块─从下属模块取得数据,经过某些处理,再将其传送给上级模块。它传送的数据流叫做逻辑输入数据流。传出模块─从上级模块获得数据,进行某些处理,再将其传送给下属模块。它传送的数据流叫做逻辑输出数据流。预备知识:在系统结构图中的模块传入模块─从下属模块取得数73变换模块─它从上级模块取得数据,进行特定的处理,转换成其它形式,再传送回上级模块。它加工的数据流叫做变换数据流。协调模块─对所有下属模块进行协调和管理的模块。变换模块─它从上级模块取得数据,进行特定的处理,转换成其74变换型系统结构图(变换流)变换型数据处理问题的工作过程大致分为三步。相应于此,变换型系统结构图由输入、中心变换和输出等三部分组成。变换型系统结构图(变换流)变换型数据处理问题的工作过程大致分75软件设计方法课件76事务型系统结构图(事务流)它接受一项事务,根据事务处理的特点和性质,选择分派一个适当的处理单元,然后给出结果。在事务型系统结构图中,事务中心模块按所接受的事务的类型,选择某一事务处理模块执行。各事务处理模块并列。每个事务处理模块可能要调用若干个操作模块,而操作模块又可能调用若干个细节模块。事务型系统结构图(事务流)它接受一项事务,根据事务处理的特点77软件设计方法课件78变换分析变换分析方法由以下4步组成:重画数据流图;区分有效(逻辑)输入、有效(逻辑)输出和中心变换部分;进行一级分解,设计上层模块;进行二级分解,设计输入、输出和中心变换部分的中、下层模块。变换分析变换分析方法由以下4步组成:79软件设计方法课件80事务分析在很多软件应用中,存在某种作业数据流,它可以引发一个或多个处理,这些处理能够完成该作业要求的功能。这种数据流就叫做事务。与变换分析一样,事务分析也是从分析数据流图开始,自顶向下,逐步分解,建立系统到结构图。事务分析在很多软件应用中,存在某种作业数据流,它可以引发一个81
82事务分析过程①
识别事务源
利用数据流图和数据词典,从问题定义和需求分析的结果中,找出各种需要处理的事务。通常,事务来自物理输入装置。有时,设计人员还必须区别系统的输入、中心加工和输出中产生的事务。事务分析过程①识别事务源
利用数据流图和数据词典,从问题定83②
规定适当的事务型结构
在确定了该数据流图具有事务型特征之后,根据模块划分理论,建立适当的事务型结构。③
识别各种事务和它们定义的操作。
从问题定义和需求分析中找出的事务及其操作所必需的全部信息,对于系统内部产生的事务,必须仔细地定义它们的操作。②规定适当的事务型结构
在确定了该数据流图具有事务型特征之84④
注意利用公用模块
在事务分析的过程中,如果不同事务的一些中间模块可由具有类似的语法和语义的若干个低层模块组成,则可以把这些低层模块构造成公用模块。⑤
对每一事务,或对联系密切的一组事务,建立一个事务处理模块;
如果发现在系统中有类似的事务,可以把它们组成一个事务处理模块。④注意利用公用模块
在事务分析的过程中,如果不同事务的一些85⑥
对事务处理模块规定它们全部的下层操作模块⑦对操作模块规定它们的全部细节模块
变换分析是软件系统结构设计的主要方法。一般,一个大型的软件系统是变换型结构和事务型结构的混合结构。所以,我们通常利用以变换分析为主,事务分析为辅的方式进行软件结构设计。⑥对事务处理模块规定它们全部的下层操作模块86
875.6小结软件模块结构的改进模块功能的完善化消除重复功能模块的作用范围应在控制范围之内尽可能减少高扇出结构避免或减少使用病态联接模块的大小要适中设计功能可预测的模块软件包应满足设计约束和可移植性使用黑箱技术停止模块功能分解的原则5.6小结软件模块结构的改进模块功能的完善化88模块功能的完善化
一个完整的模块应当有以下几部分:
①执行规定的功能的部分;
②出错处理的部分。当模块不能完成规定的功能时,必须回送出错标志,出现例外情况的原因。
③如果需要返回数据给它的调用者,在完成数据加工或结束时,应当给它的调用者返回一个状态码。
模块功能的完善化
一个完整的模块应当有以下几部分:
①执行89消除重复功能,改善软件结构
①
完全相似:在结构上完全相似,可能只是在数据类型上不一致。此时可以采取完全合并的方法。
②局部相似:找出其相同部分,分离出去,重新定义成一个独立的下一层模块。还可以与它的上级模块合并。消除重复功能,改善软件结构
①完全相似:在结构上完全相似,90软件设计方法课件91模块的作用范围应在控制范围之内
模块的控制范围包括它本身及其所有的从属模块。模块的作用范围是指模块内一个判定的作用范围,凡是受这个判定影响的所有模块都属于这个判定的作用范围。如果一个判定的作用范围包含在这个判定所在模块的控制范围之内,则这种结构是简单的,否则,它的结构是不简单的。
模块的作用范围应在控制范围之内92尽可能减少高扇出结构,随着深度增大扇入。
如果一个模块的扇出数过大,就意味着该模块过分复杂,需要协调和控制过多的下属模块。应当适当增加中间层次的控制模块。尽可能减少高扇出结构,随着深度增大扇入。
如果一个模块的扇出93
避免或减少使用病态联接
应限制使用如下三种病态联接:
①
直接病态联接即模块A直接从模块B内部取出某些数据,或者把某些数据直接送到模块B内部。
避免或减少使用病态联接
应限制使用如下三种病态联接:
①94
②
公共数据域病态联接模块A和模块B通过公共数据域,直接传送或接受数据,而不是通过它们的上级模块。这种方式将使得模块间的耦合程度剧增。它不仅影响模块A和模块B,而且影响与公共数据域有关联的所有模块。②公共数据域病态联接模块A和模块B通过公共数据域95③
通信模块联接即模块A和模块B通过通信模块TABLEIT传送数据。从表面看,这不是病态联接,因为模块A和模块B都未涉及通信模块TABLEIT的内部。然而,它们之间的通信(即数据传送)没有通过它们的上级模块。从这个意义上讲,这种联接是病态的。③通信模块联接即模块A和模块B通过通信模块TABLEI96模块的大小要适中
模块的大小,可以用模块中所含语句的数量的多少来衡量。把模块的大小限制在一定的范围之内。通常规定其语句行数在50~100左右,保持在一页纸之内,最多不超过500行。模块的大小要适中
模块的大小,可以用模块中所含语句的数量的多97设计功能可预测的模块,但要避免过分受限制的模块一个功能可预测的模块,不论内部处理细节如何,但对相同的输入数据,总能产生同样的结果。但是,如果模块内部蕴藏有一些特殊的鲜为人知的功能时,这个模块就可能是不可预测的。对于这种模块,如果调用者不小心使用,其结果将不可预测。设计功能可预测的模块,但要避免过分受限制的模块98软件设计方法课件99如果一个模块的局部数据结构的大小、控制流的选择或者与外界(人、硬软件)的接口模式被限制死了,则很难适应用户新的要求或环境的变更。为了能够适应将来的变更,软件模块中局部数据结构的大小应当是可控制的,控制流的选择对于调用者来说,应当是可预测的。而与外界的接口应当是灵活的。
如果一个模块的局部数据结构的大小、控制流的选择或者与外界(100软件包应满足设计约束和可移植性
为了使得软件包可以在某些特定的环境下能够安装和运行,对软件包提出了一些设计约束和可移植的要求。例如,设计约束有时要求一个程序段在存储器中覆盖自身。当这种情况出现时,设计出来的软件程序结构不得不根据重复程度、访问频率、调用间隔等等特性,重新加以组织。软件包应满足设计约束和可移植性
为了使得软件包可以在某些特定101设计的后处理为每一个模块写一份处理说明为每一个模块提供一份接口说明确定全局数据结构和局部数据结构指出所有的设计约束和限制进行概要设计的评审进行设计的优化(如果需要和可能的话)设计的后处理为每一个模块写一份处理说明1026详细设计在详细设计阶段,要决定各个模块的实现算法,并精确地表达这些算法。详细设计工具可以分为以下三类:
图形工具表格工具语言工具6详细设计在详细设计阶段,要决定各个模块的实现算法,并精1036.3过程设计工具程序流程图程序流程图也称为程序框图,程序流程图使用五种基本控制结构是:6.3过程设计工具程序流程图104软件设计方法课件105
程序流程图的标准符号
程序流程图的标准符号106
示例示例107循环的标准符号注解的使用循环的标准符号注解的使用108多出口判断多出口判断109N-S图N-S图也叫做盒图。五种基本控制结构由五种图形构件表示。N-S图N-S图也叫做盒图。五种基本控制结构由五种图形构件表110示例示例111N-S图的嵌套定义形式N-S图的嵌套定义形式112盒图特点功能域明确,即一个特定控制结构的作用域明确。盒图没有箭头,因此不允许随意转移控制。容易确定局部和全局数据的作用域。容易表现嵌套关系,也可以表示模块的层次结构。盒图特点功能域明确,即一个特定控制结构的作用域明确。113
PAD也设置了五种基本控制结构的图式,并允许递归使用。问题分析图(PAD)
PAD也设置了五种基本控制结构的图式,并允许递归使用。问题114
PAD描述的示例
PAD描述的示例115
对应于增量型循环结构
fori:=n1ton2stepn3do
在PAD中有相应的循环控制结构PAD的扩充控制结构 对应于增量型循环结构PAD的扩充控制结构116PAD的特点使用表示结构化控制结构的PAD符号所设计出来的程序必然是结构化程序它描述的程序结构清楚,图中最左面的竖线是程序的主线,即第一层结构。随着程序层次的增加,PAD图逐渐向右延伸,每增加一个层次,图形向右扩展一条竖线。PAD图中竖线的总条数就是程序的层次数。它是树型结构的图形,程序从图中最左竖线上端的节点开始执行,自上向下,从左到右既可表示逻辑结构,也可描述数据结构支持逐步求精的方法。PAD的特点使用表示结构化控制结构的PAD符号所设计出来的程117判定表判定表用于表示程序的静态逻辑在判定表中的条件部分给出所有的两分支判断的列表,动作部分给出相应的处理要求将程序流程图中的多分支判断都改成两分支判断判定表判定表用于表示程序的静态逻辑118
无多分支判断结构
无多分支判断结构119
120建立判定表的步骤列出与一个具体过程(或模块)有关的所有处理。列出过程执行期间的所有条件(或所有判断)。将特定条件取值组合与特定的处理相匹配,消去不可能发生的条件取值组合。将右部每一纵列规定为一个处理规则,即对于某一条件取值组合将有什么动作。
建立判定表的步骤列出与一个具体过程(或模块)有关的所有处理。121判断树当判断表中的数据元素增加时,判断表的简洁程度下降判断树比判断表更直观,但不如判断树简洁分支持续对最终画出的判断树有影响。也是二分支结构判断树当判断表中的数据元素增加时,判断表的简洁程度下降122PDL(ProgramDesignLanguage)PDL是一种用于描述功能模块的算法设计和加工细节的语言。称为设计程序用语言。它是一种伪码。伪码的语法规则分为“外语法”和“内语法”。PDL具有严格的关键字外语法,用于定义控制结构和数据结构,同时它的表示实际操作和条件的内语法可使用自然语言的词汇。PDL(ProgramDesignLanguage)P123示例:拼词检查程序PROCEDUREspellcheckIS
BEGIN
splitdocumentintosinglewords
loodupwordsindictionary
displaywordswhicharenotindictionary
createanewdictionary
ENDspellcheck
示例:拼词检查程序PROCEDUREspellchec124
PDL的特点提供全部结构化控制结构、数据说明和模块特征。能对PDL正文进行结构分割,使之变得易于理解。为了区别关键字,规定关键字一律大写,其它单词一律小写。或者规定关键字加下划线,或者规定它们为黑体字。PDL的特点提供全部结构化控制结构、数据说明和模块特征。能125内语法使用自然语言来描述处理特性。内语法比较灵活,只要写清楚就可以,不必考虑语法错,以利于人们可把主要精力放在描述算法的逻辑上。有数据说明机制,包括简单的(如标量和数组)与复杂的(如链表和层次结构)的数据结构。有子程序定义与调用机制,用以表达各种方式的接口说明。内语法使用自然语言来描述处理特性。内语法比较灵活,只要写清楚126使用PDL语言,逐步求精:PROCEDUREspellcheckBEGIN
--*splitdocumentintosinglewords
LOOPgetnextword
addwordtowordlistinsortorder
EXITWHENallwordsprocessed
ENDLOOP
--*lookupwordsindictionary
LOOPgetwordfromwordlist
使用PDL语言,逐步求精:PROCEDUREspellch127
IFwordnotindictionaryTHEN
--*displaywordsnotindictionary
displayword promptonuserterminal
IFuserresponsesayswordOKTHEN
addwordtogoodwordlist
ELSE
addwordtobadwordlist
ENDIF
ENDIF
EXITWHENallwordsprocessed
ENDLOOP IFwordnotindictionary128
--*createanewwordsdictionary
dictionary:=
mergedictionaryandgoodwordlistENDspellcheck--*createanewwordsdic129HIPO图HIPO最初只用做文档编写的格式要求,随后发展成比较有名的软件设计手段。HIPO图采用功能框图和PDL来描述程序逻辑,它由两部分组成:可视目录表和IPO图。可视目录表给出程序的层次关系,IPO图则为程序各部分提供具体的工作细节。
HIPO图HIPO最初只用做文档编写的格式要求,随后发展成比130①
可视目录表
:由体系框图、图例、描述说明三部分组成。
体系框图。又称层次图(H图),是可视目录表的主体,用它表明各个功能的隶属关系。它是自顶向下逐层分解得到的,是一个树形结构。它的顶层是整个系统的名称和系统的概括功能说明;第二层把系统的功能展开,分成了几个框;第二层功能进一步分解,就得到了第三层、第四层,…,直到最后一层。每个框内都应有一个名字,用以标识它的功能。还应有一个编号,以记录它所在的层次及在该层次的位置。①可视目录表:由体系框图、图例、描述说明三部分组成。131图例。每一套HIPO图都应当有一个图例,即图形符号说明。附上图例,不管人们在什么时侯阅读它都能对其符号的意义一目了然。描述说明。它是对层次图中每一框的补充说明,在必须说明时才用,所以它是可选的。描述说明可以使用自然语言。图例。每一套HIPO图都应当有一个图例,即图形符号说明。附上132盘存/销售系统工作流程图
盘存/销售系统工作流程图133软件设计方法课件134②IPO图:IPO图为层次图中每一功能框详细地指明输入、处理及输出。通常,IPO图有固定的格式,图中处理操作部分总是列在中间,输入和输出部分分别在其左边和右边。由于某些细节很难在一张IPO图中表达清楚,常常把IPO图又分为两部分,简单概括的称为概要IPO图,细致具体一些的称为详细IPO图。概要IPO图用于表达对一个系统,或对其中某一个子系统功能的概略表达,指明在完成某一功能框规定的功能时需要哪些输入,哪些操作和哪些输出。
②IPO图:IPO图为层次图中每一功能框详细地指明输入、135软件设计方法课件136对应H图上1.1.0框的概要IPO图
对应H图上1.1.0框的概要IPO图137在概要IPO图中,没有指明输入―处理―输出三者之间的关系,
用它来进行下一步的设计是不可能的。故需要使用详细IPO图以指明输入―处理―输出三者之间的关系,其图形与概要IPO图一样,但输入、输出最好用具体的介质和设备类型的图形表示。下图是销售/盘存系统中对应于1.1.2框的一张详细IPO图。
在概要IPO图中,没有指明输入―处理―输出三者之间的关系,138软件设计方法课件139软件设计方法课件140③
利用HIPO进行迭代式细化设计在软件设计时,解决设计问题通常需要经历一个认识逐步发展的过程,并且对一些问题还要经过反复的考虑才可能达到比较满意的设计效果。我们称此为迭代式细化设计。HIPO能很好地适应这一要求。下图是利用HIPO进行迭代式细化设计的示意图。从图中可看到,把可视目录表和IPO图结合起来,反复交替地使用它们,可使得设计工作逐步深化,最终取得完满的设计结果。其实这正是自顶向下,逐步求精的结构化程序设计思想。
③利用HIPO进行迭代式细化设计141利用HIPO进行迭代式细化设计
利用HIPO进行迭代式细化设计142HIPO有自己的特点。首先,这一图形表达方法容易看懂。其次,HIPO的适用范围很广。事实上,画可视目录表就是与概要设计密切相关的工作。如果利用它仅仅表达软件要达到的功能,则是需求分析中描述需求的很好的工具。因为HIPO是在开发过程中的表达工具,所以它又是开发文档的编制工具。开发完成后,HIPO图就是很好的文档,而不必在设计完成以后,专门补写文档。
HIPO有自己的特点。首先,这一图形表达方法容易看懂。其次,1436.4面向数据结构的设计方法
-Jackson方法Jackson方法是一种典型的面向数据结构的分析与设计方法。早期的Jackson方法用于小系统的设计,称之为Jackson结构程序设计方法,简称JSP方法。它是按输入、输出和内部信息的数据结构进行软件设计的,即把数据结构的描述映射成程序结构描述。
6.4面向数据结构的设计方法
144若数据结构有重复性,则对应程序一定有循环控制结构;若数据结构具有选择性,则对应程序一定需要有判定控制结构,以此揭示数据结构和程序结构之间的内在关系,设计出反映数据结构的程序结构。
若数据结构有重复性,则对应程序一定有循环控制结构;145JSP方法的的三步曲是信息
→
数据结构
→
程序结构,这三步曲减少了设计决策上的盲目性。但是,当把JSP方法用于大系统设计时,就会出现大量复杂的难以对付的结构冲突。因此,促使M.J.Jackson提出了JSD方法,即Jackson系统开发方法。
JSP方法的的三步曲是信息→数据结构146(1)JSD方法的步骤Jackson系统开发方法把分析的重点放在构造与系统相关联的现实世界,并建立现实世界的信息域的模型上。它实际上是支持软件分析与设计的一组连续的技术步骤。而且,JSD方法的最终目标是生成软件的过程性描述,没有特别考虑程序模块化结构,模块只是作为过程的副产品而出现,没有特别强调模块独立性。使用JSD方法的步骤如下:(1)JSD方法的步骤Jackson系统开发方法把分析的重147①
实体动作分析:从问题的简单描述中,选出软件系统要产生和运用的实体(人、物或组织),以及现实世界作用于实体上的动作(事件)。实体从名词中选出,动作从动词中选出。当然,只有与问题求解直接有关的实体和动作才能被选出做进一步的分析。②
实体结构分析:把作用于实体的动作或由实体执行的动作,按时间发生的先后次序排序,并用一个层状的Jackson结构图表示。③
定义初始模型:把实体和动作表示成一个过程性的模型,定义模型与现实世界的联系。模型系统的规格说明可用系统规格说明图来表示。
①实体动作分析:从问题的简单描述中,选出软件系统要产生和运148④
功能描述:详细说明与已定义的动作相对应的功能。⑤
决定系统时间特性:对进程调度特性进行评价和说明。⑥
实现:设计组成系统的硬件和软件。
JSD方法的前三步属于需求分析阶段,后三步属于软件设计阶段。
④功能描述:详细说明与已定义的动作相对应的功能。149(2)Jackson程序设计方法JSP
JSP的本质就是:“问题应当被分解为可以用三种结构形式表示的构件的层次结构。”Jackson所说的“结构形式”就是指顺序、选择和重复,实际上,它们就是过程性构造,并成为结构化程序设计方法基础。
(2)Jackson程序设计方法JSPJSP的本质就是:150①
数据结构表示法Jackson提出的数据结构表示有三种基本的构造类型
①数据结构表示法151数据结构组合表示
数据结构组合表示152Jackson图实质是对层次方框图的一种细化。它和描绘软件结构的层次图有区别。Jackson图中的方框不代表模块,Jackson图表现的是组成关系,即一个方框中包含的操作仅仅由它下层框中的那些操作组成,不表示调用方法。这也是Jackson图和程序流程图,盒图,PAD图的区别。Jackson图实质是对层次方框图的一种细化。它和描绘软件结153下面用一个信用卡记账的例子具体说明。信用卡记账系统的输入数据结构是两个实际的账册,它们对应的两个输入文件如图所示。
下面用一个信用卡记账的例子具体说明。154对应输入文件的输入数据结构在左侧。对应输入文件的输入数据结构在左侧。155对应输入文件的输入数据结构在左侧。对应输入文件的输入数据结构在左侧。156两个实际输入账册都按顾客号码进行登录,所以输入文件也是以顾客号码组织记录的。两个实际输入账册都按顾客号码进行登录,所以输入文件也是以顾157信用卡记账系统的输出记账报告
信用卡记账系统的输出记账报告158根据输入和输出数据结构的对应关系建立的输出文件
根据输入和输出数据结构的159从层次性的输入和(或)输出数据结构可以直接推导出程序或进程的过程性表示。例如从上图所示的输出文件的Jackson数据结构图所导出的程序结构如下图所示。
从层次性的输入和(或)输出数据结构可以直接推导出程160软件设计方法课件161最后,利用Jackson给出的三种图解来表示程序或进程的执行逻辑。这种图解类似于程序设计语言,实际上它是一种伪码表示。三种基本控制结构的图解如下所示。
最后,利用Jackson给出的三种图解来表示程序或进程的执行162在给出程序的过程性描述时,还需要添加一些必要的可执行操作。对于上例中“处理顾客数据”部分,给出过程性描述如下:
PROCESS_CUST_DATAseq
openPAY_FILE;openCUST_M_FILE; {分别打开支付文件和顾客主文件}
PROCESS_CNO_GROUPiteruntileof:PAY_FILE;{处理顾客号码组}
readPAY_FILE; {读支付文件一个记录}
PROCESS_CNO; {读顾客主文件一个记录,找老结余}
PROCESS_PAY_RECORDiteruntilend:CNO_GROUP;
{处理顾客号码组中每个支付记录}
writereportline; {写出报告行}
computetotalpayments; {计算总支付额}
readPAY_FILE; {读支付文件下一个记录}
PROCESS_PAY_RECORDend; {一位顾客数据处理完}
………
在给出程序的过程性描述时,还需要添加一些必要的可执行操作。163(3)结构冲突
Jackson把结构冲突定义为三种类型。①顺序冲突顺序冲突是指在输入数据结构和输出数据结构中,输入数据与输出数据的顺序冲突。
(3)结构冲突Jackson把结构冲突定义为三种类型。164例如,仓库存放多种零件P1,P2,…,每个零件的每次变动(收或发)都有一张卡片做记录。库存管理系统的输入数据结构是一叠卡片组成的文件。文件包括许多零件组,每个零件组又包括许多卡片(变动记录),每张卡片又分别可以是“收”或“发”,图4.22(b)。输出数据结构是月报表,见图4.22(a)。表中列出每种零件的净变化,一种零件的净变化占一行,见图4.22(c)。月报表来自输入文件,所以它们之间有很好的对应性。
例如,仓库存放多种零件P1,P2,…,每个零件的每次变动(收165软件设计方法课件166月报表每一行的内容来自输入文件的每一个零件组,行数与零件组个数相同,排列顺序一致(均按零件号递增次序排列)。这样输入数据与输出数据在内容、数量、顺序上的对应性找到了,也就等于理解了用户所需加工要求,因而很容易导出对应的程序结构。如果卡片不是按零件组分组,而是按“发”或“收”的日期排列,这样输入数据结构与输出数据结构就找不到上述的对应关系。这种情形就是“顺序冲突”。
月报表每一行的内容来自输入文件的每一个零件组,行数与零件组个167②
边界冲突在输入与输出数据结构中,虽然输入数据与输出数据的顺序相同,但分解不一样。
②边界冲突168③
多重穿插冲突在输入与输出数据结构中,输入数据与输出数据的顺序相同,而且处于同一程序段中,就象绳索穿绕一样。这些数据并行运行,同时在输入文件中重叠在一起。
③多重穿插冲突169为了解决上述的结构冲突,Jackson提出了定义中间数据结构来解决冲突的方法。它可归纳成以下4点:
利用数据结构图来定义输入数据结构的特性;
将输入数据结构的元素分解,构造成中间数据结构;
描述输出数据结构的特性;
根据中间数据结构,构造输出数据结构.
为了解决上述的结构冲突,Jackson提出了定义中间170
这就需要两套程序结构,一个是把输入数据结构转换成中间数据结构;另一个是把中间数据结构转换成输出数据结构。Myers提出了一种叫做“程序变换”或“多道穿插”的方法,用以解决冲突。
即设计两个子程序,它们既能单独执行,又能并发执行。这样,中间数据结构也可以不要,而使用一个单记录缓冲区来代替它。
这就需要两套程序结构,一个是把输入数据结构转换成中171例如,用卡片按行输入一个矩阵文件,要求按列打印该矩阵,图4.23(a)表明这个例子的输入、输出数据结构。从图中可见,卡片文件和打印文件之间存在着对应关系,但行和列的内容不符,行选择和列选择的次序不同。因此,没有办法从这个结构图上构造出相应的程序结构。这就是所谓的结构冲突。
例如,用卡片按行输入一个矩阵文件,要求按列打印该矩172软件设计方法课件173设计规格说明与设计评审
软件设计规格说明的大纲如下表所示。每一个编号的段落描述了设计模型的不同侧面。在设计人员细化他们的软件设计时,就可以逐步完成各章节内容的编写。
设计规格说明与设计评审软件设计规格说明的大纲如下表174Ⅰ.工作范围A.系统目标B.运行环境C.主要软件需求D.设计约束∕限制Ⅱ.体系结构设计A.数据流与控制流复审B.导出的程序结构C.功能与程序交叉索引
Ⅰ.工作范围A.系统目标B.运行环境C175Ⅲ.数据设计A.数据对象与形成的数据结构B.文件和数据库结构
ⅰ文件的逻辑结构
ⅱ
文件逻辑记录描述
ⅲ
访问方式C.全局数据D.文件∕数据与程序交叉索引
Ⅳ.接口设计A.人机界面规格说明B.人机界面设计规则C.外部接口设计
ⅰ外部数据接口
ⅱ
外部系统或设备接口D.内部接口设计规则
Ⅲ.数据设计A.数据对象与形成的数据结构B.176Ⅴ.(每个模块的)过程设计A.处理与算法描述B.接口描述C.设计语言(或其它)描述D.使用的模块E.内部程序逻辑描述F.注释∕约束∕限制
Ⅵ.运行设计A.运行模块组合B.运行控制规则C.运行时间安排
Ⅴ.(每个模块的)过程设计A.处理与算法描述B177Ⅶ.出错处理设计A.出错处理信息B.出错处理对策
ⅰ设置后备ⅱ性能降级
ⅲ
恢复和再启动
Ⅷ.安全保密设计
Ⅸ.需求∕设计交叉索引
Ⅹ.测试部分A.测试方针B.集成策略C.特殊考虑
Ⅶ.出错处理设计A.出错处理信息B.出错处178设计评审的内容
·可追溯性:即分析该软件的系统结构、子系统结构,确认该软件设计是否复盖了所有已确定的软件需求,软件每一成分是否可追溯到某一项需求。
·接口:即分析软件各部分之间的联系,确认该软件的内部接口与外部接口是否已经明确定义。模块是否满足高内聚和低耦合的要求。模块作用范围是否在其控制范围之内。设计评审的内容·可追溯性:即分析该软件的系统结构、子系统结179风险:即确认该软件设计在现有技术条件下和预算范围内是否能按时实现。·实用性:即确认该软件设计对于需求的解决方案是否实用。·技术清晰度:即确认该软件设计是否以一种易于翻译成代码的形式表达。·可维护性:从软件维护的角度出发,确认该软件设计是否考虑了方便未来的维护。
风险:即确认该软件设计在现有技术条件下和预算范围内是否能按时180质量:即确认该软件设计是否表现出良好的质量特征。各种选择方案:看是否考虑过其它方案,比较各种选择方案的标准是什么。限制:评估对该软件的限制是否现实,是否与需求一致。其它具体问题:对于文档、可测试性、设计过程,……,等等进行评估
质量:即确认该软件设计是否表现出良好的质量特征。1816.5程序复杂程度的定量度量
详细设计阶段设计出的模块质量如何,可以由上节讲的设计评审来定性评价,我们希望进一步定量度量软件的性质,目前很多定量度量的方法还在研究之中。定量度量程序复杂程度的方法很有价值:把程序的复杂程度乘以恰当常数即可估计出软件中错误的数量以及软件开发需要用的工作量,定量度量的结果可以比较2个不同设计的优劣。
6.5程序复杂程度的定量度量详细设计阶段设182McCabe方法:根据程序控制流的复杂程度定量度量程序的复杂程度,这样度量出的结果称为程序的环形复杂度。
McCabe方法:根据程序控制流的复杂程度定量183为了突出表示控制流,人们通常使用流图(也称为程序图),流图是退化的程序流程图,它仅仅描述程序的控制流程,完全不表现对数据的具体操作以及分支和循环的具体条件。流图中用圆表示结点,一个圆表示一条或者多条语句。程序流程图中的一个顺序的处理框或者菱形判断框,可以映射成一个结点。流图中的箭头线称为边,它和程序流程图中的箭头陷都表示控制流。一条边必须终止于一个结点,即使是空语句。由边和结点围成的面积叫区域。为了突出表示控制流,人们通常使用流图(也称为程序图),流图是184当过程设计中包含复合条件时,生成流图要复杂一些。复合条件就是在条件中包含一个或多个布尔运算符(逻辑OR,AND,NOR);在这种情况下,应该把复合条件分解为若干个简单条件,每个简单条件对应流图中的一个结点。包含条件的结点为判断结点。
当过程设计中包含复合条件时,生成流图要复杂一些。复合条件就是185计算环形复杂度的方法:1.
流图中的区域数等于环形复杂度2.
流图G的环形复杂度V(G)=E-N+2,E是流图中边的条数,N是结点数。3.
流图G的环形复杂度V(G)=P+1,
其中,P是流图中判断结点的数目。
模块规模V(G)≤10比较好。
计算环形复杂度的方法:186软件设计的目标和任务软件设计原理模块独立性软件体系结构描绘软件结构的图形工具面向数据流的结构化设计方法详细设计软件设计方法软件设计的目标和任务软件设计方法187软件设计的目标和任务
根据用信息域表示的软件需求,以及功能和性能需求,进行系统设计结构设计过程设计数据设计软件设计的目标和任务
根据用信息域表示的软件需求,以及功能和188系统设计确定系统的具体实现方案。数据设计侧重于数据结构的定义。结构设计定义软件系统各主要成份之间的关系。过程设计是把结构成份转换成软件的过程性描述。在编码步骤,根据这种过程性描述,生成源程序代码,然后通过测试最终得到完整有效的软件。系统设计确定系统的具体实现方案。189开发阶段的信息流程序模块测试编码系统设计信息域需求功能与性能需求数据设计过程设计结构设计组装好的有效的软件开发阶段的信息流程序模块测试编码系统设计信息域需求功能与性能190软件设计是后续开发步骤及软件维护工作的基础。如果没有设计,只能建立一个不稳定的系统结构软件设计是后续开发步骤及软件维护工作的基础。如果没有设计,只191软件设计任务从工程管理的角度来看,软件设计分两步完成。
总体设计,将软件需求转化为数据结构和软件的系统结构。
详细设计,即过程设计。通过对结构表示进行细化,得到软件的详细的数据结构和算法。软件设计任务从工程管理的角度来看,软件设计分两步完成。192软件设计方法课件193软件设计过程1.制定规范在进入软件开发阶段之初,首先应为软件开发组制定在设计时应该共同遵守的标准,以便协调组内各成员的工作。包括:
软件设计过程1.制定规范194阅读和理解软件需求说明书,确认用户要求能否实现,明确实现的条件,从而确定设计的目标,以及它们的优先顺序根据目标确定最合适的设计方法规定设计文档的编制标准规定编码的信息形式,与硬件,操作系统的接口规约,命名规则阅读和理解软件需求说明书,确认用户要求能否实现,明确实现的1952.软件系统结构的总体设计基于功能层次结构建立系统。采用某种设计方法,将系统按功能划分成模块的层次结构确定每个模块的功能建立与已确定的软件需求的对应关系确定模块间的调用关系确定模块间的接口评估模块划分的质量2.软件系统结构的总体设计基于功能层次结构建立系统。1963.处理方式设计确定为实现系统的功能需求所必需的算法,评估算法的性能确定为满足系统的性能需求所必需的算法和模块间的控制方式
周转时间响应时间吞吐量精度确定外部信号的接收发送形式3.处理方式设计确定为实现系统的功能需求所必需的算法,评估1974.数据结构设计确定软件涉及的文件系统的结构以及数据库的模式、子模式,进行数据完整性和安全性的设计确定输入,输出文件的详细的数据结构结合算法设计,确定算法所必需的逻辑数据结构及其操作确定对逻辑数据结构所必需的那些操作的程序模块(软件包)4.数据结构设计确定软件涉及的文件系统的结构以及数据库的模198限制和确定各个数据设计决策的影响范围若需要与操作系统或调度程序接口所必须的控制表等数据时,确定其详细的数据结构和使用规则数据的保护性设计
防卫性设计:在软件设计中就插入自动检错,报错和纠错的功能限制和确定各个数据设计决策的影响范围199
一致性设计:保证软件运行过程中所使用的数据的类型和取值范围不变在并发处理过程中使用封锁和解除封锁机制保持数据不被破坏冗余性设计:针对同一问题,由两个开发者采用不同的程序设计风格不同的算法设计软件,当两者运行结果之差不在允许范围内时,利用检错系统予以纠正,或使用表决技术决定一个正确结果。
一致性设计:2005.可靠性设计可靠性设计也叫做质量设计在运行过程中,为了适应环境的变化和用户新的要求,需经常对软件进行改造和修正。在软件开发的一开始就要确定软件可靠性和其它质量指标,考虑相应措施,以使得软件易于修改和易于维护。5.可靠性设计可靠性设计也叫做质量设计2016.编写概要设计阶段的文档概要设计阶段完成时应编写以下文档:
概要设计说明书数据库设计说明书用户手册制定初步的测试计划6.编写概要设计阶段的文档概要设计阶段完成时应编写以下文档:2027.概要设计评审可追溯性:确认该设计是否复盖了所有已确定的软件需求,软件每一成份是否可追溯到某一项需求接口:确认该软件的内部接口与外部接口是否已经明确定义。模块是否满足高内聚和低耦合的要求。模块作用范围是否在其控制范围之内风险:确认该设计在现有技术条件下和预算范围内是否能按时实现
7.概要设计评审可追溯性:确认该设计是否复盖了所有已确定的软203实用性:确认该设计对于需求的解决方案是否实用技术清晰度:确认该设计是否以一种易于翻译成代码的形式表达可维护性:确认该设计是否考虑了方便未来的维护质量:确认该设计是否表现出良好的质量特征实用性:确认该设计对于需求的解决方案是否实用204各种选择方案:看是否考虑过其它方案,比较各种选择方案的标准是什么限制:评估对该软件的限制是否现实,是否与需求一致其它具体问题:对于文档、可测试性、设计过程..等进行评估各种选择方案:看是否考虑过其它方案,比较各种选择方案的标准是2055.2软件设计原理
自顶向下,逐步细化
软件结构
程序结构
结构图
模块化
抽象化
信息隐蔽5.2软件设计原理自顶向下,逐步细化206自顶向下,逐步细化将软件的体系结构按自顶向下方式,对各个层次的过程细节和数据细节逐层细化,直到用程序设计语言的语句能够实现为止,从而最后确立整个的体系结构。自顶向下,逐步细化将软件的体系结构按自顶向下方式,对各个层次207软件结构软件结构包括两部分。程序的模块结构和数据的结构软件的体系结构通过一个划分过程来完成。该划分过程从需求分析确立的目标系统的模型出发,对整个问题进行
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年沈阳市沈河区中小学编制教师招聘笔试备考题库及答案详解
- 2026年福建厦门地铁社会委培招生150人笔试备考试题及答案详解
- 加油站笔试试题及答案
- 房地产 -2026年上半年中国房地产总结与展望土地篇
- 2026江西华东交通大学理学院科研助理岗位招聘2人考试备考试题及答案详解
- 仓库人员笔试题及答案
- 2026北京大学第三医院妇产科超声医生招聘1人考试备考试题及答案详解
- 2026年美国糖尿病学会妊娠期高血糖诊治指南解读课件
- 2026广西玉林供电局项目资料员招聘42人笔试参考题库及答案详解
- 2026吉林省省直事业单位招聘39人(8号)笔试备考题库及答案详解
- DL∕ T 736-2010 农村电网剩余电流动作保护器安装运行规程
- 量子力学+周世勋(全套完整)课件
- 新郑龙湖学院机电安装施工组织设计
- 有趣的行为金融学智慧树知到期末考试答案章节答案2024年上海海洋大学
- 废水检验知识讲座
- 月嫂个人简历范本通用模板
- 生产过程中间品检验
- 新人教版-八年级数学下册-勾股定理课件(第一课时)
- GB/T 17622-2008带电作业用绝缘手套
- 化学前沿-碳材料课件
- STULZ空调操作手册
评论
0/150
提交评论