计算机软件在开发和维护过程中遇到的一系列严重问题。
软件规模越来越庞大,越来越复杂
1、忽视需求分析
2、错误地认为:软件开发=编程编写
3、轻视软件维护
它是一种解决问题的思维:
将一个复杂难辨的大问题,分解为更小的子问题,从而化繁为简,逐个突破。
IEEEE:(1)应用系统化的、学科化的、定量的方法来开发、运行和维护软件,即将工程应用到软件;(2)对(1)中各种方法的研究。
比如:将搭房子的思想用来编写程序,那么图纸就对应于分析与设计。即软件工程是一门需要不断完善的研究领域,不少模型与方法也是通过学术论文公之于众的。
在给定时间和预算内,按照用户的需求,开发易修改、高效、可靠、可维护、适应性强、可移动以及可重用的软件。
工具:建模工具rational rose、编程工具visual studio、测试工具等
方法:面向过程与面向对象的方法。贯穿整个软件开发的各个环节,是每个环节依赖的一组原则。
过程:过程管理。
管理人员:在各个环节建里程碑,质量、进度、成本、风险以及控制等管理;
开发技术人员:采用相应的方法和工具在各个环节产生的软件工程产品(模型、文档、数据报告以及文档等)
软件过程的概念与能力成熟度模型
通过制作原型降低需求不明确的风险
通过以增量方式开发软件降低需求变化带来的风险
将开发活动和风险管理结合起来控制风险
通过复用和集成已有的构建或组件来实现软件开发!
9个核心工作流
RUP的生命周期分为初始、细化、构造和交付4个阶段,每个阶段都包含了需求、设计、编码和测试等活动,只是活动主体不一样而已。
管理需求三步曲:
1、获取需求,并写成文档
2、估计需求变化产生的影响
3、跟踪需求变化,记录每次对需求变化所做的决策
采用用例驱动
基于构件的体系结构
因为模型能让开发人员之间更好沟通并理解系统。UML可视化建模语言提供5个视图,10种图。
软件工程中的缺陷越早被发现和解决其成本越低,因此需要在每个迭代周期内进行功能和性能测试!
包括需求变更、资源变化、技术更新和平台更换等
初始阶段:为系统建立商业模型并确定边界。为了达到该目的需要 识别所有与系统交互的外部实体,在较高层次上定义交互的特性。
细化阶段:分析问题域,建立完整的体系结构,编制项目计划书,淘汰项目高风险元素。
构造阶段:开发构建和应用程序并集成成为产品,所有功能被详细测试。
交付阶段:确保软件对最终用户是可用的。交付阶段可以迭代多次。
敏捷开发的工作方式
软件过程模型的选择