1、,安博测试空间技术中心http:/ 地址:北京市海淀区学院路40号大唐电信测试空间楼 联系电话:010-62303223 62303260 62303230,软件工程,莆田学院计算机专业教研室,Software Engineering,主讲教师: 邹金安,第一章 软件与软件工程,第一章 软件与软件工程,第一章 软件与软件工程,引 言,软件的概念 软件的分类 软件的发展 软件生存期 软件的危机 软件工程的产生及发展 软件工程的目标和要求,第一章 软件与软件工程,第一节 软件的概念与特点,1、软件,第一节 软件的概念与特点,2、软件特点,第一节 软件的概念与特点,2、软件特点,第一节 软件的概念与
2、特点,第一节 软件的概念与特点,软件的分类,软件的分类,软件的分类,软件的分类,软件的分类,软件的分类,软件的分类,软件的分类,软件的发展,早期 第二阶段 第三阶段 第四阶段 面向批处理 多用户 分布式系统 强大的桌面系统 有限的分布 实时 嵌入“智能” 面向对象技术 自定义软件 数据库 低成本硬件 专家系统软件产品 消费者的影响 人工神经网络并行计算网络计算机,第二节 软件生存期,软件有一个孕育、诞生、成长、成熟、衰亡的生存过程。这个过程即为计算机软件的生存期软件生存期的六个步骤,即制定计划、需求分析、设计、程序编码、测试及运行维护,第二节 软件生存期,第二节 软件生存期,(1) 制订计划确
3、定要开发软件系统的总目标给出功能、性能、可靠性以及接口等方面的要求完成该软件任务的可行性研究估计可利用的资源 (硬件,软件,人力等)、成本、效益、开发进度制定出完成开发任务的实施计划,连同可行性研究报告,提交管理部门审查,第二节 软件生存期,(2) 需求分析和定义 对用户提出的要求进行分析并给出详细的定义 编写软件需求说明书或系统功能说明书及初步的系统用户手册 提交管理机构评审,第二节 软件生存期,(3) 软件设计 概要设计 把各项需求转换成软件的体系结构。结构中每一组成部分都是意义明确的模块,每个模块都和某些需求相对应 详细设计 对每个模块要完成的工作进行具体的描述,为源程序编写打下基础 编
4、写设计说明书,提交评审。,第二节 软件生存期,(4) 程序编写把软件设计转换成计算机可以接受的程序代码,即写成以某一种特定程序设计语言表示的“源程序清单”写出的程序应当是结构良好、清晰易读的,且与设计相一致的,第二节 软件生存期,(5) 测试阶段单元测试,查找各模块在功能和结构上存在的问题并加以纠正组装测试,将已测试过的模块按一定顺序组装起来按规定的各项需求,逐项进行有效性测试,决定已开发的软件是否合格,能否交付用户使用,第二节 软件生存期,(6) 运行/维护改正性维护 运行中发现了软件中的错误需要修正适应性维护 为了适应变化了的软件工作环境,需做适当变更完善性维护 为了增强软件的功能需做变更
5、,第二节 软件生存期,第三节 软件危机,所谓软件危机,就是指在软件开发和软件维护过程中所存在的一系列严重问题。现代计算机应用系统中,软件的地位日益重要和突出。如何满足日益增长的软件需求,如何维护应用中的大量已有软件,已经成为了计算机应用系统进一步发展的瓶颈。,软件危机的表现,软件开发没有真正的计划性,对软件开发进度和软件开发成本的估计常常很不准确,计划的制定带有很大的盲目因素。对于软件需求信息的获取常常不充分,软件产品往往不能真正地满足用户的实际需求。缺乏良好的软件质量评测手段,从而导致软件产品的质量常常得不到保证。,软件危机的表现,对于软件的可理解性、可维护性认识不够;软件的可复用性、可维护
6、性不如人意。 软件开发过程没有实现“规范化”,缺乏必要的文档资料或者文档资料不合格、不准确,难以进行专业维护。 软件开发的人力成本持续上升。 缺乏自动化的软件开发技术,软件开发的生产率依然低下,远远满足不了急剧增长的软件需求。,产生软件危机的原因可以归纳为主、客观两个方面。从客观上来看,软件不同于硬件,它的生产过程和产品都具有明显的“不可视”特征,这就导致在完成编码并且上机运行之前,对于软件开发过程的进展情况较难衡量,软件产品的质量也较难进行先期评价,因此,对于开发软件的过程进行管理和控制比较困难。,产生软件危机的原因,产生软件危机的原因可以归纳为主、客观两个方面。从主观上分析,导致软件危机发
7、生的另一大原因,可以归于在计算机系统发展的早期,软件开发的“个体化”特点,主要表现为忽视软件需求分析的重要性、忽视软件的可理解性、文档不完备、轻视软件的可维护性、过分强调编码技巧等等方面。,解决软件危机的途径,基于软件危机产生的主、客观原因,应从软件工程技术和软件工程管理两方面来采取措施,防范软件危机的发生。从管理层面上考虑,应当注意推广和使用在实践中总结出来的开发软件的成功的技术和方法,并且探索更好的、更有效的技术和方法,注意积累软件开发过程中的经验数据财富,逐步消除在计算机系统早期发展阶段形成的一些错误概念和做法。,解决软件危机的途径,从技术角度考虑,应当开发和使用更好的软件开发工具,提高
8、软件开发效率和开发工作过程的规范化程度。目前广为使用的统一建模语言(UML)、各种配置管理工具、缺陷管理工具和自动测试工具都在软件工程活动中发挥了很好的作用。计算机辅助软件工程(CASE)更是目前备受重视的一个旨在实现软件开发自动化的新的领域。,第四节 软件工程的产生及发展,软件工程不是一门速成的科学,也不是完全可以从书本上学会的,理解与实践是非常重要的. 课堂学习只是涉及软件工程的基本知识,将来需要在更多的实践中真正领会与掌握.Programmer Software Engineer,Se Course additional training and practices,第四节 软件工程的产
9、生及发展,软件工程学的范畴,2、 软件工程学,第四节 软件工程的产生及发展,3、软件的演变(即从传统软件开发到现代软件开发),软件工程三要素,软件工程三要素:方法、工具和过程,软件工程方法为软件开发提供了 “如何做” 的技术 软件工具为软件工程方法提供了自动的或半自动的软件支撑环境 软件工程过程定义了: 方法使用的顺序要求交付的文档资料为保证质量和适应变化所需要的管理软件开发各个阶段完成的里程碑,软件工程项目的基本目标,付出较低的开发成本 达到要求的软件功能 取得较好的软件性能 开发的软件易于移植 需要较低的维护费用 能按时完成开发工作,及时交付使用,第五节 软件生存周期常见模型,瀑布模型 螺旋模型 演化模型 螺旋模型 智能模型,软件生存周期的瀑布模型,图1-3 软件生存周期工作量分配,图1-4 开发期工作量分配,螺旋模型,演化模型,螺旋模型,智能模型,快速开发原型的途径,1、利用个人计算机模拟软件系统的人机界面和人机交互方式; 2、开发一个工作原型,实现软件系统的部分功能,而这部分功能是重要的,也可能是容易产生误解的; 3、找来一个或几个正在运行的类似软件,利用这些软件向客户展示软件需求中的部分或全部功能。,作业: 1、课后习题全部思考解答一遍。 2、完成实验1,