1、软件危机和软件工程软件危机和软件工程11.111.2软件开发过程软件开发过程11.3软件测试软件测试11.1.1 11.1.1 软件危机软件危机1.1.产生软件危机的原因产生软件危机的原因软件本身的特点软件本身的特点软件开发人员软件开发人员的特点的特点2.2.早期软件危机的主要表现早期软件危机的主要表现软件开发费用和进度失控软件的可靠性差生产出来的软件难以维护3.3.软件危机的具体表现软件危机的具体表现 软件开发进度难以预测,软件开发成本难以控制,软件产品质量无法保证,软件产品难以维护,软件缺少适当的文档资料等。11.1.1 11.1.1 软件危机软件危机4 4.软件危机解决的途径软件危机解决
2、的途径1968年年 NATO “软件工程软件工程”概念概念11.1.2 11.1.2 软件工程软件工程1 1.软件工程的发展(四个阶段)软件工程的发展(四个阶段)第一阶段(第一阶段(1956195619671967年):控制机器年):控制机器第二阶段(第二阶段(1968196819821982年):控制过程年):控制过程11.1.2 11.1.2 软件工程软件工程第三阶段(第三阶段(1983198319951995年):控制复杂性年):控制复杂性第四阶段(第四阶段(19961996年至今):异构环境下分年至今):异构环境下分布式软件的开发布式软件的开发2 2.软件工程的主要内容软件工程的主要内
3、容软件工程研究的主要内容是软件开发技术和软件开发管理两个方面。在软件开发技术中,主要研究软件开发方法、软件开发过程、软件开发工具和环境。在软件开发管理中,主要研究软件管理学、软件经济学、软件心理学等。11.1.2 11.1.2 软件工程软件工程3 3.软件工程的基本原理软件工程的基本原理 软件工程过程实质上是生产一个最终能满足需求且达到工程目标的软件产品所需要的步骤,主要包括开发过程、运作过程、维护过程。它们覆盖了需求、设计、实现、确认以及维护等活动。11.2.1 11.2.1 软件生命周期软件生命周期1 1.软件生命周期的划分软件生命周期的划分(1 1)软件定义软件定义(2 2)软件开发软件
4、开发(3 3)软件维护软件维护1.问题定义问题定义8.8.软件维护软件维护t2.可行性研究可行性研究7.综合测试综合测试6.6.编码和单编码和单元测试元测试5.详细设计详细设计3.需求分析需求分析4.总体设计总体设计11.2.1 11.2.1 软件生命周期软件生命周期2 2.软件生命周期各阶段的任务软件生命周期各阶段的任务11.2.2 11.2.2 软件软件开发模型开发模型123456增量模型增量模型瀑布模型瀑布模型快速原型模型快速原型模型螺旋模型螺旋模型形式化方法模型形式化方法模型基于组件的基于组件的开发模型开发模型11.3.1 11.3.1 软件软件测试的目的测试的目的 软件测试的主要工作
5、内容是验证和确认,即通过人工或者自动方法来运行或测试所开发的系统,检验它是否满足所规定的需求或弄清预期结果与实际结果之间的差别,并找出中间存在的错误;通过分析需求与结果之间存在的差别、系统中错误产生的原因和错误的发生趋势,帮助项目管理者及时发现当前软件开发过程中的缺陷,以便及时纠正和改进。11.3.2 11.3.2 测试的原则与分类测试的原则与分类1 1.软件测试的原则软件测试的原则1.1.应当牢记应当牢记“尽早地和不断地测试尽早地和不断地测试”。2.2.程序员应避免测试自己的程序程序员应避免测试自己的程序。3.3.要认真设计测试用例要认真设计测试用例。4.4.充分注意测试中的群集现象充分注意测试中的群集现象。5.5.注意回归测试的关联性注意回归测试的关联性。6.6.严格执行测试计划,排除测试的随意性严格执行测试计划,排除测试的随意性。11.3.2 11.3.2 测试的原则与分类测试的原则与分类1 1.软件测试的分类软件测试的分类白盒测试白盒测试黑盒测试黑盒测试从是否关心软件内部结构从是否关心软件内部结构和具体实现的角度划分和具体实现的角度划分单元测试单元测试集成测试集成测试从软件开发的过程划分从软件开发的过程划分确认测试确认测试系统测试系统测试