1、软件工程,授课教师:曹义亲电子信箱:,软件工程概论,软件的基本知识软件危机 软件工程 软件生存周期软件工程项目,软 件,什么是软件软件是计算机系统中与硬件相互依存的另一部分,它是包括程序,数据及其相关文档的完整集合 程序是按事先设计的功能和性能要求执行的指令序列 数据是使程序能正常操纵信息的数据结构 文档是与程序开发,维护和使用有关的图文材料,软件的特点,软件是一种逻辑实体,而不是具体的物理实体。因而它具有抽象性 软件的生产与硬件不同,在它的开发过程中没有明显的制造过程 在软件的运行和使用期间,没有硬件那样的机械磨损,老化问题,软件的开发和运行常受到计算机系统的限制,对计算机系统有着不同程度的
2、依赖性 软件的开发至今尚未完全摆脱手工艺的开发方式 软件本身是复杂的 实际问题的复杂性 程序逻辑结构的复杂性 软件成本相当昂贵 相当多的软件工作涉及到社会因素,软件的分类,按软件的功能进行划分 系统软件 操作系统 数据库管理系统 设备驱动程序 通信处理程序等,支撑软件 文本编辑程序 文件格式化程序 磁盘向磁带做数据传输的程序 程序库系统 支持需求分析、设计、实现、测试和支持管理的软件,应用软件 商业数据处理软件 工程与科学计算软件 计算机辅助设计制造软件 系统仿真软件 智能产品嵌入软件 医疗、制药软件 事务管理、办公自动化软件 计算机辅助教学软件,按软件规模进行划分类别 参加人员数 研制期限
3、源程序行数 微型 1 14周 0.5k 小型 1 16月 1k2k 中型 25 12年 5k50k 大型 520 23年 50k100k 甚大型 1001000 45年 1M(=1000k) 极大型 20005000 510年 1M10M,按软件工作方式划分实时处理软件分时软件交互式软件批处理软件,按软件服务对象的范围划分项目软件产品软件,按使用的频度进行划分一次使用频繁使用,按软件失效的影响进行划分高可靠性软件一般可靠性软件,软件发展阶段,程序设计阶段 50至60年代 程序系统阶段 60至70年代 软件工程阶段 70年代以后,软件危机,软件工作的内容,如何开发软件如何维护软件,软件工作中的问
4、题分析,问题一:对软件的开发成本和进度估计偏差较大原 因: 软件是逻辑实体而不是物理实体,问题2:用户对软件系统不满意的现象较多原因1: 开发人员与用户之间的信息交流不充分 原因2: 软件的生产没有明显的制造过程,问题3:软件产品质量可靠性不高原因1: 软件质量可靠性定量标准难以实现 原因2:软件质量保证技术出现较晚,并没有坚持到开发全过程 原因3: 软件没有机械磨损,备份件不存在,问题4:软件的可维护性较差原因1: 现有软件的文档资料不完整 原因2: 软件的个体开发方法 原因3: 软件开发无法完全摆脱手工方式,问题5:软件成本急剧上升原 因: 软件本身是复杂的实际问题的复杂性程序逻辑结构的复
5、杂性 过多地涉及到人的因素,软件危机的定义,软件危机是指 软件开发和软件维护过程中遇到的一系列严重问题。,软件工程,软件工程的定义,Boehm:运用现代科学技术知识来设计并构造计算机程序及为开发、运行和维护这些程序所必需的相关文件资料 IEEE:软件工程是开发、运行、维护和修复软件的系统方法 Fritz Bauer:建立并使用完善的工程化原则,以较经济的手段获得能在实际机器上有效运行的可靠软件的一系列方法,采用工程的概念、原理、技术和方法来开发和维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,就是软件工程。,软件工程的核心,生存周期学结构分析和结构设计技术,
6、软件工程的主要内容,生存周期各种结构分析及结构设计技术软件工程三要素方法 工具 过程,软件工程三要素 方法、工具和过程,软件工程方法为软件开发提供了 “如何做” 的技术 软件工具为软件工程方法提供了自动的或半自动的软件支撑环境,软件工程过程,软件规格说明:规定软件的功能及其运行的限制 软件开发:产生满足规格说明的软件 软件确认:确认软件能够完成客户提出的要求 软件演进:为满足客户的变更要求,软件必须在使用的过程中演进,软件工程过程定义了:方法使用的顺序要求交付的文档资料为保证质量和适应变化所需要的管理软件开发各个阶段完成的里程碑,软件工程过程的特性,易理解性 可见性 可支持性 可接受性,可靠性
7、 健壮性 可维护性 速度,软件工程的基本原理(原则),用分阶段的生命周期计划严格管理; 坚持进行阶段评审; 实行严格的产品控制; 采用现代程序设计技术; 结果应能清楚地审查; 开发小组的人员应该少而精; 承认不断改进软件工程实践的必要性。,软件生存周期,软件有一个孕育、诞生、成长、成熟、衰亡的生存过程。这个过程即为计算机软件的生存周期 软件生存期的八个步骤,即问题定义、可行性分析、需求分析、总体设计、详细设计、程序编码、软件测试、运行维护,制定计划,确定要开发软件系统的总目标 给出功能、性能、可靠性以及接口等方面的要求 完成该软件任务的可行性研究 估计可利用的资源(计算机硬件,软件,人力等)、
8、成本、效益、开发进度 制定出完成开发任务的实施计划,连同可行性研究报告,提交管理部门审查,需求分析,对待开发软件提出的需求进行分析并给出详细的定义 编写软件需求说明书或系统功能说明书及初步的系统用户手册 提交管理机构评审,软件设计,总体设计 把各项需求转换成软件的体系结构。结构中每一组成部分都是意义明确的模块,每个模块都和某些需求相对应 详细设计 对每个模块要完成的工作进行具体的描述,为源程序编写打下基础 编写设计说明书,提交评审。,程序编写,把软件设计转换成计算机可以接受的程序代码,即写成以某一种特定程序设计语言表示的“源程序清单” 写出的程序应当是结构良好、清晰易读的,且与设计相一致的,软
9、件测试,单元测试,查找各模块在功能和结构上存在的问题并加以纠正 组装测试,将已测试过的模块按一定顺序组装起来 按规定的各项需求,逐项进行有效性测试,决定已开发的软件是否合格,能否交付用户使用,运行维护,改正性维护 运行中发现了软件中的错误需要修正 适应性维护 为了适应变化了的软件工作环境,需做适当变更 完善性维护 为了增强软件的功能需做变更,软件生存周期模型,软件生存期模型是跨越整个生存期的系统开发、运作和维护所实施的全部过程、活动和任务的结构框架 瀑布模型 演化模型 螺旋模型 喷泉模型 智能模型,瀑布模型,软件工程项目,软件工程项目的基本目标,付出较低的开发成本 达到要求的软件功能 取得较好的软件性能 开发的软件易于移植 需要较低的维护费用 能按时完成开发工作,及时交付使用,谢谢,