一、软件开发生命周期
1.定义:从构思开始,经过定义、开发、使用和维护,直到废弃的过程
2.各种活动:
软件定义时期:确定工程必须完成的总目标(1.要解决什么问题?2.好不好解决?3.怎样去解决?)
问题定义:确定目标
可行性研究:技术可以、经济可行、操作可行、社会可行
需求分析: 功能需求:必须完成的功能
性能需求:安全性、可靠性、可维护性、响应速度、适应性
运行环境:硬件和软件平台
软件开发时期:软件的设计与实现(1.软件实现采用什么结构?2.细节如何实现?3.怎样确保质量?)
概要设计:定义功能模块,确定模块之间的关系
详细设计:将模块细节转化为过程性描述
编码:将详细设计转化为代码
测试:单元测试、集成测试、确认测试、系统测试
软件运行和维护:产品交付给用户使用(1.如何部署软件?2.如何满足用户新的需求?)
运行:由用户使用
维护:修改软件满足新需求
二、开发模型
1.定义:实际开发过程的抽象与概括,为工程管理提供里程碑和进度表,为软件开发过程提供原则和方法
2.各种模型:瀑布模型、原型、螺旋模型、基于重用构件、基于面向对象
三、敏捷方法
1.特点:欢迎变化,“面向人”而非“面向过程”,强调相关人员间的信息交流
2.主要敏捷方法:极限编程、SCRUM
3.核心思想:
利用变化来发展
以人为本,平衡“过程控制”
迭代增量开发
最根本的文档是源代码
适用于快速变化的小型项目
四、RUP
1.用例驱动、以体系结构为中心、迭代增量的开发过程
2.迭代的四个过程:初始、细化、构造、移交
3.用例图:分析和测试人员关心
实现视图:程序员关心
部署视图:系统工程师关心
逻辑视图:最终用户关心
五、需求管理
1.定义:一个对系统需求变更、了解和控制的过程
2.最终文档经过评审批准后,则定义了需求基线
3.需求管理原则:
用CMMI(初始、管理、定义、定量、精化)指导过程改进
需求文档必须评审
通过版本控制保证文档和需求一致
4.需求变更:
有代价的,即使拒绝的变更也耗费资源
变更控制不是障碍,而是渠道和过滤器,筛选合适的变更
对每个变更权衡利弊,再做决定
六、开发管理
1.进度安排的准确度比成本估计高
2.工作分解结构wbs
3.文档管理应满足的要求:
用户如何使用?
怎样安装和管理?
需求和设计?
实现和测试?
4.质量:一组固有特性满足需求的程度
5.项目成功的关键因素:范围、成本、时间、质量
6.风险:或然性、不确定性、涉及到某种选择时
七、软件重用
1.横向重用:重用不同领域中的软件元素
2.纵向重用:重用应用领域中的特征,是软件重用技术的真正希望所在
八、逆向工程和重构工程
1.逆向工程:分析已有程序,寻找比源代码更高级的抽象表现形式
2.重构工程:在同一抽象级别上,转换系统的描述形式