预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共78页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

软件工程与项目管理第1章软件工程概述1.1软件危机1.1.1软件1.软件的定义2.软件的分类2)按软件规模微型软件小型软件中型软件大型软件甚大型软件极大型软件3.软件的特点年份图1-1计算机系统中软硬件成本所占比例的变化1.1.2软件生产的发展程序设计时期(约为20世纪50~60年代)程序系统时期(约为20世纪60~70年代)软件工程时期(20世纪70年代以后)1.1.3软件开发面临的主要问题西方计算机科学家在20世纪60—70年代总结了软件开发和维护过程中遇到的一系列严重问题,表现为以下几方面:对软件开发成本和进度的估计常常不准确,开发成本超出预算,实际进度相比预定计划一再拖延。用户对“已完成”系统不满意的现象时有发生。软件质量常常不可靠,“缺陷”和“补丁”不断。软件的可维护程度非常低。软件通常没有相应的文档资料。软件成本不断提高。软件开发生产率的提高赶不上硬件的发展和人们需求的增长。1.1.4软件危机的提出1968年,北大西洋公约组织的计算机科学家在联邦德国召开国际会议,第一次讨论了“软件危机”问题。“软件危机”是指在计算机软件的开发和维护过程中所遇到的一系列严重问题,这类问题不仅仅是“不能正常运行的软件”才具有的,实际上几乎所有软件都不同程度地存在这类问题。概括来说,软件危机包含两方面的问题:一是如何开发软件,以满足不断增长、日趋复杂的需求;二是如何维护规模不断膨胀的软件产品。这次会议同时提出了解决“软件危机”的途径,即采用工程化的思想来管理软件开发的过程,并正式提出“软件工程”一词,从此一门新兴的工程学科—软件工程—应运而生。1.2软件工程1.2.1软件工程的定义软件工程是导软件开发和维护的一门工程学科。它采用工程的概念、原理、技术和方法,把经过时间检验而证明是正确的管理技术和当前能够得到的最好的技术方法结合起来,用于开发和维护软件。软件工程是一门综合性的交叉学科,它涉及哲学、计算机科学、工程科学、管理科学、数学及应用领域知识。2.软件的分类1.2.2软件工程的内容和目标软件工程的三个要素软件工程方法软件工具软件工程的过程软件工程的目标付出较低的开发成本达到要求的软件功能取得较好的软件性能开发的软件易于移植需要较低的维护费用能按时完成开发工作,及时交付使用1.2.3软件工程的作用(1)从软件企业的专业人才来讲,其作用体现在以下几个方面:高层管理人员利用软件工程的理论和方法来管理整个公司。中层项目经理和软件工程师:利用软件工程的理论和方法,来管理项目组的软件开发。软件蓝领工人利用软件工程的理论和方法来实现软件的开发。软件营销人员利用软件工程的理论和方法与客户进行沟通,以赢得客户的信任。软件实施和维护人员:利用软件工程的理论和方法,来实现软件的功能、性能与接口的实施和维护。软件售前人员利用软件工程的理论和方法,来提高投标成功的把握。(2)从软件项目管理来讲,其作用体现在:在规定的时间内按照规定的成本实现符合预期的质量目标(软件的功能、性能和接口达到需求说明书的要求)的软件。(3)从软件企业本身来讲,其作用体现在:持续地规范软件开发过程和软件管理过程,不断地优化软件组织的个人素质和集体素质,从而逐渐增强软件企业的市场竞争实力。(4)从软件企业发展进程来讲,其作用体现在:克服软件危机,控制软件开发进度,节约开发成本,提高软件质量。2.软件的分类1.2.4软件工程的基本原则用分阶段的生存周期计划严格管理坚持进行阶段评审实行严格的产品控制采用现代程序设计技术结果应能清楚地审查开发小组的人员应该少而精承认不断改进软件工程实践的必要性1.3软件生命周期1.3.1软件生命周期的定义可行性分析需求分析概要设计详细设计编码测试维护可行性分析在项目进入具体开发之前,首先需要进行的步骤是可行性分析。这一步骤必须回答的问题是“将要开发的软件系统是做什么的?在经济上、技术上和操作上是否可行?”,具体来说,需要考虑的问题有:该软件项目的性质是什么、它是数据处理问题还是实时控制问题、它是科学计算问题还是人工智能问题等,以及该问题是否有行得通的解决办法,若有解决问题的办法,则需要多少费用、多少资源(包括硬件、软件和人员)、多少时间。需求分析这一阶段主要要解决的是系统“做什么”的问题。用户了解他们所面对的问题,知道必须做什么,但是通常不能完整地、准确地表达出来,也不知道怎样用计算机解决他们的问题。而软件开发人员虽然知道怎样用软件完成人们提出的各种功能要求,但是,对用户的具体业务和需求不完全清楚,这是需求分析阶段的困难所在。概要设计这一阶段主要解决的是系统“怎么做”的问题。具体来说,开发人员要把确定的各项功能需求转换成相应的软件体系结构,在该结构中,每个成分