软件工程方法简介.ppt_第1页
软件工程方法简介.ppt_第2页
软件工程方法简介.ppt_第3页
软件工程方法简介.ppt_第4页
软件工程方法简介.ppt_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、软件技术基础,第三章 软件工程方法,3.1软件工程概述,3.1.1 软件工程学的形成与发展 软件工程的提出源于60年代末期出现的“软件危机”,并在较短的时间内发展成为一个完整的学科方向,30多年来,就理论研究和工程实践两个方面作了大量的工作。软件的工程化生产已形成一个独立的产业部门,成为软件产业。软件已成为计算机工业最重要的产品之一。 自从1945年第一台电子数字计算机诞生以来,软件开发方法从机器码编程到软件工程方法,经历了三个阶段: 1程序设计时期(1946年到60年代中) 生产方式为手工生产、个体劳动,凭个人经验; 使用工具:机器语言、汇编、服务性程序; 还没有“软件”的概念。,2软件时期

2、(60年代中至70年代中),“作坊式”生产方式。多人分工、共同协作。 提出“软件”概念,强调软件工程师的作用,强调开发者的通信和协作。 随着计算机应用领域的扩大,软件规模及结构的复杂化,作坊式生产仍然不能满足要求,出现“软件危机”。 软件危机的表现: 软件开发成本和进度估算不准; 用户对软件不满意; 软件质量常被怀疑; 软件维护困难; 缺乏完善的软件文档; 软件生产效率低。,软件危机产生的根本原因: 软件是逻辑部件,具有无形性。应将软件作为一个完整的产品来衡量;发生故障不能用替换法,只能修改原设计;开发进度和质量的管理和控制困难; 软件规模越来越大,功能越来越强,致使软件结构非常复杂。 以美国

3、宇航局的软件系统为例: 1963年 水星计划系统 200万条指令 1967年 双子星座计划系统 400万条指令 1973年 阿波罗计划系统 1000万条指令 1979年 哥伦比亚航天飞机系统 4000万条指令 假设1个人一年生产一万条有效指令,那么是否4000人生产一年,或400人生产10年就能完成任务吗?答案是否定的。一万条指令的复杂度决不仅仅是100条指令复杂度的100倍。 如何解决? 软件开发方法学:管理、控制、复审等方法; 支持软件开发各阶段的技术和工具:标准接口、自动代码向导工具、程序正确性验证器等。,3软件工程时期(70年代至今),1968年、1969年北大西洋公约组织成员国软件工

4、作者研讨会提出了“软件工程”这一术语,根本目的在于克服“软件危机”中遇到的困难,从此软件生产进入软件工程时代。 特点: 硬件已向“四化”(巨型、微型、网络、智能)发展,数据库技术已成熟并广泛应用,第三、四代语言出现。 第一代软件技术结构化程序设计在数值计算领域取得优异成绩; 第二代软件技术软件测试技术、方法、原理用于软件生产过程; 第三代软件技术处理需求定义技术,用于软件需求分析和描述。,3.1.2 软件工程及软件工程学,软件工程的定义: Boehm: 运用现代科学技术知识来设计并构造计算机程序及为开发运行、维护这些程序所必需的相关文件资料。 IEEE: 软件工程是开发、运行、维护和修复软件的

5、系统方法。 软件工程学的内涵:,3.2软件与软件生存周期,3.2.1 软件 软件的定义:软件是程序开发以及开发、使用和维护程序所需要的各种文档,在计算机系统的范畴内,软件是计算机系统中与硬件相互依存的一个部分。通常,软件部分的完整配置应包括以下几主要部分: (1) 应用程序直接面向用户,为解决各种特定问题而编写的程序,如实时控制、工程研究、科学计算、信息管理、人工智能等。 (2) 系统程序为应用程序服务所编制的程序汇总,面向计算机硬件,是应用程序的支撑部分。 (3) 面向用户的文档如何使用和维护应用程序的资料,如用户手册、操作手册以及维护手册等。 (4) 面向开发者的文档记载了应用程序的设计和

6、开发过程,以便进一步开发和修改。如,可行性研究报告,项目开发计划,需求规格说明书、设计说明书、程序设计说明、测试报告等。,软件和硬件的对照,3.2.2 软件生存周期从用户提出要求到废弃不用的过程,一、瀑布模型1976年,B.W.Boehm提出,二、快速原型,三、面向对象生存周期模型,主导思想:在整个软件开发过程中将面向对象技术贯穿于整个生存周期。当然,还要结合传统开发模式中好的、已被无数成功开发活动证明是可行的经验和技术。,3.3 软件的需求分析,3.3.1 需求分析概述 需求分析之前的可行性研究: 技术可行性 经济可行性 操作可行性 需求分析的任务:用户和软件人员进一步理解需求,并将双方的共

7、同理解表达成一致接受的“需求说明书”。 需求说明书的作用: 作为用户和开发者的合同,为双方相互了解提供基础; 作为开发者进行设计和编程的根据; 作为软件开发完成后验收的依据。,需求说明书的内容包括以下部分,概述: 说明开发软件的目的、意义和背景。 需求说明 功能说明:列出各种功能需求的序号、名称和简要说明; 性能说明:说明处理速度、相应时间、精度等。 数据描述 数据流图 数据字典 接口说明 运行环境 硬件设备 支持软件 限制:说明软件开发的成本、进度、设计和实现方面的限制,3.4 软件设计“做什么?”,3.4.1 软件设计概述 一、任务和目标 任务:将分析阶段获得的需求说明转换为计算机中可实现

8、的系统,完成系统的结构设计(数据结构、程序结构),提交软件设计说明书。 目标: 提高可靠性:包括正确性和健壮性; 提高可维护性:可读性、可扩充性、可修改性; 提高可理解性:模块化、界面清晰、规格说明清晰无歧义; 提高效率:时间、空间效率;,二、设计方法和步骤,概要设计 定义系统的逻辑结构,包括:系统的模块划分、建立模块的层次结构、逻辑关系、设计全局DS及DB; 详细设计 根据每个模块的功能描述,设计模块内部的实现算法、模块所需要的局部数据结构。,三、设计文档,设计阶段要交付的文档是设计说明书。它可对编程和测试提供指南服务,还可在系统交付使用后,为维护人员提供帮助。内容包括: 概述 描述设计工作

9、总的范围;系统目标、功能、接口等; 参考文档 现有相关技术参考资料; 系统结构 包括:系统的模块划分、每个模块的功能简介、各个模块之间的逻辑关系; DS及DB设计 用图表把设计结果描述出来; 接口设计 包括:人机界面设计、软、硬件之间的接口设计、本系统与外界以及与支持软件之间的接口关系; 模块设计 根据模块的功能,用相应的工具描述每个模块的流程,以及每个模块用到的数据结构; 测试准备 拟定测试大纲,整体策略等。,3.4.2 软件设计准则,如何度量软件设计的标准,计算机业界对该问题还处于初期认识阶段。 不分模块的程序是无法理解、管理和维护的程序。凡是使用计算机编程的人均自觉不自觉地将程序划分为模

10、块。但有这样一个实际问题,一个系统到底划分为多少个模块好呢?如何度量模块化的程度呢? 经典设计准则 软件结构准则 模块化准则 模块独立性准模块的偶合性 模块的内聚性,举例:汽车仪表盘设计,设计一个“智能”产品汽车数字仪表盘,实现如下功能: 通过模-数转换实现传感器和微处理器的接口; 在发光二级管面板上显示数据; 指示mph(每小时英里数)、行驶里程、每加仑汽油行驶的英里数(mpg)等; 指示加速|减速 超速警告;车速超过55英里/小时,则发出超速警告铃声。,汽车数字仪表系统的数据流程图(DFD),上箭头,输入流,3.5 软件编程,3.5.1 软件编程概述 任务:在总体设计和详细设计之后,为每个

11、模块编写程序; 正确评介和选择编程语言对于完成任务十分重要;,3.5.2 程序设计语言,开发软件系统时必须根据实际情况选择使用的程序设计语言。 程序设计语言分“机器语言”、“汇编语言”和“高级语言”;机器语言和汇编语言的程序执行效率高,但生产效率低;高级语言的程序执行效率不如汇编语言,但编程效率则要高得多,同时还有可读性、可维护性好等优点。 因此,除了在一些特殊应用领域(例如,对程序执行时间、存储空间都有很严格限制的情况;需要产生任意的、甚至非法的指令序列等)之外,其他程序一律使用高级语言编程。 选择语言时,不仅要考虑理论上的标准,还必须同时考虑使用方面的各种限制。,1、BASIC语言,“初学

12、者通用符号指令代码”,具有会话功能,便于人机交互的语言; Microsoft 开发; 2、FORTRAN语言1956年出现 公式翻译语言:利用公式的表达方式和英语语句组合形式编程; 适用于科学和工程计算的程序设计语言; 3、COBOL语言 通用面向商业语言,用于商业、金融业数据处理程序设计 4、PASCAL语言 著名的结构化语言,5、C语言 最优秀的结构化语言 可直接访问物理地址和寄存器,进行系统调用 6、ADA语言 美国防部研制; 用于嵌入式计算设计的语言,类似PASCAL; 7、LISP语言 符号处理语言;用于人工智能领域;定理证明、树的查找等问题; 8、PROLOG语言 用于人工智能、专

13、家系统的语言; 陈述性语言,描述做什么而不是怎么做;,9、SMALLTALK语言 首先实现面向对象的语言; 10、C+ 最受欢迎的面向对象语言; 和C兼容; 11、JAVA 彻底的面向对象开发工具; Internet应用程序开发; 12、C# MS设计,用于和.NET framework协作; 与JAVA非常相似“派生于C和C+的简单、现代、面向对象和类型安全的程序语言”。,语言选择的一般准则,项目的应用领域; 算法和计算复杂性; 软件执行环境; 性能因素; 数据结构复杂性; 软件开发人员的水平。,3.6 软件测试,3.6.1 软件测试概述 一、基本概念 软件测试:为了发现错误而执行程序的过程

14、; 调试: 找出程序中的错误原因、位置并加以纠正; 可靠性: 在给定时间内,软件不发生错误的概率; 二、测试目标和原则 目标: 测试是为了发现软件中的错误而运行软件的过程; 好的测试方案是尽可能地发现至今尚未发现的错误的测试方案; 成功的测试是发现出至今尚未发现的错误的测试。,软件测试基本原则:,不要抱“软件不会有错或查不出错”的幻想; 设计测试用例时,应同时确定输出结果; 设计测试用例时,应包括合理的输入数据和不合理的输入数据; 软件设计者应当避免测试自己的程序; 严格全面地执行测试计划; 测试完成后,应该妥善保存测试计划、测试用例、出错统计和最终分析报告。,三、测试的方式,人工测试 人工对

15、软件进行阅读和检查; 检查软件结构是否合理,功能是否达到设计说明要求;各模块接口是否正确;模块内部控制逻辑是否正确;进行数据结构分析和语法分析; 动态测试 上机测试,用设计好的测试用例执行程序; 自动测试 利用测试工具进行测试; 包括:静态分析工具、动态分析工具和测试评估工具。,3.6.2 软件测试策略,3.7 软件维护,3.7.1 软件维护的概念 一个软件产品投入使用后,通常由于各种理由需要对它作适当的变更,完全不变的情况是很少见的。把软件交付使用后的变更称为维护。 维护是软件生存周期最后一个阶段,由于维护工作的重要性往往被人们忽视,这更增加了维护工作的困难。平均而言,大型软件的维护成本是开

16、发成本的4倍左右。国外许多软件开发组织把60%以上的人力用于维护已投入运行的软件。这个比例随着软件数量增多和使用寿命延长,还在继续上升。学习软件工程学的主要目的之一就是研究如何减少花费在软件维护上的工作量,降低维护成本。,一、软件维护的主要原因,对在运行过程中某些特定条件下暴露出来的程序错误和设计缺陷做修改; 由于软件运行环境变换(硬件增加),需要修改软件以适应新的环境; 为增加软件的功能,提高性能进行修改升级。,二、软件维护的种类,校正性维护:把诊断、校正软件错误的过程称之为校正性维护。这部分维护工作约占全部维护活动的17%21%。 适应性维护:由于计算机技术的飞速发展,外部设备和其他系统元素经常改进和变化,为适应变化的环境而修改软件的活动称之为适应性维护。它占总维护活动的18%25%。 完善性

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论