已阅读5页,还剩621页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
软件工程,(SoftwareEngineering),计算机学院软件工程系杨易扬,常典型环境下各个开发阶段需要使用的人力百分比大致如下:,第2章:可行性研究,是否可解?是否值得去解?可行性研究的内容:技术可行性:技术,人员,软硬件资源经济可行性:投入VS产出,估算模型操作可行性:对管理模式、用户工作环境等产生的影响社会可行性:法律(专利,是否侵权),社会(道德,影响等),2.1可行性研究的任务(总成本5%),2.2可行性研究的步骤,1)复查系统规模和目标;2)研究目前正在使用的系统;(系统流程图)3)导出新系统的高层逻辑模型(数据流图、数据字典);4)重新定义问题;5)导出和评价供选择的解法(物理解决方案)6)推荐行动方案;7)草拟开发计划;8)书写文档提交审查。,1)货币的时间价值假设年利率为i,如果现在存入P元钱,则n年以后可以得到的钱数为:反之,如果n年后能收入F元钱,那么这些钱现在的价值是:,2.6成本/效益分析,第3章:需求分析,3.1.1确定对系统的综合要求1功能需求2性能需求如:相应时间(速度)、主存容量、磁盘容量、安全性、等。,3.1需求分析的任务,3.可靠性和可用性需求4.出错处理需求系统发现错误时采取的行动,主要在系统关键部分设置。5.接口需求用户接口、硬件接口、软件接口、通信接口、等。6.约束精度、工具和语言、设计约束、硬件约束、标准,等。7.逆向需求8.将来可能提出的要求,3.1.3导出系统的逻辑模型包括完善的数据流图、实体联系图、状态转换图、数据字典、主要的处理算法(IPO图)等。,3.1.2分析系统的数据要求通过建立数据模型来分析,如数据字典、层次方框图、Warnier图,并将数据结构规范化。,3.1.4修正系统开发计划修订前期制定的开发进度计划、等。,3.2与用户沟通获取需求的方法,3.2.1访谈,正式访谈:系统分析员提出事先准备好的问题。非正式访谈:提出一些用户可以自由回答的开放性问题,鼓励被访者说出自己的想法。需要访问大量人员时,利用调查表访问较佳。,3.2.2面向数据流自顶向下求精,借助数据流图、数据字典、IPO图等,细化、完善详细的数据流图,等到各处理环节对应的功能。,例:,分析销售趋势,统计功能,3.2.3简易的应用规格说明技术,面向团队的需求收集法:(用户与开发者配合)1)初步访谈;2)开发者和用户分别写出“产品需求”;3)开会讨论,各自展示需求列表;4)得出一致意见,为需求列表制定小型规格说明;5)根据会议成果,起草完整的软件需求规格说明。,3.2.4快速建立软件原型,快速建立能演示目标系统主要功能的程序。(1)第四代技术(2)可重用的软件构件(3)形式化规格说明和原型环境,3.3分析建模与规格说明,3.3.1分析建模为了开发复杂的系统,应从不同角度(模型)抽象出目标系统的特性(数据模型、功能模型、行为模型)。1)实体联系图:建立数据模型,描述数据对象及数据对象之间的关系;2)数据流图:建立功能模型的基础;3)状态转换图:描绘系统的状态和状态间转换的方式。,3.3.2软件需求规格说明,3.4概念模型(实体联系图),概念模型的用途概念模型用于信息世界的建模是现实世界到机器世界的一个中间层次是数据库设计的有力工具数据库设计人员和用户之间进行交流的语言对概念模型的基本要求较强的语义表达能力能够方便、直接地表达应用中的各种语义知识简单、清晰、易于用户理解,一、信息世界中的基本概念,(1)实体(Entity)客观存在并可相互区别的事物称为实体。可以是具体的人、事、物或抽象的概念。(2)属性(Attribute)实体所具有的某一特性称为属性。一个实体可以由若干个属性来刻画。(3)码(Key)唯一标识实体的属性集称为码。,信息世界中的基本概念(续),(4)域(Domain)属性的取值范围称为该属性的域。(5)实体型(EntityType)用实体名及其属性名集合来抽象和刻画同类实体称为实体型(6)实体集(EntitySet)同一类型实体的集合称为实体集,信息世界中的基本概念(续),(7)联系(Relationship)现实世界中事物内部以及事物之间的联系在信息世界中反映为实体内部的联系和实体之间的联系。实体内部的联系通常是指组成实体的各属性之间的联系实体之间的联系通常是指不同实体集之间的联系,两个实体型之间的联系,用图形来表示两个实体型之间的这三类联系,一对一联系(1:1)实例一个班级只有一个正班长一个班长只在一个班中任职定义:如果对于实体集A中的每一个实体,实体集B中至多有一个(也可以没有)实体与之联系,反之亦然,则称实体集A与实体集B具有一对一联系,记为1:1,一对多联系(1:n)实例一个班级中有若干名学生,每个学生只在一个班级中学习定义:如果对于实体集A中的每一个实体,实体集B中有n个实体(n0)与之联系,反之,对于实体集B中的每一个实体,实体集A中至多只有一个实体与之联系,则称实体集A与实体集B有一对多联系,记为1:n,多对多联系(m:n)实例课程与学生之间的联系:一门课程同时有若干个学生选修一个学生可以同时选修多门课程定义:如果对于实体集A中的每一个实体,实体集B中有n个实体(n0)与之联系,反之,对于实体集B中的每一个实体,实体集A中也有m个实体(m0)与之联系,则称实体集A与实体B具有多对多联系,记为m:n,3.4实体联系图(ER图),数据对象可以是外部实体、事物、行为、事件、角色、单位、地点、结构等。,3.4.1数据对象,3.4.2属性属性定义了数据对象的性质。,属性,3.4.3联系(1)一对一联系(1:1)(2)一对多联系(1:N)(3)多对多联系(M:N)在ER图中,用菱形框表示联系。,联系,例子:,一个实例,用E-R图表示某个工厂物资管理的概念模型实体仓库:仓库号、面积、电话号码零件:零件号、名称、规格、单价、描述供应商:供应商号、姓名、地址、电话号码、帐号项目:项目号、预算、开工日期职工:职工号、姓名、年龄、职称,实体之间的联系如下:(1)一个仓库可以存放多种零件,一种零件可以存放在多个仓库中。仓库和零件具有多对多的联系。用库存量来表示某种零件在某个仓库中的数量。(2)一个仓库有多个职工当仓库保管员,一个职工只能在一个仓库工作,仓库和职工之间是一对多的联系。职工实体型中具有一对多的联系(3)职工之间具有领导-被领导关系。即仓库主任领导若干保管员。(4)供应商、项目和零件三者之间具有多对多的联系,通常用范式定义消除数据冗余的程度。1)第一范式2)第二范式3)第三范式,3.5数据规范化,3.6状态转换图,3.6.1状态状态是任何可以被观察到的系统行为模式,一个状态代表系统的一种行为模式。3.6.2事件事件是某个特定时刻发生的事情,它是引起系统做动作或状态转换的控制信息。,3.6.3符号,3.6.4例子,3.7其他图形工具,层次方框图用树形结构的一系列多层次的矩形框描绘数据的层次结构。,3.7.1层次方框图,Warnier图也用树形结构描绘信息,但是这种图形工具比层次方框图提供了更丰富的描绘手段。,3.7.2Warnier图,IPO图是输入/处理/输出图。,3.7.3IPO图,3.8验证软件需求,1)一致性2)完整性3)现实性4)有效性,3.8.1验证软件需求的正确性,1)验证需求的一致性2)验证需求的现实性3)验证需求的完整性和有效性,3.8.2验证软件需求的方法,用于需求分析的软件应该满足下列要求:1)必须有形式化的语法2)使用这个软件工具能够导出详细的文档3)必须提供分析规格说明书的不一致性和冗余性的手段4)使用这个软件工具后,应该能够改进通信状况,3.8.3用于需求分析的软件工具,RSL(需求陈述语言):信息集ASSMPASCAL模拟程序PSL/PSA(问题陈述语言/问题陈述分析程序)系统,第3章小结,软件需求说明书(软件规格说明书)对所开发软件的功能、性能、用户界面及运行环境等作出详细的说明。它是在用户与开发人员双方对软件需求取得共同理解并达成协议的条件下编写的,也是实施开发工作的基础。该说明书应给出数据逻辑和数据采集的各项要求,为生成和维护系统数据文件做好准备。,第4章:形式化说明技术,1.非形式化方法:自然语言描述2.半形式化方法:数据流图或实体联系图3.形式化方法:基于数学技术描述,4.1概述,4.1.1非形式化方法的缺点自然语言书写的系统规格说明书可能存在:1)矛盾;2)二义性;如:“操作员标识由操作员姓名和密码组成,密码由6位数字构成,当操作员登陆系统时它被存储在注册文件中。”3)含糊性;4)不完整性;5)抽象层次混乱。,4.1.2形式化方法的优点(1)数学是理想的建模工具,适合于表示系统状态和描述系统需求;(2)用数学表达的需求可在不同开发阶段平滑过渡。,4.1.3应用形式化方法的准则(1)选择合适的形式化方法;(2)需要形式化,但不能过渡形式化,不能放弃传统的需求表达方法;(3)应该有形式化方法的专家提供指导。,4.2有穷状态机法(FSM),4.2.1概念,锁的三个位置:1、2、3;转盘可向左(L)或右(R);锁密码:1L、3R、2L,一个有穷状态机包括5部分:1)状态集J:保险箱锁定,A,B,保险箱解锁,报警2)输入集K:1L,1R,2L,2R,3L,3R3)转换函数T,如表4.14)初始状态S:保险箱锁定5)终态集F:保险箱解锁,报警更形式化的术语:一个有穷状态机可表示一个为5元组(J,K,T,S,F),状态转换形式:当前状态【菜单】事件【所选择的项】下个状态加入谓词集P,把系统扩展成一个6元组后:当前状态【菜单】事件【所选择的项】谓词下个状态,计算机系统中每个菜单驱动的用户界面都是一个有穷状态机的实现。,定义状态:(1)M(d,e,f):电梯e正沿d方向移动,即将到达第f层楼。(2)S(d,e,f):电梯e停在f层楼,将朝d方向移动(未关门)。(3)W(e,f):电梯e在f层等待(已关门)。(4)DC(e,f):电梯e在楼层f关上门。(5)ST(e,f):电梯e靠近f层时触发传感器,电梯控制器决定在当前楼层是否停下。(6)RL:电梯按钮或楼层按钮被按下进入打开状态,4.2.2例子:电梯的状态转换,电梯状态转换规则:S(U,e,f)+DC(e,f)=M(U,e,f+1);S(D,e,f)+DC(e,f)=M(D,e,f-1);S(N,e,f)+DC(e,f)=W(e,f),4.2.3评价有穷状态机描述规格说明:当前状态事件谓词=下个状态易于书写、验证、转变成设计或程序代码。,有穷状态机方法比数据流图技术更精确,一样易于理解。但不能处理定时需求。大系统时,数量迅速增长,4.3Petri网,4.3.1概念,Petri网包含4种元素:1)一组位置P,上例PP1,P2,P3,P42)一组转换T,上例Tt1,t23)输入函数I,上例I(t1)=P2,P4I(t2)=P24)输出函数O,上例O(t1)=P1O(t2)=P3,P3更形式化的Petri网结构,是一个4元组(P,T,I,O),权标向量(1,2,0,1),权标向量(2,1,0,0),权标向量(2,0,2,0),更形式化地:标记M:P0,1,2,Petri网成为一个5元组(P,T,I,O,M),对Petri网的一个重要扩充是加入禁止线:,4.3.2例子1.电梯按钮,EBf电梯中楼层f的按钮;Fg楼层g;Ff楼层f。,2.楼层按钮,FBfu第f楼层向上按钮;FBfd第f楼层向下按钮;,小结基于数学的形式化说明技术,目前还没有在软件产业界广泛应用;应该把形式化方法与传统方法有机结合。,第5章:总体设计,5.1设计过程,1.设想供选择的方案,2.选择合理的方案对每个合理的方案要提供:A系统流程图B组成系统的物理元素清单C成本/效益分析D实现这个系统的进度计划,3.推荐最佳方案4.功能分解5.设计软件结构6.数据库设计A模式设计B子模式设计C完整性和安全性设计D优化,7.制定测试计划8.书写文档A系统说明B用户手册C测试计划D详细的实现计划E数据库设计结果9.审查和复审,5.2设计原理,如果一个大型程序仅由一个模块组成,很难被人理解。设函数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),5.2.1模块化,5.2.2抽象,5.2.3逐步求精,模块的独立性很重要,因为:1)有效的模块化的软件比较容易开发出来;2)独立的模块比较容易测试和维护。,5.2.4信息隐蔽和局部化,5.2.5模块独立,一、耦合,耦合:指软件结构内不同模块彼此之间相互依赖(连接)的紧密程度。,模块独立程度可以由两个定性标准度量:耦合与内聚。,模块的偶合分四类:1)数据耦合两个模块之间只是通过参数交换信息,而且交换的信息仅仅是数据。数据耦合是最低程度的耦合。,2)控制耦合两个模块之间所交换的信息包含控制信息。控制耦合是中等程度的耦合。,图中模块A的内部处理程序判断是执行C还是执行D,要取决于模块B传来的信息状态(Status)。,3)公用耦合两个或多个模块通过一个公共区相互作用时的耦合。公共区可以是:全程数据区、共享通信区、内存公共覆盖区、任何介质上的文件、物理设备等。软件结构中存在大量的公用耦合时会给诊断错误带来困难。,图中存在公用耦合,假设模块A、C、E都存取全程数据区(如公用一个磁盘文件)中的一个数据项。如果A模块读取该项数据,然后调用C模块对该项重新计算,并进行数据更新。,如果此时C模块错误地更新了该项数据,在往下的处理中模块E读该数据项时出现错误。表面上看,问题由模块E产生,实际上由模块C引起。,4)内容耦合一个模块与另一个模块的内容直接发生联系。内容耦合对维护会带来严重的困难。,程序中如果一个模块直接把程序转移到另一个模块中,或一个模块使用另一个模块内部的数据,都会产生内容耦合。内容耦合是最高程度的耦合,应该避免采用。,软件设计应追求尽可能松散耦合,避免强耦合,这样模块间的联系就越小,模块的独立性就越强,对模块的测试、维护就越容易。因此建议:尽量使用数据耦合,少用控制耦合,限制公用耦合,完全不用内容偶合。,二、内聚,内聚:一个模块内部各个元素彼此结合的紧密程度。它是衡量一个模块内部组成部分间整体统一性的度量。常见的内聚有七类。,1)功能内聚(FunctionalCohesion)如果一个模块内所有处理元素完成一个,而且仅完成一个功能,则称为功能内聚。功能内聚是最高程度的内聚。但在软件结构中,并不是每个模块都能设计成一个功能内聚模块。,2)顺序内聚(SequentialCohesion)如果一个模块内处理元素和同一个功能密切相关,而且这些处理元素必须顺序执行,则称为顺序内聚。,如图,一个求一元二次方程根的模块由三个处理元素组成,该模块中存在顺序内聚。通常,顺序内聚中一个处理元素的输出是另一个处理元素的输入。,3)通信内聚(CommunicationalCohesion)如果一个模块中所有处理元素都使用同一个输入数据和(或)产生同一个输出数据,称为通信内聚。,如图,模块A的处理单元将根据同一个数据文件FILE的数据产生不同的表格,因此它存在通信内聚。通信内聚有时也称为数据内聚。,4)过程内聚(ProceduralCohesion)如果一个模块内的处理元素是相关的,而且必须以特定的次序执行,称为过程内聚。过程内聚与顺序内聚的区别是:顺序内聚中是数据流从一个处理单元流到另一个处理单元,而过程内聚是控制流从一个动作流向另一个动作。,5)时间内聚(TemporalCohesion)如果一个模块包含的任务必须在同一段时间内执行,称为时间内聚。也称为瞬时内聚。,例如,完成各种初始化工作的模块,或者处理故障的模块都存在时间内聚。如图,在“紧急故障处理模块”中,“关闭文件”、“报警”、“保留现场”等任务都必须无中断地同时处理。,6)逻辑内聚(LogicalCohesion)如果模块完成的任务在逻辑上属于相同或相似的一类,称为逻辑内聚。,如图,A、B、C模块合并成ABC模块之后,ABC模块就是逻辑内聚模块。,对逻辑内聚模块的调用,常常需要有一个功能开关,由上层调用模块向它发出一个控制信号,在多个关联性功能中选择执行某一个功能。这种内聚较差,增加了模块之间的联系,不易修改。,7)偶然内聚(CoincidentalCohesion)如果一个模块由完成若干毫无关系的功能处理元素偶然组合在一起的,就叫偶然内聚。,偶然内聚是最差的一种内聚。常犯这种错误的一种情况是:有时在写完程序后,发现一组语句在多处出现,于是为了节省空间而将这些语句作为一个模块设计,就出现偶然内聚。,如图,模块A、B、C出现公共代码段W,于是将W独立成一个模块,而W中这些语句并没有任何联系。如果在测试中发现模块A不需要做“X=Y+Z”,而应该做“X=Y*Z”,此时对W的维护就很困难了。,软件设计中应该:力求做到高内聚,尽量少用中内聚,不用低内聚。,5.3启发式规则,1.改进软件结构提高模块独立性2.模块规模应该适中,3.深度、宽度、扇出和扇入都应适当深度:软件结构中控制的层数;宽度:软件结构内同一个层次上的模块总数的最大值;扇出:一个模块直接控制(调用)其它模块的数目;扇入:一个模块被其它模块调用的数目。,对扇出、扇入过大的改进:,4.模块的作用域应该在控制域之内,作用域:受该模块内一个判定影响的所有模块的集合。控制域:模块本身以及所有从属于它的模块的集合。,如:QUAD-ROOT(TBL,X)求一元二次方程的根的模块,其中TBL,X都为数组,分别代表方程的系数和方程的根。应该使接口更简单,如:QUAD-ROOT(A,B,C,ROOT1,ROOT2)A、B、C是方程的系数,ROOT1,ROOT2是方程的根。,5.力争降低模块接口的复杂度,6.设计单入口、单出口的模块,7.模块功能应该可以预测,5.4图形工具5.4.1层次图和HIPO图,HIPO图是:“层次图输入/处理/输出图”,5.4.2结构图,5.5面向数据流的设计方法,面向数据流设计(DataFlow-OrientedDesign,DFOD)是与数据流分析(DFA)对应的结构化软件设计技术。面向数据流的设计将得到以数据流图为基础的软件模块结构图。,数据流可以分为两种类型:1)变换型数据流2)事务型数据流,5.5.1变换流与事务流,一、变换流具有较明确的输入、变换(或称主加工)和输出界面的数据流图称为变换型数据流图。如图所示,该变换中心可以理解为数据的加工和处理程序。,事务型数据流图中存在一个事务中心(也就是数据处理、加工中心),它将输入分离成若干个发散的数据流,形成许多活动路径,并根据输入值选择其中一条路径。,二、事务流,通常,一个实际系统的数据流图是变换型和事务型两种类型的混合体。如图所示,中间的子块属事务型数据流,如果把中间子块视为一个处理整体的话,整个程序属变换型程序。,面向数据流设计软件结构的基本步骤有七步:1)复审并精化数据流图;2)确定数据处理流图的类型;3)确定变换中心或事务中心;,5.5.2面向数据流设计的步骤,4)将数据流图映射成软件模块结构图,设计出该数据流图对应的第一层模块结构;5)基于数据流图逐步分解,设计下层模块;6)运用模块设计和优化准则优化软件结构;7)描述模块的接口。,变换设计就是从变换型数据流图映射出软件模块结构的过程,也称以变换为中心的设计。,5.5.3变换设计,变换设计的基本方法有两步:1)分解第一层模块结构就是把整个变换分解成输入控制模块Ci、输出控制模块Co和变换中心控制模块Ct,由主控模块控制。,2)分别设计输入、输出和处理的下层模块结构方法是:从变换中心边界向两侧移动,分别把输入通路和输出通路的每个处理映射成输入控制模块Ci和输出控制模块Co的下属模块。变换中心的下层模块,是把每个处理映射成变换中心控制模块Ct的一个直接下属模块。,事务设计就是从事务型数据流图映射出软件模块结构的过程,也称为以事务为中心的设计。,5.5.4事务设计,事务设计的基本方法有两步:1)建立主控模块、接收输入类型分析模块和事务调度模块;,2)分别设计输入类型分析模块和调度模块的下层模块结构。方法是:将输出的每条通路作为调度模块的一个判断分支,而输入类型分析模块的下层模块与变换设计类似。,第5章小结,概要设计说明书该说明书是概要实际阶段的工作成果,它应说明功能分配、模块划分、程序的总体结构、输入输出以及接口设计、运行设计、数据结构设计和出错处理设计等,为详细设计提供基础。,第6章:详细设计,目标:确定如何具体实现所要求的系统。不是具体编写程序,而是设计程序的“蓝图”。详细设计的结果决定最终程序代码的质量。,6.1结构程序设计,E.W.Dijkstra最早提出结构程序设计:程序质量与程序中包含的Goto语句的数量成反比(1965)。1966,Bohm,Jacopini,证明了只用“顺序”、“选择”、“循环”控制结构就能实现任何单入口单出口程序。,理论上,最基本的控制结构只有两种:顺序、循环结构(选择结构可由其两者构造)。学界认识到,不是简单去掉Goto语句的问题,而是要创立一种新的程序设计方法。结构化程序设计(IBM率先成功运用)。,结构程序设计:一种设计程序的技术,它采用自顶向下逐步求精的设计方法和单入口单出口的控制结构。,使用结构程序设计技术的好处:1)提高软件开发工程的成功率和生产率;2)系统有清晰的层次结构,容易阅读理解;3)单入口单出口的控制结构,容易诊断纠正;4)模块化可以使得软件可以重用;5)程序逻辑结构清晰,有利于程序正确性证明。,经典的结构程序设计:只允许使用顺序、IF_THEN_ELSE选择和DO_WHILE循环;,扩展的结构程序设计:除了三种基本控制结构,还使用DO_CASE和DO_UNTIL循环;,修正的结构程序设计:除了三种基本控制结构和两种扩充结构,还使用BREAK等结构。,流程图通常由三种结点组成:1)函数结点如果一个结点有一个入口线和一个出口线,则称为函数结点。,由于函数结点一般对应于赋值语句,所以F也表示了这一个结点对应的函数关系。,6.1.1结构化程序6.1.1.1控制结构,2)谓词结点如果一个结点有一个入口线和两个出口线,而且它不改变程序的数据项的值,则称为谓词结点。,P是一个谓词,根据P的逻辑值(T或F),结点有不同的出口。,3)汇点如果一个结点有两个或多个入口线和一个出口线,而且它不执行任何运算,则称为汇点。,1)顺序结构:相当于“A、B”,2.三种基本控制结构,2)选择结构相当于“IfexpthenAelseBendif”,3)循环结构:相当于“WhileexpdoA”,1)多分支结构相当于“CaseIofI=1:C1;I=2:C2;I=3:C3;I=n:Cn”,3.扩充两种控制结构,2)UNTIL循环结构相当于“RepeatAUntilexp”,6.1.1.2正规程序定义1:一个流程图程序如果满足下面两个条件,称为正规程序:1)具有一个入口线和一个出口线;2)对每一个结点,都有一条从入口线到出口线的通路通过该结点。,由于正规程序有一个入口线和一个出口线,因而一个正规程序总可以抽象为一个函数结点。,定义2:如果一个正规程序的某个部分仍然是正规程序,那么称它为该正规程序的正规子程序。,先给出一个概念:封闭结构定义3:流程图中,两个结点之间所有没有重复结点的通路组成的结构称为封闭结构。,6.1.1.3基本程序,如图:封闭结构为a-b1-b2-b3;c1-c2;d1-d2-d3;e-f,1)不包括多于一个结点的正规子程序,即它是一种不可再分解的正规程序;(程序自身不可视为正规子程序)2)如果存在封闭结构,封闭结构都是正规程序。,6.1.1.3基本程序,定义4:一个正规程序,如果满足以下两个条件,则称之为基本程序:,基本程序形式有多种,前面提到的三种基本控制结构(顺序结构、选择结构、循环结构)和两个扩充控制结构(多分支结构、UNTIL循环结构)都是基本程序。,定义5:用以构造程序的基本程序的集合称为基集合。如:顺序,if-then-else,whiledo顺序,if-then-else,repeat-until都是基集合。,定义6:如果一个基本程序的函数结点用另一个基本函数程序替换,产生的新的正规程序称为复合程序。,循环结构的A函数结点用另一循环结构代替,即嵌套循环,就产生了复合程序。,由于复合程序是由一些基本程序组成,因此,无论从总体上看或是从每个组成部分看,都满足“一个入口,一个出口”的原则,这样的程序就是通常说的好结构程序,或者结构化程序。,定义7:由基本程序的一个固定的基集合构造出的复合程序,称为结构化程序。,结构化定理:任一正规程序都可以函数等价于一个由基集合顺序,If-else-then,While-do产生的结构化程序。实际上,只要能证明可以将任一正规程序转换成等价的结构化程序就可以证明这个结构化定理。,6.1.2结构化定理,证明:(分三步进行结构化程序的转换)步骤一:从程序入口处开始给程序的函数结点和谓词结点编号:1,2,3,n,同时,将每个函数和谓词结点的出口线用它后面的结点的号码进行编号,如果出口线后面没有结点,也就是说该结点的出口线与程序的出口线相连时,出口线编号为0。,步骤二:对原程序中每一个编号为i,出口线编号为j的函数结点H,构造一个新的序列程序Gi,如图:,类似地,对于每个编号为i,出口线分别为j和k的谓词结点,构造一个新的选择程序Gi,如图:,步骤三:利用已经得到的一些Gi程序(i=1,2,3,n),按下图的形式构造一个While-do循环。,图中的循环体是一个对L从1到n的嵌套选择(if-then-else)程序,转换后的程序与原程序是等价的,是由基集合顺序、选择、循环所复合成的结构化程序。,这种方法并不是唯一的把程序转变为结构化程序的方法,所得的程序也不一定是最好的。它的目的是为了证明结构化定理。,例1:把图示的非结构化程序转换成结构化程序(用结构化定理证明过程提供的方法转换),6.1.3非结构化程序到结构化程序的转换,1)进行结点及其出口线的编号;,2)将图中的四个结点构造新的程序G1、G2、G3、G4;,3)利用得到的G1、G2、G3、G4按介绍的方法构造一个While-do循环,最终结果如图:,6.2人机界面设计,6.2.1设计问题1.系统响应时间;2.用户帮助;3.出错信息处理;4.命令交互,6.2.2设计过程6.2.3人机界面设计指南1.一般交互指南;2.信息显示指南;3.数据输入指南。,6.3过程设计的工具,6.3.1程序流程图,程序流程图:是一种描述程序的控制结构流程和指令执行情况的有向图。历史悠久、使用广泛、直观描绘控制流程、便于初学者掌握。,ASP检索程序流程图:,2)程序流程图中用箭头代表控制流,因此程序员不受任何约束,可以完全不顾结构程序设计的精神,随意转移控制。3)程序流程图不易表示数据结构。,程序流程图的缺点:1)程序流程图本质上不是逐步求精的好工具,它诱使程序员过早地考虑程序的控制流程,而不去考虑程序的全局结构。,6.3.2盒图(N-S图),盒图的特点有:1)功能域明确,可以从盒图上一眼就看出来;2)不可能任意转移控制;3)很容易确定局部和全程数据的作用域;4)很容易表现嵌套关系,也可以表示模块的层次结构。,盒图例子,PAD(ProblemAnalysisDiagram)是问题分析图。日立公司发明和推广(1973)。,6.3.3PAD图,例子:,PAD图的优点:1)使用表示结构化控制结构的PAD符号所设计出来的程序必然是结构化程序;2)PAD图所描绘的程序结构十分清晰。图中最左面的竖线是程序的主线,即第一层结构。随着程序层次的增加,PAD图逐渐向右延伸,每增加一个层次,图形向右扩展一条竖线。PAD图中竖线的总条数就是程序的层次数;,3)用PAD图表现程序,通俗易懂,程序从图中最左竖线上端的结点开始执行,自上而下,从左向右顺序执行,遍历所有结点;,4)容易将PAD图转换成高级语言源程序,这种转换可以用软件工具自动完成;5)可用于表示程序逻辑,也可用于描绘数据结构;6)PAD图的符号支持自顶向下、逐步求精的方法。,判定表由四部分组成:左上部列出所有条件左下部是所有可能做的动作右上部表示各种条件组合右下部是和每种条件组合相对应的动作,6.3.4判定表,6.3.5判定树判定树是判定表的变种。,PDL也称为伪码。如:ifI0then执行订单数据输入模块else报告出错信息endif,6.3.6过程设计语言(PDL),PDL的优点:1)可以作为注释直接插在源程序中间;2)可以使用普通的正文编辑程序或文字处理系统来完成PDL的书写和编辑工作;3)现在已经有一些自动处理程序可以自动地把PDL生成程序代码。,PDL的缺点:不如图形工具形象直观。,6.4面向数据结构的设计方法,1)顺序结构,6.4.1Jackson图,2)选择结构,3)重复结构,6.4.2改进的Jackson图,Jackson方法的目标是:得出对程序处理过程的详细描述。,6.4.3Jackson方法,Jackson结构程序设计方法由五个步骤组成:1)分析并确定输入数据和输出数据的逻辑结构,并用Jackson图描绘这些数据结构;2)找出输入数据结构和输出数据结构中有对应关系的数据单元;,3)用三条规则从描绘数据结构的Jackson图导出描绘程序结构的Jackson图:A为每对有对应关系的数据单元,按照它们在数据结构图中的层次在程序结构图的相应层次画一个处理框;,B根据输入数据结构中剩余的每个数据单元所处的层次,在程序结构图的相应层次分别为它们画上对应的处理框;C根据输出数据结构中剩余的每个数据单元所处的层次,在程序结构图的相应层次分别为它们画上对应的处理框;,4)列出所有操作和条件(包括分支条件和循环结束条件),并且把它们分配到程序结构图的适当位置;5)用伪码表示程序。,顺序结构:AseqBCDAend,与三种基本结构对应的伪码是:,选择结构Aselectcond1BAorcond2CAorcond3DAend,重复结构Aiteruntil(或while)condBAend,例:一个正文文件由若干记录组成,每个记录是一个字符串。如:Record1:Howmanystagesarethereinthetraditionalsoftwaredevelopmentmodel?Record2:Afterenteringtheroom,walktothepersonsittingnearesttoyouandgreethim/herwitha“highfive”.Record3:Whatareencapsulatedintoanobject?Record4:Whatdiagramisthefollowingdiagram?Simplydescribethemeaningofit.,要求:1)设计程序统计每个记录中空格字符的个数,输出数据的格式是,每读入一个记录(字符串)之后,另起一行打印出这个字符串及其空格数;2)最后打印出文件中空格的总个数。,分析输入、输出数据结构,用Jackson图描绘,并找出两者对应的数据单元:,导出描绘程序结构的Jackson图:,(1)停止(2)打开文件(3)关闭文件(4)印出字符串(5)印出空格数目(6)印出空格总数(7)sum:=sum+1(8)totalsum:=totalsum+sum(9)读入字符串(10)sum:=0(11)totalsum:=0(12)pointer:=1(13)pointer:=pointer+1I(1)文件结束I(2)字符串结束S(3)字符是空格,列出所有操作和条件:,6.5程序复杂度的定量度量,定量度量程序复杂度的作用:(1)可估算软件中错误的数量及软件开发工作量;(2)度量的结果可用来比较不同设计或不同算法的优劣;(3)程序的复杂度可作为模块规模的限度。,1.流图“退化”的程序流程图,仅描绘程序的控制流程,不表现对数据的具体操作及循环、选择的条件。,6.5.1McCabe方法,一个圆代表一条或多条语句;一个顺序结构可以合并成一个结点;,汇点也是结点;一个顺序处理框序列和一个判断框可映射成一个结点。,复合条件:包含了一个或多个布尔运算符(OR、AND、NOR等)。应把复合条件分解为简单条件,每个条件对应一个结点。,2.计算环形复杂度的方法1)环形复杂度V(G)等于流图中的区域数;2)环形复杂度V(G)EN+2,其中E是流图中边的条数,N是结点数;3)环形复杂度V(G)P1,其中P为流图中判定结点的数目。,例:计算下列程序图的程序复杂度,解:方法一:程序图把平面分为4个区域,程序复杂度V(G)4;方法二:边的条数E11,结点数N9,程序复杂度V(G)EN24;方法三:判定结点为1、2、4点,数目为P3个,所以V(G)P14。,3.环形复杂度的用途对测试难度的一种定量度量,也能对软件最终的可靠性给出某种预测。实践表明,模块规模以V(G)10为宜。,根据程序中运算符和操作数的总数来度量程序复杂度。N=N1+N2其中:N定义为程序长度;N1为程序中运算符出现的总次数;N2为操作数出现的总次数。,6.5.2Halstead方法,Halstead给出预测程序长度的公式为:H=n1log2n1+n2log2n2其中:H定义为程序预测长度;n1为程序中使用的不同运算符(包括关键字)的个数;n2为程序中使用的不同操作数(变量和常量)的个数。,多次验证都表明,程序的预测长度H和实际程序长度N非常接近。Halstead还给出了预测程序中包含错误的个数的公式:E=Nlog2(n1+n2)/3000,第6章小结,详细设计说明书着重描述每一模块是怎样实现的,包括实现算法、逻辑流程等。,第7章:实现,编码和测试统称为实现。编码:把软件设计结果翻译成程序。测试:检测程序并改正错误的过程。,计算机程序设计语言基本上可以分为两大类:1.汇编语言;2.高级语言。,7.1编码,7.1.1选择程序设计语言,从应用特点看,高级语言可分为:1)基础语言如BASIC、FORTRAN、COBOL、ALGOL等2)结构化语言如ALGOL、PL/1、PASCAL、C、ADA等3)专用语言如APL、BLISS、FORTH、LISP、PROLOG等,选择一种编程语言的理论标准:1)有理想的模块化机制;2)可读性好的控制结构和数据结构;3)便于调试和提高软件可靠性;4)编译程序发现程序错误的能力强;5)有良好的独立编译机制。,选择语言时除了考虑理论上的标准,还必须同时考虑主要的实用标准:,(1)系统用户要求(2)可以使用的编译程序(3)可以得到的软件工具(4)工程规模(5)程序员知识(6)软件可移植性要求(7)软件的应用领域,1.程序内部的文档选取含义鲜明的名字,如果使用缩写,缩写规则要一致,并给每个名字加注释;通常在每个模块开始处要有一段注释,描述模块功能、算法、接口特点等;程序清单布局应利用适当的阶梯形式,使程序的层次结构清晰明显。,7.1.2写程序的风格,2.数据说明数据说明的次序应该标准化,如按数据类型确定说明的次序;多个变量名在一个语句中说明时,应该按字母顺序排列这些变量;如果设计时使用了复杂的数据结构,应该用注释说明实现该数据结构的方法和特点。,3.语句构造4.输入/输出5.效率A程序运行时间B存储器效率C输入/输出效率,程序设计工具实例:VisualC,运用VisualC+开发工具需要掌握:C语言特点、语法;Windows编程基础;MFC相关知识;VisualC集成开发工具环境的使用;,一、C语言特点、语法:C+语言是在C语言的基础是扩展而成的,两种语言的基本语法和语义是相同。,C+中加入了面向对象程序设计(OOP)的特征:封装性:通过“类”把属性和函数组合在一起。继承性:派生类可从先前定义的基类中继承函数和属性。多态性:一个函数名,由不同的对象解释执行,可得到不同的执行效果。,二、Windows编程基础:API:API是Windows应用程序编程接口。API是一个程序内(或一组相关程序内)的一组函数调用,程序员用它创建其他程序。程序员不必知道函数内部,只要知道API的函数原型及返回值。API的函数原型及返回值形式可由相关的技术规范资料获得。,现在的Win32API中,核心部分依靠三个主要组件提供Windows的大部分函数,这三个组件分别是:USER32.DLL;GDI32.DLL;KERNEL32.DLL。,Windows消息机制:1)基于消息的事件驱动消息可以是由硬件发来的(存于系统队列),也可以由Windows系统和应用程序发来(存于程序队列中);每一个Windows程序在不停的捕捉各种消息,并进行处理;每个窗口都必须有一个窗口函数,来负责消息的判断与处理。,2)窗口函数对消息的处理窗口函数是一个回调函数,可以处理收到的消息,在程序中不需要用户显式调用。该窗口函数的形式通常为:WndProc(),每个窗口类必须在初始化时指定一个窗口函数。,三、MFC:MFC,即Microsoft基本类,该类库封装了SDK(软件开发工具包)结构、功能及应用程序框架内部技术。它提供了许多可以重用的类,使得Windows程序员避免了许多重复性工作。,四、VisualC集成开发工具环境1)开发工具的使用;2)掌握Win32程序开发流程;一个win32程序由两大块组成:程序代码;用户接口资源。,用户接口资源:菜单,对话框,图标,光标等;这些资源的实际内容(二进制代码)由各种工具产生,并以各种扩展名的文件存在;,资源描述文件(*.rc)中对用户接口资源进行描述;RC编辑器(RC.exe)根据该资源描述文件(*.rc)将所有用户接口资源集中构造一个*.RES文件;*.RES文件与程序代码结合起来,构成一个Win32程序。,关于函数库和头文件:动态链接库:应用程序调用的API函数在“执行期间”才链接上的函数库,扩展名可以是.dll,也可以是.exe、.fon、.mod、.drv、.ocx等。静态连接库:.lib头文件:如windows.h,它包含操作系统本身的三大模块gdi32.dll、user32.dll和kernel32.dll中的所有API函数。,7.2软件测试基础,有关测试的一些规则:(1)测试是为了发现程序中的错误而执行程序的过程;(2)好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案;(3)成功的测试是发现了至今为止尚未发现的错误的测试。,7.2.1软件测试的目标,7.2.2软件测试准则,1)所有测试都应该能追溯到用户需求;2)应该远在测试前就制定出测试计划;3)把Pareto原理应用到软件测试中;4)应该从“小规模”测试开始,并逐步进行“大规模”测试;,5)穷举测试是不可能的;,穷尽测试:包含所有可能情况的测试称为穷尽测试。,6)为了达到最佳测试效果,应该由独立的第三方从事测试工作。,黑盒测试:如果已经知道软件应该具有的功能,可以通过测试来检验是否每个功能都能正常使用,这种测试称黑盒测试。也称功能测试。,7.2.3测试方法,白盒测试:也称结构测试。如果知道软件内部工作过程,可以通过测试来检验软件内部动作是否按照规格说明书的规定正常进行,这种测试称为白盒测试。,1.模块测试模块测试又称单元测试,它把每个模块作为单独的实体来测试。2.子系统测试子系统测试是把经过单元测试的模块放在一起形成一个子系统来测试。,7.2.4软件测试的步骤,3.系统测试系统测试是把经过测试的子系统装配成一个完整的系统来测试。4.验收测试验收测试把软件系统作为单一的实体进行测试(利用用户的实际数据测试)。5.平行运行平行运行是同时运行新开发出来的系统和将被它取代的旧系统,以便比较新旧两个系统的处理结果。,7.2.5测试阶段的信息流,7.3单元测试,单元测试的一般方法是:首先通过编译系统检查并改正程序中所有的语法错误;然后用详细设计模块说明为指南,对重要的控制路径进行测试,以便发现模块内部的错误。通常,单元测试使用白盒测试方法。,1)模块接口应该对穿过模块接口的数据流进行检测,以保证正确的输入和输出。2)局部数据结构这是错误的主要来源,应该设计相应的测试用例,以便发现数据结构方面的错误。,7.3.1测试重点,3)重要的执行路径由于不可能进行穷尽测试,因此选择测试路径是非常关键的。4)出错处理通路5)边界条件,审查小组:1)组长;2)程序的设计者;3)程序的编写者;4)程序的测试者。,7.3.2代码审查,7.3.3计算机测试由于软件模块不是一个独立的系统,不能独立运行,要依靠其他模块调用,或需要调用其他模块。因此,必须要为测试的单元开发驱动程序或存根程序。,1)驱动程序相当于一个“主程序”,用来把测试数据传送给被测试的模块,并打印有关结果。2)存根程序用来代替被测试模块所调用的模块,相当于“虚拟子程序”。,如,测试B模块,设计了A模块和C模块。由A负责传送测试数据,由C负责模拟被B调用的模块。C模块可能没有,这取决于B有没有调用其他程序。A、C都是一次性程序,只在测试时临时使用,应尽量设计得简单一些,以节省费用和时间。,例:,对“编辑”功能的测试:,7.4集成测试,集成测试是组装软件的系统化技术,它将经过单元测试的模块联系在一起进行测试。由模块组装成程序时有两种方法:1)非渐增式测试方法先分别测试每个模块,再把所有模块按设计要求放在一起结合成所要的程序。,2)渐增式测试方法每次增加一个待测试模块,把它同已经测试好的那些模块结合起来进行测试,反复进行直到完成所有模块测试的方法。,使用渐增式测试方法把模块结合到软件系统中去时,有自顶向下和自底向上两种集成方法。,自顶向下集成是一种递增的装配软件结构的方法,这种方法应用非常广泛。它需要存根程序,但是不需要驱动程序。,7.4.1自顶向下集成,这种方法的思想是:从主控模块(主程序)开始,沿软件的控制层次向下移动,逐渐把各个模块结合起来。在自顶向下结合方法中,如何将所有模块组装到软件结构中,又有两种方法:,1)深度优先策略先组装软件结构的一条主控制通路上的所有模块,选择哪条主控制通路,具有较大的任意性。如图,如果选取左通路,就先把模块M1、M2、M5结合起来测试,然后结合模块M8、M6,再构造中央和右侧的控制通路。,2)宽度优先策略沿着软件结构水平地移动,把处于同一个层次的所有模块组装起来。如图,首先结合M2、M3、M4和主控模块M1,然后结合下一个控制层次中的模块M5、M6和M7,最后结合模块M8。,自顶向下集成方法的基本过程如下:1)对主控模块进行测试,测试时用存根程序代替所有直接被主控模块调用的模块;,2)根据选定的结合策略(深度优先或宽度优先),每次用一个实际模块代替一个存根程序(新结合的模块往往又需要新的存根程序);,3)每结合一个模块,就测试一个;4)为保证不引入新的错误,需要进行回归测试,即重复
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025 年大学智能建造(智能建筑技术)试题及答案
- 景区消防安全试题及答案
- 村级防疫员考试模拟试题及答案
- 叉车卸车专项应急预案(3篇)
- 2025年上海市中考综合测试(物理、化学)试卷真题(含答案解析)
- 如何做好监控管理工作
- 细菌性食物中毒病人的护理课件
- 2025年电大婚姻家庭法学形成性考核册模拟试题及答案
- 初探绩效考核在人力资源管理中的作用-图文
- 天津中考默写填空真题及答案
- T-CHATA 023-2022 结核病定点医疗机构结核感染预防与控制规范
- 2025年中国素描本行业市场分析及投资价值评估前景预测报告
- 婴幼儿心肺复苏课件
- 中职创意美术课件
- 2025年时事政治热点题库道及参考答案
- GB/T 17219-2025生活饮用水输配水设备、防护材料及水处理材料卫生安全评价
- DB6110T 007-2021 天麻大田种植技术规程
- GB/T 46141-2025智慧城市基础设施智慧交通数字化支付应用指南
- 知道智慧树我们身边的知识产权满分测试答案
- 2025 年小升初成都市初一新生分班考试语文试卷(带答案解析)-(部编版)
- 化学信息学考核试卷
评论
0/150
提交评论