您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 设计及方案 > 软件工程 软件设计方法
1软件生命周期软件定义开发时期维护时期问题定义可行性研究需求分析总体设计详细设计编码和单元测试综合测试系统设计系统实现系统分析2软件设计的目标和任务软件设计基础模块独立性结构化设计方法数据设计和文件设计过程设计3软件设计的目标和任务根据用信息域表示的软件需求,以及功能和性能需求,进行数据设计系统结构设计过程设计。4数据设计侧重于数据结构的定义。系统结构设计定义软件系统各主要成份之间的关系。(两个含义)过程设计则是把结构成份转换成软件的过程性描述。在编码步骤,根据这种过程性描述,生成源程序代码,然后通过测试最终得到完整有效的软件。5开发阶段的信息流程序模块测试编码设计信息域需求功能与性能需求数据设计过程设计系统结构设计组装好的有效的软件6软件设计是后续开发步骤及软件维护工作的基础。如果没有设计,只能建立一个不稳定的系统结构7软件设计任务从工程管理的角度来看,软件设计分两步完成。概要设计,将软件需求转化为数据结构和软件的系统结构。详细设计,即过程设计。通过对结构表示进行细化,得到软件的详细的数据结构和算法。89软件设计过程1.制定规范在进入软件开发阶段之初,首先应为软件开发组制定在设计时应该共同遵守的标准,以便协调组内各成员的工作。包括:10阅读和理解软件需求说明书,确认用户要求能否实现,明确实现的条件,从而确定设计的目标,以及它们的优先顺序根据目标确定最合适的设计方法规定设计文档的编制标准规定编码的信息形式,与硬件,操作系统的接口规约,命名规则112.软件系统结构的总体设计基于功能层次结构建立系统。采用某种设计方法,将系统按功能划分成模块的层次结构确定每个模块的功能建立与已确定的软件需求的对应关系确定模块间的调用关系确定模块间的接口评估模块划分的质量123.处理方式设计确定为实现系统的功能需求所必需的算法,评估算法的性能确定为满足系统的性能需求所必需的算法和模块间的控制方式周转时间响应时间吞吐量精度确定外部信号的接收发送形式134.数据结构设计确定软件涉及的文件系统的结构以及数据库的模式、子模式,进行数据完整性和安全性的设计确定输入,输出文件的详细的数据结构结合算法设计,确定算法所必需的逻辑数据结构及其操作确定对逻辑数据结构所必需的那些操作的程序模块(软件包)14限制和确定各个数据设计决策的影响范围若需要与操作系统或调度程序接口所必须的控制表等数据时,确定其详细的数据结构和使用规则数据的保护性设计防卫性设计:在软件设计中就插入自动检错,报错和纠错的功能15一致性设计:保证软件运行过程中所使用的数据的类型和取值范围不变在并发处理过程中使用封锁和解除封锁机制保持数据不被破坏冗余性设计:针对同一问题,由两个开发者采用不同的程序设计风格不同的算法设计软件,当两者运行结果之差不在允许范围内时,利用检错系统予以纠正,或使用表决技术决定一个正确结果。165.可靠性设计可靠性设计也叫做质量设计在运行过程中,为了适应环境的变化和用户新的要求,需经常对软件进行改造和修正。在软件开发的一开始就要确定软件可靠性和其它质量指标,考虑相应措施,以使得软件易于修改和易于维护。176.编写概要设计阶段的文档概要设计阶段完成时应编写以下文档:概要设计说明书数据库设计说明书用户手册制定初步的测试计划187.概要设计评审可追溯性:确认该设计是否复盖了所有已确定的软件需求,软件每一成份是否可追溯到某一项需求接口:确认该软件的内部接口与外部接口是否已经明确定义。模块是否满足高内聚和低耦合的要求。模块作用范围是否在其控制范围之内风险:确认该设计在现有技术条件下和预算范围内是否能按时实现19实用性:确认该设计对于需求的解决方案是否实用技术清晰度:确认该设计是否以一种易于翻译成代码的形式表达可维护性:确认该设计是否考虑了方便未来的维护质量:确认该设计是否表现出良好的质量特征20各种选择方案:看是否考虑过其它方案,比较各种选择方案的标准是什么限制:评估对该软件的限制是否现实,是否与需求一致其它具体问题:对于文档、可测试性、设计过程..等进行评估21在详细设计过程中,需要完成的工作是:确定软件各个组成部分内的算法以及各部分的内部数据组织选定某种过程的表达形式来描述各种算法。进行详细设计的评审详细设计22软件设计基础自顶向下,逐步细化软件结构程序结构结构图模块化抽象化信息隐蔽23自顶向下,逐步细化将软件的体系结构按自顶向下方式,对各个层次的过程细节和数据细节逐层细化,直到用程序设计语言的语句能够实现为止,从而最后确立整个的体系结构。24软件结构软件结构包括两部分。程序的模块结构和数据的结构软件的体系结构通过一个划分过程来完成。该划分过程从需求分析确立的目标系统的模型出发,对整个问题进行分割,使其每个部分用一个或几个软件成份加以解决,整个问题就解决了2526程序结构程序结构表明了程序各个部件(模块)的组织情况,是软件的过程表示。27结构图结构图反映程序中模块之间的层次调用关系和联系:它以特定的符号表示模块、模块间的调用关系和模块间信息的传递28①模块:模块用矩形框表示,并用模块的名字标记它。29②模块的调用关系和接口:模块之间用单向箭头联结,箭头从调用模块指向被调用模块。30③模块间的信息传递:当一个模块调用另一个模块时,调用模块把数据或控制信息传送给被调用模块,以使被调用模块能够运行。而被调用模块在执行过程中又把它产生的数据或控制信息回送给调用模块31④在模块A的箭头尾部标以一个菱形符号,表示模块A有条件地调用另一个模块B。当一个在调用箭头尾部标以一个弧形符号,表示模块A反复调用模块C和模块D。32程序的系统结构图33模块化软件系统的模块化是指整个软件被划分成若干单独命名和可编址的部分,称之为模块。这些模块可以被组装起来以满足整个问题的需求。把问题/子问题的分解与软件开发中的系统/子系统或系统/模块对应起来,就能够把一个大而复杂的软件系统划分成易于理解的比较单纯的模块结构。34模块化的理论根据设函数C(x)定义问题x的复杂程度,函数E(x)确定解决问题x需要的工作量。对于两个问题P1和P2,如果:C(P1)C(P2),则显然有:E(P1)E(P2)根据人类解决一般问题的经验,有:C(P1+P2)C(P1)+C(P2)进而获得:E(P1+P2)E(P1)+E(P2)35模块化:把程序划分成为若干个模块,独立完成若干个功能,再把他们组成一个集体,可以完成指定的功能,满足问题的要求。“各个击破”原则不能无限分割最小成本区M成本模块数目软件总成本接口成本成本/模块36模块化原理的作用:使软件结构清晰;使软件容易测试和调试,从而提高软件的可靠性;提高软件的可修改性例子1:库存管理系统的模块划分事务接收模块更新库存清单订货处理生成报表例子2:人事管理系统人事部人事部输入职工档案职工档案管理系统生成职工档案报表系统37模块的概念模块(Module)“模块”,又称“组件”。它一般具有如下三个基本属性:功能:描述该模块实现什么功能逻辑:描述模块内部怎么做状态:该模块使用时的环境和条件38在描述一个模块时,还必须按模块的外部特性与内部特性分别描述模块的外部特性模块的模块名、参数表、其中的输入参数和输出参数,以及给程序以至整个系统造成的影响模块的内部特性完成其功能的程序代码和仅供该模块内部使用的数据39在结构化系统设计中。人们主要关心的是模块的外部属性,至于内部属性,将在系统实施工作中完成模块有大有小,它可以是一个程序,也可以是程序中的一个程序段或者一个子程序。40理想模块(黑箱模块)理想模块的特点:(1)每个理想模块只解决一个问题。(2)每个理想模块的功能都应该明确,使人容易理解。(3)理想模块之间的联结关系简单,具有独立性。(4)由理想模块构成的系统,容易使人理解,易于编程,易于测试,易于修改和维护。对用户来说,其感兴趣是模块的功能,而不必去理解模块内部的结构和原理。41模块的图形及符号(1)模块的图形:用矩形表示。模块的名称写在方框内,由一个动词和一个作为宾语的名词组成。例如:(2)模块间通讯的图形模块间通讯有两种:数据通讯、控制通讯。数据通讯是一个数据流,它表示了一个经过处理的数据从一个模块传向另一个模块。控制通讯,只传送一个标志,该标志只表达了处理工作的某种状态,而不是由被发送模块真正进行过处理的数据。修改库存42AB模块间的联结获得配件库存量读库存记录配件编号库存量无此配件模块间的通讯(3)模块间判断调用的图形一个模块是否调用某一个从属模块,依赖于调用模块中判断的条件。如果条件成立,则产生调用命令。ABCD43(4)模块间循环调用的图形指一个模块需要循环调用某一个或若干个从属模块。(5)层次图和HIPO图AC444546模块独立性模块独立性,是指软件系统中每个模块只涉及软件要求的具体的子功能,而和软件系统中其它的模块的接口是简单的例如,若一个模块只具有单一的功能且与其它模块没有太多的联系,则称此模块具有模块独立性一般采用两个准则度量模块独立性。即模块间耦合和模块内聚47耦合是模块之间的互相连接的紧密程度的度量。内聚是模块功能强度(一个模块内部各个元素彼此结合的紧密程度)的度量。模块独立性比较强的模块应是高内聚低耦合的模块。48模块间的耦合49非直接耦合(NondirectCoupling)两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的。非直接耦合的模块独立性最强。50数据耦合(DataCoupling)一个模块访问另一个模块时,彼此之间是通过简单数据参数(不是控制参数、公共数据结构或外部变量)来交换输入、输出信息的。这是模块之间影响最小的联结关系开发货单计算金额单价数量金额51特征耦合如果两个模块都与同一个数据结构有关,则称为特征耦合。计算水费和电费计算水费计算电费住户详情水费住户详情电费模块之间的特征联结52住户详情数据结构中包括“本月用水量”、“本月用电量”。上面的“特征耦合”图可改进为下面“数据耦合”图。计算水量和电费计算水费计算电费水费电费本月用水量本月用电量模块之间的数据耦合53控制耦合(ControlCoupling)如果一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能,就是控制耦合。54控制信息可以看作是一个开关量,它传递了一个控制信息或状态的标志。控制信息不同于数据信息,数据信息一般是通过处理过程处理和被处理的数据,而控制信息则是控制处理过程中的某些参数。当要查找的库存编号找不到时,经上级模块反馈一个控制信息,要求上级模块打印“无此库存记录”错误信息。获得库存记录检索库存记录库存编号库存量打印“无此库存记录”错误信息55外部耦合(ExternalCoupling)一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息,则称之为外部耦合。公共耦合(CommonCoupling)若一组模块都访问同一个公共数据环境,则它们之间的耦合就称为公共耦合。公共的数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等。56公共耦合的复杂程度随耦合模块的个数增加而显著增加。若只是两模块间有公共数据环境,则公共耦合有两种情况。松散公共耦合和紧密公共耦合。57公用耦合是一种不良的耦合关系,它给模块的维护和修改带来困难。如公共数据要作修改,很难判定有多少模块应用了该公共数据,故在模块设计时,一般不允许有公共联结关系的模块存在。ABC公用数据58内容耦合(ContentCoupling)如果发生下列情形,两个模块之间就发生了内容耦合(1)一个模块直接访问另一个模块的内部数据;(2)一个模块不通过正常入口转到另一模块内部;(3)两个模块有一部分程序代码重迭(只可能出现在汇编语言中);(4)一个模块有多个入口。59内容耦合(病态耦合)如果
本文标题:软件工程 软件设计方法
链接地址:https://www.777doc.com/doc-4007928 .html