收藏 分享(赏)

软件工程导论(第五版)ppt课件.ppt

上传人:微传9988 文档编号:2601441 上传时间:2018-09-23 格式:PPT 页数:330 大小:1.01MB
下载 相关 举报
软件工程导论(第五版)ppt课件.ppt_第1页
第1页 / 共330页
软件工程导论(第五版)ppt课件.ppt_第2页
第2页 / 共330页
软件工程导论(第五版)ppt课件.ppt_第3页
第3页 / 共330页
软件工程导论(第五版)ppt课件.ppt_第4页
第4页 / 共330页
软件工程导论(第五版)ppt课件.ppt_第5页
第5页 / 共330页
点击查看更多>>
资源描述

1、软件开发,( Software Engineering ),信息学院 严诚,1 软件工程概述,1.1 软件危机60年代中期以前:通用硬件相当普遍,软件却是为某个具体的应用而编写的。60年代中到70年代中:软件作坊。,软件危机:计算机软件的开发和维护过程中所遇到的一系列严重问题。(正常、不正常运行软件都具有这种问题),1.1.1软件危机的定义,1)对软件开发成本和进度的估计常常很不准确; 2)用户对完成的软件系统不满意的现象经常发生; 3)软件产品的质量往往靠不住;,软件危机的典型表现:,4)软件常常是不可维护的; 5)软件通常没有适当的文档资料; 6)软件成本在计算机系统总成本中所占的比例逐年

2、上升; 7)软件开发生产率提高的速度跟不上计算机应用的发展趋势。,1.1.2 产生软件危机的原因,1)软件本身特点造成; 2)软件开发与维护的方法不正确。,主要表现:(a)忽视软件需求分析;(b)认为软件开发就是写程序并使之运行;(c)轻视软件维护;,在软件开发的不同阶段进行修改需要付出的代价很不相同:,1)推广使用在实践中总结出来的开发软件的成功技术和方法,并研究探索更有效的技术和方法; 2)开发和使用更好的软件工具; 3)良好的组织管理措施。,1.1.3 解决软件危机的途径,为了解决软件危机产生的问题,软件工程与方法学逐渐形成,然后出现了两个相互相承又各有侧重的学科:1)软件工程学:主要应

3、用工程的方法和技术研究软件开发与维护的方法、工具和管理的一门交叉学科。2)程序设计方法学:主要应用数学的方法研究程序的性质以及程序设计的理论和方法的学科。,1.2 软件工程,1.2.1 软件工程的介绍,1968年NATO会议:软件工程就是为了经济地获得可靠的且能在实际机器上有效地运行的软件,而建立和使用完善的工程原理。,1993年IEEE:软件工程是(1)把系统的、规范的、可度量的途径应用于软件开发、运行和维护过程;(2)研究(1)中提到的途径。,1. 软件工程关注于大型程序的构造;2. 软件工程的中心课题是控制复杂性;3. 软件经常变化;4. 开发软件的效率非常重要;5. 和谐地合作是软件开

4、发的关键;6. 软件必须有效地支持它的用户;7. 在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人创造产品。,软件工程的本质特性:,1.2.2 软件工程的基本原理,1. 用分阶段的生命周期计划严格管理; 2. 坚持进行阶段评审; 3. 实行严格的产品控制; 4. 采用现代程序设计技术; 5. 结果能清楚地审查; 6. 开发小组的人员应该少而精; 7. 承认不断改进软件工程实践的必要性。,1.2.3 软件工程方法学通常把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学(Methodology),也称为范型(Paradigm)。软件工程方法学的3要素:方法、工具和过程,1

5、. 传统方法学也称为生命周期方法学或结构化范型。结构化方法(Structure Method)有:1)结构化设计方法(SD);2)结构化分析方法(SA); 3)结构化分析与设计技术(SADT)4)JACKSON方法5)WARNIER方法,2. 面向对象方法学把数据和对数据的操作紧密结合起来的方法,模拟人类认识世界解决问题的方法和过程。面向对象的方法=对象(属性与服务的封装)+分类+继承+通过消息的通讯,1)适用于实时事物处理系统的有限状态机方法(FSM); 2)适用于并发软件系统的PETRI网方法; 3)以数学概念和理论为基础的形式化方法,如SDC公司的形式化开发方法FDM:(Formal D

6、evelopment Methodology)IBM公司的维也纳开发方法VDM:(Vienna Development Method ),3. 其他开发方法,1.3 软件生命周期,软件生命周期: 指软件从提出到最终被淘汰的这个存在期。,软件生命周期组成:1)软件定义;A.问题定义 B.可行性研究 C.需求分析2)软件开发;D.总体设计 E.详细设计F.编码和单元测试 G.综合测试3)运行维护。,1.问题定义;2.可行性研究;3.需求分析;4.总体设计(概要设计);5.详细设计;6.编码与单元测试;7.综合测试;8.维护。,软件生命周期各个阶段:,1.4 软件过程,软件过程:为了获得高质量软件所

7、需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。 软件过程(ISO9000):使用资源将输入转化为输出的活动所构成的系统。 输入:如软件需求 输出:如软件产品,1.4.1 瀑布模型,1. 阶段间具有顺序性和依赖性 2. 推迟实现的观点 3. 质量保证的观点,优点:采用规范的方法;严格规定每个阶段提交的文档;要求每个阶段交出的产品必须经过验证。,1.4.2 快速原型模型 优点:不带反馈环,基本上是线性顺序进行。,1.4.3 增量模型,优点:能较短时间内提交可完成部分工作的产品;可以使用户有充裕的时间学习和适应新产品。,一种风险更大的增量模型:,1.4.4 螺旋模型可把它看作在每个阶段

8、之前都增加风险分析的快速原型模型。,1.4.5 喷泉模型,典型的面向对象软件开发过程模型之一。,1.4.6 Rational 统一过程,1. RUP软件开发经验 (1)迭代式开发 (2)管理需求 (3)使用基于构件的体系结构 (4)可视化建模 (5)贯穿于开发过程的软件质量验证 (6)控制软件变更,1.4.7 敏捷过程与极限编程,1.敏捷过程具有高效、快速响应变化的开发过程。 (1)个体和交互胜过过程和工具; (2)可以工作的软件胜过面面俱到的文档; (3)客户合作胜过合同谈判; (4)响应变化胜过遵循计划。 2.极限编程敏捷过程中最著名的一种,指把好的开发实践运用到极致,多应用于软件需求模糊

9、的场合。,1.4.8 微软过程,1.微软过程准则 2.微软软件生命周期 (1)规划阶段 (2)设计阶段 (3)开发阶段 (4)稳定阶段 (5)发布阶段 3.微软过程模型,问题定义就是要确定为用户建立什么样的软件系统,软件叫什么样的名称等等。“问题”是指软件最基本的问题,如:软件的总体目标什么?有什么用途?为那些用户设计?,1.5 问题定义阶段,问题定义报告的内容包括:1)软件项目标题;2)软件目标;3)软件用户对象;4)软件规模。,问题定义是软件生命周期中时间最短的阶段,一般都比较简单,因此在实际开发中它是最容易被忽视的一个阶段。这一阶段工作主要由系统分析员来完成,系统分析员要尽可能从较高的角

10、度概括软件所要做的工作,而不用写明问题的实现细节。,2 可行性研究,可行性研究就是要回答“所定义的问题有可行的解决办法吗?”。可行性研究的目的是:用最小的代价在尽可能短的时间内确定问题是否有解,以及是否值得去解。,2.1 可行性研究的任务,可行性研究所需的时间取决于工程的规模,所需要的成本要占工程总成本的5%10%。,可行性研究的内容: 1)技术可行性 技术可行性要分析各种技术因素,例如:使用现有的技术能否实现这个系统?是否有胜任开发该项目的熟练技术人员?能否按期得到开发该项目所需的软件、硬件资源?,2)经济可行性对经济合理性进行评价,所要考虑的问题是:这个系统的经济效益能否超过它的开发成本?

11、这就需要对项目进行价格/利益分析,即“投入/产出”分析。由于利益分析取决于软件系统的特点,因此在软件开发之前,很难对新系统产生的效益作出精确的定量描述,所以往往采用一些估算方法。,3)操作可行性操作可行性评价系统运行后会引起的各方面变化,如:对组织机构管理模式、用户工作环境等产生的影响。,4)社会可行性社会可行性主要讨论法律方面和使用方面的可行性。例如,被开发软件的权利归属问题、软件所使用的技术是否会造成侵权等问题。,2.2 可行性研究的步骤,1)复查系统规模和目标; 2)研究目前正在使用的系统; 3)导出新系统的高层逻辑模型(数据流图、数据字典); 4)重新定义问题;,5)导出和评价供选择的

12、解法(物理解决方案); 6)推荐行动方案; 7)草拟开发计划; 8)书写文档提交审查。,2.2 可行性研究的步骤,2.3 系统流程图 (描绘物理系统的工具),2.3.1 符号,2.3.2 例子,2.4 数据流图(描绘数据在系统中流动的逻辑过程),2.4.1 符号,2.4.2 绘制数据流图的例子,2.4.2 绘制数据流图的例子,仓库 管理员,采购员,定货系统,事务,定货报表,图2.5 定货系统的基本系统模型,1)利用它作为交流信息的工具; 2)作为软件分析和设计的工具。,2.4.3 数据流图的用途,2.4.3 数据流图的用途,数据字典:对数据流图中包含的所有元素的定义的集合;可行性研究阶段,数据

13、流图与数据字典共同构成系统的逻辑模型。,2.5 数据字典,2.5.1 数据字典的内容 数据字典应该对下列元素进行定义:1)数据流;2)数据元素(数据流分量);3)数据存储;4)处理。,1)数据元素字典定义 其定义的基本内容有:A数据元素编号、名称及其含义;B数据类型和长度;C合理取值;D其他内容,如它与其它数据的逻辑关系等。,2.5.2 定义数据的方法,数据元素字典定义实例:,2)数据流字典定义 其定义的基本内容有:A数据流编号及名称;B数据流来源;C数据流去处;D数据流的组成; E流通量;F峰值。,数据流字典定义实例:,3)数据存储字典定义 其定义的基本内容有:A数据存储编号及名称;B数据存

14、储的组成;C其它要求。,4)数据处理字典定义 其定义的基本内容有:A数据处理编号及名称;B简单描述;C输入/输出;D功能描述;E有关数据存储。,数据处理字典定义实例:,5)组成数据项的表示方法= 表示“等价于”或“定义为”+ 表示“与” 与 | 表示“或” 表示重复( ) 表示可选项通讯录=通讯地址通讯地址=姓名+邮编+省|直辖市|自治区+市|县+街道+门牌号+(电话),1. 作为分析阶段的重要工具; 2. 数据元素的控制信息非常有用; 3. 有助于开发数据库。,2.5.3 数据字典的用途,实现数据字典:1)程序处理;2)卡片式人工书写;,2.5.4 数据字典的实现,小结, 可行性分析报告说明

15、该软件开发项目的实现在技术上、经济上和社会因素上的可行性,评述为了合理地达到开发目标可供选择的各种可能实施方案,说明并论证所选定实施方案的理由。 项目开发计划为软件项目实施方案制订出具体计划,应该包括各部分工作的负责人员、开发的进度、开发经费的预算、所需的硬件及软件资源等。,3 需求分析,3.1.1 确定对系统的综合要求1功能需求2性能需求如:相应时间(速度)、主存容量、磁盘容量、安全性、等。,3.1 需求分析的任务,3. 可靠性和可用性需求 4. 出错处理需求系统发现错误时采取的行动,主要在系统关键部分设置。 5. 接口需求用户接口、硬件接口、软件接口、通信接口、等。 6. 约束精度、工具和

16、语言、设计约束、硬件约束、标准,等。 7. 逆向需求 8. 将来可能提出的要求,3.1.3 导出系统的逻辑模型包括完善的数据流图、实体联系图、状态转换图、数据字典、主要的处理算法(IPO图)等。,3.1.2 分析系统的数据要求通过建立数据模型来分析,如数据字典、层次方框图、Warnier图,并将数据结构规范化。,3.1.4 修正系统开发计划修订前期制定的开发进度计划、等。,3.2 与用户沟通获取需求的方法,3.2.1 访谈,正式访谈:系统分析员提出事先准备好的问题。 非正式访谈:提出一些用户可以自由回答的开放性问题,鼓励被访者说出自己的想法。 需要访问大量人员时,利用调查表访问较佳。,3.2.

17、2 面向数据流自顶向下求精,借助数据流图、数据字典、IPO图等,细化、完善详细的数据流图,等到各处理环节对应的功能。,例:,分析销售趋势,统计功能,3.2.3 简易的应用规格说明技术,面向团队的需求收集法: (用户与开发者配合) 1)初步访谈; 2)开发者和用户分别写出“产品需求”; 3)开会讨论,各自展示需求列表; 4)得出一致意见,为需求列表制定小型规格说明; 5)根据会议成果,起草完整的软件需求规格说明。,3.2.4 快速建立软件原型,快速建立能演示目标系统主要功能的程序。 (1)第四代技术 (2)可重用的软件构件 (3)形式化规格说明和原型环境,3.3 分析建模与规格说明,3.3.1

18、分析建模为了开发复杂的系统,应从不同角度(模型)抽象出目标系统的特性(数据模型、功能模型、行为模型)。 1)实体联系图:建立数据模型,描述数据对象及数据对象之间的关系; 2)数据流图:建立功能模型的基础; 3)状态转换图:描绘系统的状态和状态间转换的方式。,3.3.2 软件需求规格说明,3.4 实体联系图,数据对象可以是外部实体、事物、行为、事件、角色、单位、地点、结构等。,3.4.1 数据对象,3.4.2 属性属性定义了数据对象的性质。,属性,3.4.3 联系 (1)一对一联系(1:1) (2)一对多联系(1:N) (3)多对多联系(M:N)在ER图中,用菱形框表示联系。,联系,例子:,Wa

19、rnier图也用树形结构描绘信息,但是这种图形工具比层次方框图提供了更丰富的描绘手段。,Warnier图,IPO图是输入/处理/输出图。,IPO图,用于需求分析的软件应该满足下列要求:1)必须有形式化的语法2)使用这个软件工具能够导出详细的文档3)必须提供分析规格说明书的不一致性和冗余性的手段4)使用这个软件工具后,应该能够改进通信状况,3.5 用于需求分析的软件工具,小结, 软件需求说明书(软件规格说明书)对所开发软件的功能、性能、用户界面及运行环境等作出详细的说明。它是在用户与开发人员双方对软件需求取得共同理解并达成协议的条件下编写的,也是实施开发工作的基础。该说明书应给出数据逻辑和数据采

20、集的各项要求,为生成和维护系统数据文件做好准备。,4 总体设计,4.1 设计过程,1.设想供选择的方案,2.选择合理的方案对每个合理的方案要提供:A系统流程图B组成系统的物理元素清单C成本/效益分析D实现这个系统的进度计划,3.推荐最佳方案 4.功能分解 5.设计软件结构 6.数据库设计A模式设计B子模式设计C完整性和安全性设计D优化,7.制定测试计划 8.书写文档A系统说明B用户手册C测试计划D详细的实现计划E数据库设计结果 9.审查和复审,4.2 设计原理,如果一个大型程序仅由一个模块组成,很难被人理解。设函数C(x)定义问题x的复杂程度,函数E(x)定义解决问题x需要的工作量(时间)。对

21、于两个问题P1和P2,如果:C(P1)C(P2)那么 E(P1)E(P2)根据解决问题的经验,有一个规律是:C(P1+P2)C(P1)+C(P2)于是有 E(P1+P2)E(P1)+E(P2),4.2.1 模块化,4.2.2 抽象,4.2.3 逐步求精,模块的独立性很重要,因为:1)有效的模块化的软件比较容易开发出来;2)独立的模块比较容易测试和维护。,4.2.4 信息隐蔽和局部化,4.2.5 模块独立,一、耦合,耦合:指软件结构内不同模块彼此之间相互依赖(连接)的紧密程度。,模块独立程度可以由两个定性标准度量:耦合与内聚。,模块的偶合分四类: 1)数据耦合两个模块之间只是通过参数交换信息,而

22、且交换的信息仅仅是数据。数据耦合是最低程度的耦合。,2)控制耦合两个模块之间所交换的信息包含控制信息。控制耦合是中等程度的耦合。,图中模块A的内部处理程序判断是执行C还是执行D,要取决于模块B传来的信息状态(Status)。,3)公用耦合两个或多个模块通过一个公共区相互作用时的耦合。公共区可以是:全程数据区、共享通信区、内存公共覆盖区、任何介质上的文件、物理设备等。软件结构中存在大量的公用耦合时会给诊断错误带来困难。,图中存在公用耦合,假设模块A、C、E都存取全程数据区(如公用一个磁盘文件)中的一个数据项。如果A模块读取该项数据,然后调用C模块对该项重新计算,并进行数据更新。,如果此时C模块错

23、误地更新了该项数据,在往下的处理中模块E读该数据项时出现错误。表面上看,问题由模块E产生,实际上由模块C引起。,4)内容耦合一个模块与另一个模块的内容直接发生联系。内容耦合对维护会带来严重的困难。,程序中如果一个模块直接把程序转移到另一个模块中,或一个模块使用另一个模块内部的数据,都会产生内容耦合。内容耦合是最高程度的耦合,应该避免采用。,软件设计应追求尽可能松散耦合,避免强耦合,这样模块间的联系就越小,模块的独立性就越强,对模块的测试、维护就越容易。因此建议:尽量使用数据耦合,少用控制耦合,限制公用耦合,完全不用内容偶合。,二、内聚,内聚:一个模块内部各个元素彼此结合的紧密程度。它是衡量一个

24、模块内部组成部分间整体统一性的度量。常见的内聚有七类。,1)功能内聚(Functional Cohesion)如果一个模块内所有处理元素完成一个,而且仅完成一个功能,则称为功能内聚。功能内聚是最高程度的内聚。但在软件结构中,并不是每个模块都能设计成一个功能内聚模块。,2)顺序内聚(Sequential Cohesion)如果一个模块内处理元素和同一个功能密切相关,而且这些处理元素必须顺序执行,则称为顺序内聚。,如图,一个求一元二次方程根的模块由三个处理元素组成,该模块中存在顺序内聚。通常,顺序内聚中一个处理元素的输出是另一个处理元素的输入。,3)通信内聚(Communicational Coh

25、esion)如果一个模块中所有处理元素都使用同一个输入数据和(或)产生同一个输出数据,称为通信内聚。,如图,模块A的处理单元将根据同一个数据文件FILE的数据产生不同的表格,因此它存在通信内聚。通信内聚有时也称为数据内聚。,4)过程内聚(Procedural Cohesion)如果一个模块内的处理元素是相关的,而且必须以特定的次序执行,称为过程内聚。过程内聚与顺序内聚的区别是:顺序内聚中是数据流从一个处理单元流到另一个处理单元,而过程内聚是控制流从一个动作流向另一个动作。,5)时间内聚(Temporal Cohesion)如果一个模块包含的任务必须在同一段时间内执行,称为时间内聚。也称为瞬时内

26、聚。,例如,完成各种初始化工作的模块,或者处理故障的模块都存在时间内聚。如图,在“紧急故障处理模块”中,“关闭文件”、“报警”、“保留现场”等任务都必须无中断地同时处理。,6)逻辑内聚(Logical Cohesion)如果模块完成的任务在逻辑上属于相同或相似的一类,称为逻辑内聚。,如图,A、B、C模块合并成ABC模块之后,ABC模块就是逻辑内聚模块。,对逻辑内聚模块的调用,常常需要有一个功能开关,由上层调用模块向它发出一个控制信号,在多个关联性功能中选择执行某一个功能。这种内聚较差,增加了模块之间的联系,不易修改。,7)偶然内聚(Coincidental Cohesion)如果一个模块由完成

27、若干毫无关系的功能处理元素偶然组合在一起的,就叫偶然内聚。,偶然内聚是最差的一种内聚。常犯这种错误的一种情况是:有时在写完程序后,发现一组语句在多处出现,于是为了节省空间而将这些语句作为一个模块设计,就出现偶然内聚。,如图,模块A、B、C出现公共代码段W,于是将W独立成一个模块,而W中这些语句并没有任何联系。如果在测试中发现模块A不需要做“X=Y+Z”,而应该做“X=Y*Z”,此时对W的维护就很困难了。,软件设计中应该:力求做到高内聚,尽量少用中内聚,不用低内聚。,4.3 图形工具 4.3.1 层次图和HIPO图,HIPO图是:“层次图输入/处理/输出图”,4.3.2 结构图,4.4 面向数据

28、流的设计方法,面向数据流设计(Data Flow-Oriented Design,DFOD)是与数据流分析(DFA)对应的结构化软件设计技术。面向数据流的设计将得到以数据流图为基础的软件模块结构图。,数据流可以分为两种类型:1)变换型数据流2)事务型数据流,4.4.1 变换流与事务流,一、变换流具有较明确的输入、变换(或称主加工)和输出界面的数据流图称为变换型数据流图。如图所示,该变换中心可以理解为数据的加工和处理程序。,事务型数据流图中存在一个事务中心(也就是数据处理、加工中心),它将输入分离成若干个发散的数据流,形成许多活动路径,并根据输入值选择其中一条路径。,二、事务流,通常,一个实际系

29、统的数据流图是变换型和事务型两种类型的混合体。如图所示,中间的子块属事务型数据流,如果把中间子块视为一个处理整体的话,整个程序属变换型程序。,面向数据流设计软件结构的基本步骤有七步:1)复审并精化数据流图;2)确定数据处理流图的类型;3)确定变换中心或事务中心;,4.4.2 面向数据流设计的步骤,4)将数据流图映射成软件模块结构图,设计出该数据流图对应的第一层模块结构; 5)基于数据流图逐步分解,设计下层模块; 6)运用模块设计和优化准则优化软件结构; 7)描述模块的接口。,变换设计就是从变换型数据流图映射出软件模块结构的过程,也称以变换为中心的设计。,4.4.3 变换设计,变换设计的基本方法

30、有两步: 1)分解第一层模块结构就是把整个变换分解成输入控制模块Ci、输出控制模块Co和变换中心控制模块Ct,由主控模块控制。,2)分别设计输入、输出和处理的下层模块结构方法是:从变换中心边界向两侧移动,分别把输入通路和输出通路的每个处理映射成输入控制模块Ci和输出控制模块Co的下属模块。变换中心的下层模块,是把每个处理映射成变换中心控制模块Ct的一个直接下属模块。,事务设计就是从事务型数据流图映射出软件模块结构的过程,也称为以事务为中心的设计。,4.4.4 事务设计,事务设计的基本方法有两步:1)建立主控模块、接收输入类型分析模块和事务调度模块;,2)分别设计输入类型分析模块和调度模块的下层

31、模块结构。方法是:将输出的每条通路作为调度模块的一个判断分支,而输入类型分析模块的下层模块与变换设计类似。,小结, 概要设计说明书该说明书是概要实际阶段的工作成果,它应说明功能分配、模块划分、程序的总体结构、输入输出以及接口设计、运行设计、数据结构设计和出错处理设计等,为详细设计提供基础。,5 详细设计,目标:确定如何具体实现所要求的系统。不是具体编写程序,而是设计程序的“蓝图”。详细设计的结果决定最终程序代码的质量。,E.W.Dijkstra 最早提出结构程序设计:程序质量与程序中包含的Goto语句的数量成反比(1965)。1966 ,Bohm, Jacopini ,证明了只用“顺序”、“选

32、择”、“循环”控制结构就能实现任何单入口单出口程序。,5.1 结构程序设计,理论上,最基本的控制结构只有两种:顺序、循环结构(选择结构可由其两者构造)。学界认识到,不是简单去掉Goto语句的问题,而是要创立一种新的程序设计方法。结构化程序设计(IBM率先成功运用)。,结构程序设计:一种设计程序的技术,它采用自顶向下逐步求精的设计方法和单入口单出口的控制结构。,使用结构程序设计技术的好处: 1)提高软件开发工程的成功率和生产率; 2)系统有清晰的层次结构,容易阅读理解; 3)单入口单出口的控制结构,容易诊断纠正; 4)模块化可以使得软件可以重用; 5)程序逻辑结构清晰,有利于程序正确性证明。,经

33、典的结构程序设计:只允许使用顺序、IF_THEN_ELSE选择和DO_WHILE循环;,扩展的结构程序设计:除了三种基本控制结构,还使用DO_CASE和DO_UNTIL循环;,修正的结构程序设计:除了三种基本控制结构和两种扩充结构,还使用BREAK等结构。,流程图通常由三种结点组成: 1)函数结点如果一个结点有一个入口线和一个出口线,则称为函数结点。,由于函数结点一般对应于赋值语句,所以 F 也表示了这一个结点对应的函数关系。,5.1.1 结构化程序 5.1.1.1 控制结构,2)谓词结点如果一个结点有一个入口线和两个出口线,而且它不改变程序的数据项的值,则称为谓词结点。,P是一个谓词,根据P

34、的逻辑值(T或F),结点有不同的出口。,1)顺序结构:相当于“A、B”,2. 三种基本控制结构,2)选择结构相当于“If exp then A else B endif ”,3)循环结构:相当于“While exp do A”,1)多分支结构相当于“Case I of I=1:C1; I=2:C2; I=3:C3; ; I=n:Cn”,3. 扩充两种控制结构,2)UNTIL循环结构相当于“Repeat A Until exp”,5.1.1.2 正规程序定义1:一个流程图程序如果满足下面两个条件,称为正规程序:1)具有一个入口线和一个出口线;2)对每一个结点,都有一条从入口线到出口线的通路通过该

35、结点。,由于正规程序有一个入口线和一个出口线,因而一个正规程序总可以抽象为一个函数结点。,定义2:如果一个正规程序的某个部分仍然是正规程序,那么称它为该正规程序的正规子程序。,先给出一个概念:封闭结构 定义3:流程图中,两个结点之间所有没有重复结点的通路组成的结构称为封闭结构。,5.1.1.3 基本程序,如图:封闭结构为 a - b1 - b2 - b3 ; c1 - c2 ; d1 - d2 - d3 ; e - f ,1)不包括多于一个结点的正规子程序,即它是一种不可再分解的正规程序;(程序自身不可视为正规子程序)2)如果存在封闭结构,封闭结构都是正规程序。,5.1.1.3 基本程序,定义

36、4:一个正规程序,如果满足以下两个条件,则称之为基本程序:,基本程序形式有多种,前面提到的三种基本控制结构(顺序结构、选择结构、循环结构)和两个扩充控制结构(多分支结构、UNTIL循环结构)都是基本程序。,由于复合程序是由一些基本程序组成,因此,无论从总体上看或是从每个组成部分看,都满足“一个入口,一个出口”的原则,这样的程序就是通常说的好结构程序,或者结构化程序。,定义:由基本程序的一个固定的基集合构造出的复合程序,称为结构化程序。,结构化定理:任一正规程序都可以函数等价于一个由基集合顺序,If-else-then,While-do产生的结构化程序。实际上,只要能证明可以将任一正规程序转换成

37、等价的结构化程序就可以证明这个结构化定理。,5.1.2 结构化定理,5.2 人机界面设计,5.2.1 设计问题1. 系统响应时间;2. 用户帮助;3. 出错信息处理;4. 命令交互,5.2.2 设计过程5.2.3 人机界面设计指南1. 一般交互指南;2. 信息显示指南;3. 数据输入指南。,5.3 过程设计的工具,5.3.1 程序流程图,程序流程图:是一种描述程序的控制结构流程和指令执行情况的有向图。历史悠久、使用广泛、直观描绘控制流程、便于初学者掌握。,ASP检索程序流程图:,2)程序流程图中用箭头代表控制流,因此程序员不受任何约束,可以完全不顾结构程序设计的精神,随意转移控制。 3)程序流

38、程图不易表示数据结构。,程序流程图的缺点: 1)程序流程图本质上不是逐步求精的好工具,它诱使程序员过早地考虑程序的控制流程,而不去考虑程序的全局结构。,小结, 详细设计说明书着重描述每一模块是怎样实现的,包括实现算法、逻辑流程等。,6 实现,编码和测试统称为实现。 编码:把软件设计结果翻译成程序。 测试:检测程序并改正错误的过程。,计算机程序设计语言基本上可以分为两大类:1. 汇编语言;2. 高级语言。,6.1 编码,6.1.1 选择程序设计语言,从应用特点看,高级语言可分为: 1)基础语言如BASIC、FORTRAN、COBOL、ALGOL等 2)结构化语言如ALGOL、PL/1、PASCA

39、L、C、ADA等3)专用语言如APL、BLISS、FORTH、LISP、PROLOG等,选择一种编程语言的理论标准: 1)有理想的模块化机制; 2)可读性好的控制结构和数据结构; 3)便于调试和提高软件可靠性; 4)编译程序发现程序错误的能力强; 5)有良好的独立编译机制。,选择语言时除了考虑理论上的标准,还必须同时考虑主要的实用标准:,(1)系统用户要求 (2)可以使用的编译程序 (3)可以得到的软件工具 (4)工程规模 (5)程序员知识 (6)软件可移植性要求 (7)软件的应用领域,1.程序内部的文档选取含义鲜明的名字,如果使用缩写,缩写规则要一致,并给每个名字加注释;通常在每个模块开始处

40、要有一段注释,描述模块功能、算法、接口特点等;程序清单布局应利用适当的阶梯形式,使程序的层次结构清晰明显。,6.1.2 写程序的风格,2.数据说明数据说明的次序应该标准化,如按数据类型确定说明的次序;多个变量名在一个语句中说明时,应该按字母顺序排列这些变量;如果设计时使用了复杂的数据结构,应该用注释说明实现该数据结构的方法和特点。,3.语句构造4.输入/输出5.效率A程序运行时间B存储器效率C输入/输出效率,程序设计工具实例:Visual C,运用Visual C+ 开发工具需要掌握:C语言特点、语法;Windows编程基础;MFC相关知识;Visual C集成开发工具环境的使用;,一、C语言

41、特点、语法:C+语言是在C语言的基础是扩展而成的,两种语言的基本语法和语义是相同。,C+中加入了面向对象程序设计(OOP)的特征:封装性:通过“类”把属性和函数组合在一起。继承性:派生类可从先前定义的基类中继承函数和属性。多态性:一个函数名,由不同的对象解释执行,可得到不同的执行效果。,二、Windows编程基础: API:API是Windows应用程序编程接口。API是一个程序内(或一组相关程序内)的一组函数调用,程序员用它创建其他程序。程序员不必知道函数内部,只要知道API的函数原型及返回值。 API的函数原型及返回值形式可由相关的技术规范资料获得。,现在的Win32 API中,核心部分依

42、靠三个主要组件提供Windows的大部分函数,这三个组件分别是:USER32.DLL;GDI32.DLL;KERNEL32.DLL。,Windows消息机制: 1)基于消息的事件驱动 消息可以是由硬件发来的(存于系统队列),也可以由Windows系统和应用程序发来(存于程序队列中); 每一个Windows程序在不停的捕捉各种消息,并进行处理;每个窗口都必须有一个窗口函数,来负责消息的判断与处理。,2)窗口函数对消息的处理窗口函数是一个回调函数,可以处理收到的消息,在程序中不需要用户显式调用。该窗口函数的形式通常为:WndProc(),每个窗口类必须在初始化时指定一个窗口函数。,三、MFC:MF

43、C,即Microsoft基本类,该类库封装了SDK(软件开发工具包)结构、功能及应用程序框架内部技术。它提供了许多可以重用的类,使得Windows程序员避免了许多重复性工作。,四、Visual C集成开发工具环境1)开发工具的使用;2)掌握Win32程序开发流程 ;一个win32程序由两大块组成:程序代码;用户接口资源。,用户接口资源:菜单,对话框,图标,光标等;这些资源的实际内容(二进制代码)由各种工具产生,并以各种扩展名的文件存在;,资源描述文件(*.rc)中对用户接口资源进行描述;RC编辑器(RC.exe)根据该资源描述文件(*.rc)将所有用户接口资源集中构造一个*.RES文件;*.R

44、ES文件与程序代码结合起来,构成一个Win32程序。,关于函数库和头文件: 动态链接库:应用程序调用的API函数在“执行期间”才链接上的函数库,扩展名可以是.dll,也可以是.exe、 .fon、 .mod、.drv、.ocx等。 静态连接库:.lib 头文件:如windows.h,它包含操作系统本身的三大模块gdi32.dll、user32.dll和kernel32.dll中的所有API函数。,有关测试的一些规则: (1)测试是为了发现程序中的错误而执行程序的过程; (2)好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案; (3)成功的测试是发现了至今为止尚未发现的错误的测试。,6.

45、2.1 软件测试的目标,6.2 软件测试基础,6.2.2 软件测试准则,1)所有测试都应该能追溯到用户需求; 2)应该远在测试前就制定出测试计划; 3)把Pareto原理应用到软件测试中; 4)应该从“小规模”测试开始,并逐步进行“大规模”测试;,5)穷举测试是不可能的;,穷尽测试:包含所有可能情况的测试称为穷尽测试。,6)为了达到最佳测试效果,应该由独立的第三方从事测试工作。,黑盒测试:如果已经知道软件应该具有的功能,可以通过测试来检验是否每个功能都能正常使用,这种测试称黑盒测试。也称功能测试。,6.2.3 测试方法,白盒测试:也称结构测试。如果知道软件内部工作过程,可以通过测试来检验软件内

46、部动作是否按照规格说明书的规定正常进行,这种测试称为白盒测试。,1.模块测试模块测试又称单元测试,它把每个模块作为单独的实体来测试。 2.子系统测试子系统测试是把经过单元测试的模块放在一起形成一个子系统来测试。,6.2.4 软件测试的步骤,3.系统测试系统测试是把经过测试的子系统装配成一个完整的系统来测试。 4.验收测试验收测试把软件系统作为单一的实体进行测试(利用用户的实际数据测试)。 5.平行运行平行运行是同时运行新开发出来的系统和将被它取代的旧系统,以便比较新旧两个系统的处理结果。,6.2.5 测试阶段的信息流,6.3 单元测试,单元测试的一般方法是:首先通过编译系统检查并改正程序中所有

47、的语法错误;然后用详细设计模块说明为指南,对重要的控制路径进行测试,以便发现模块内部的错误。通常,单元测试使用白盒测试方法。,1)模块接口应该对穿过模块接口的数据流进行检测,以保证正确的输入和输出。 2)局部数据结构这是错误的主要来源,应该设计相应的测试用例,以便发现数据结构方面的错误。,6.3.1 测试重点,3)重要的执行路径由于不可能进行穷尽测试,因此选择测试路径是非常关键的。 4)出错处理通路 5)边界条件,审查小组:1)组长;2)程序的设计者;3)程序的编写者;4)程序的测试者。,6.3.2 代码审查,6.3.3 计算机测试由于软件模块不是一个独立的系统,不能独立运行,要依靠其他模块调

48、用,或需要调用其他模块。因此,必须要为测试的单元开发驱动程序或存根程序。,1)驱动程序相当于一个“主程序”,用来把测试数据传送给被测试的模块,并打印有关结果。 2)存根程序用来代替被测试模块所调用的模块,相当于“虚拟子程序”。,如,测试B模块,设计了A模块和C模块。由A负责传送测试数据,由C负责模拟被B调用的模块。C模块可能没有,这取决于B有没有调用其他程序。A、C都是一次性程序,只在测试时临时使用,应尽量设计得简单一些,以节省费用和时间。,例:,对“编辑”功能的测试:,6.4 集成测试,集成测试是组装软件的系统化技术,它将经过单元测试的模块联系在一起进行测试。由模块组装成程序时有两种方法:1

49、)非渐增式测试方法先分别测试每个模块,再把所有模块按设计要求放在一起结合成所要的程序。,2)渐增式测试方法每次增加一个待测试模块,把它同已经测试好的那些模块结合起来进行测试,反复进行直到完成所有模块测试的方法。,使用渐增式测试方法把模块结合到软件系统中去时,有自顶向下和自底向上两种集成方法。,自顶向下集成是一种递增的装配软件结构的方法,这种方法应用非常广泛。它需要存根程序,但是不需要驱动程序。,7.4.1 自顶向下集成,这种方法的思想是:从主控模块(主程序)开始,沿软件的控制层次向下移动,逐渐把各个模块结合起来。 在自顶向下结合方法中,如何将所有模块组装到软件结构中,又有两种方法:,1)深度优先策略先组装软件结构的一条主控制通路上的所有模块,选择哪条主控制通路,具有较大的任意性。如图,如果选取左通路,就先把模块M1、M2、M5结合起来测试,然后结合模块M8、M6,再构造中央和右侧的控制通路。,2)宽度优先策略沿着软件结构水平地移动,把处于同一个层次的所有模块组装起来。如图,首先结合M2、M3、M4和主控模块M1,然后结合下一个控制层次中的模块M5、M6和M7,最后结合模块M8。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 中等教育 > 小学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报