1.软件工程--用工程化的原则和方法来克服软件危机。
2.软件生存周期:
(1)可行性分析与项目开发计划--
(2)需求分析--确定系统的逻辑模型
(3)概要设计--把各项功能需求转换成相应的模块以构成需要的体系结构
(4)详细设计--把每个模块的功能描述转变为精确的,结构化的过程描述
(5)编码--把每个模块的控制结构转换为计算机可接受的程序代码
(6)测试--设计测试用例,检查软件的各个组成部分
(7)维护--发生在软件正式投入使用后,时间最长
3.软件生存周期模型--描述软件开发过程中各种活动如何执行的模型
(1)瀑布模型--线性
(2)演化模型--迭代
(3)螺旋模型--每圈线性(制定计划->风险分析->实施工程->用户评估)+圈间迭代+风险分析
(4)喷泉模型--适于面向对象的开发方法;迭代(迭代性)+交叉(无间隙性)
4.软件开发方法--使用早已定义好的技术集及符号表示习惯来组织软件生产的过程
(1)结构化方法--自顶向下,逐步求精。面向数据流。构成:结构化分析,设计,程序设计
(2)面向对象开发方法--使用喷泉模型。面向对象。构成:面向对象分析,设计,实现
(3)Jackson方法--JSP(Jackson Structure Programming)->系统开发方法JSD(Jackson System Development)。面向数据结构。
(4)维也纳开发方法(VDM)--以指称语义为基础。基于模型的方法,将软件系统当做模型来描述,开发的每一步均给出形式化说明。
5.软件需求分析--形成完整,清晰,一致的需求说明
(1)需求的分类:<1> 功能需求--软件该有的功能
<2> 非功能需求--软件该有的属性或品质(可靠性,性能,容错性,扩展性)
<3> 设计约束--对解决方案的约束说明
(2)需求分析的任务:
<1> 确定软件系统的综和要求--系统的功能,性能,运行环境,界面要求;安全性,保密性,可靠性,异常处理方面的要求;将来可能的扩充,修改的要求
<2> 分析软件系统的数据要求--用实体-关系模型来描述;包括基本数据元素,数据元素之间的逻辑关系,数据量,峰值等
<3> 导出系统的逻辑模型--结构化分析方法:数据流图描述;OO分析方法:类模型描述
<4> 可开发一个原型系统
(3)需求分析的方法--系统分析及表示软件的数据域和功能域
大数系统分析方法由数据驱动
数据域三属性:数据流, 数据内容, 数据结构
(4)需求工程--包括需求开发和需求管理
<1> 需求开发--需求捕获, 需求分析, 编写规格说明书, 需求验证
<2> 需求管理--定义需求基线, 处理需求变更, 需求跟踪
6.软件开发项目管理--使对软件开发项目的各方面心中有数
“各方面”如: 开发成本; 开发风险; 开发进度; 开发人员等
(1)成本估算:
方法--自顶向下, 自底向上, 差别估算, 专家估算, 类推估算, 算是估算
模型--Putnam和COCOMO
<1> Putnam--动态多变量模型
<2> COCOMO--结构性成本模型;最精确,最易于使用的成本估算模型之一
a.基本COCOMO--静态单变量模型; 对整个软件系统
b.中级COCOMO--静态多变量模型; 将整个软件系统模型分为系统和部分两层次;考虑程序大小和软件开发的成本驱动属性
c.详细COCOMO--分为系统, 子系统和模块三层次;考虑中级考虑的因素以及软件需求,设计等每一步的成本驱动属性
(2)风险分析:
<1> 风险预测(又称风险估算)--评估风险概率+风险后果:
a.建立一个尺度来反映风险发生的概率
b.描述风险后果
c.估计风险对项目和产品的影响
d.标注风险预测的整体精确度
<2> 风险评估--建立三元组:(ri,li,xi);ri:风险;li:概率;xi:影响
风险参照水准:成本, 进度, 性能
评估四步骤:a.定义项目的风险参考水平值
b.建立每个三元组与每个参考水平值间的关系
c.预测一组临界点已定义项目终止区域(可能为一条曲线)
d.预测什么样的风险组合会影响参考水平值
<3> 风险识别--系统地确定对项目的威胁
方法是建立:风险条目检查表;表项可含:
产品规模, 商业影响, 客户特性, 过程定义, 开发环境, 构建的技术, 人员数目及经验
<4> 风险控制--辅助项目组建立处理风险的策略
一个有效的策略必须考虑:风险避免, 风险监控, 风险管理及意外事件计划
(3)进度管理--合理安排进度以合理分配资源及如期完成软件项目
<1> 进度安排的方式--系统最终交付日期已确定 OR 只确定了大致的年限
<2> 进度安排的常用图形描述方法:
a.甘特(Gantt)图--横坐标表时间;纵坐标表任务;水平线段表某一人物的进度安排
优点--描述每个任务的开始结束时间;描述任务之间的并行性
缺点--不能反映任务间的依赖关系,关键所在及计划中有潜力的部分
b.计划评审技术PERT(Program Evaluation & Review Technique)图:
PERT图让我想到了数据结构中的图一章的AOE网及关键路径的概念
PERT图是一个有向图
箭头--任务;其上标注任务持续时间及松弛时间
节点--事件(仅表示某个时间点,不消耗资源和时间;仅当流入该节点的任务都结束时才出现);其内标注事件号,最早时刻(在此时刻之前,从该事件出发的任务不可能开始),最迟时刻(从该事件出发的任务必须在该时刻之前开始,否则整个工程不能如期完成)
松弛时间为0的任务们构成完成整个工程的关键路径
优点--给出了每个任务的开始结束时间,完成所需时间,关系(先后依赖 & 关键路径)
缺点--不能反映任务之间的并行性
(4)人员管理--可以按软件项目对软件人员分组:需求分析组,设计组,编码组,测试组,维护组等
程序设计小组可有多种:
<1> 主程序员组--一主程序员,一后备程序员,一资料员和若干程序员
<2> 无主程序员组--成员之间相互平等
<3> 层次式程序员组--一组长-->若干高级程序员-->若干程序员
7.软件配置管理--降低变更所产生的混乱。
简称SCM(Software Configure Management),主要目标:
标识变更,控制变更,确保变更正确地实现,报告有关变更
(1)基线--明确划分开发各阶段的特定点,以便于检查与肯定阶段成果,可作为错误的检查点
(2)软件配置项--SCI(Software Configure Item),是配置管理的基本单位,可形成基线,如下
系统规格说明书
软件项目实施计划
软件需求规格说明书
设计规格说明书(数据,体系结构,模块,接口设计;对象描述)
源代码清单
测试计划和过程,测试用例和测试结果记录
操作和安装手册
可执行程序(可执行程序模块,连接模块)--源代码
数据库描述(模式和文件结果,初始内容)--数据
用户手册
维护文档(软件问题报告,维护请求,工程变更次序)
软件工程标准
项目开发小结
*由上可知,基线(OR SCI)可以是源代码,文档,数据:)
(3)版本控制
软件配置项是动态的,随着软件生存期及软件版本的翻新而扩充
软件的每个版本都是SCI(源代码,文档,数据)的汇集
表达系统不同版本可用演变图,图中各节点为一个完整的软件版本
(4)变更控制--一项最总要的软件配置任务,需借助配置数据库和基线的概念
配置数据库可分三类:<1> 开发库--专供开发人员使用,修改频繁
<2> 受控库--也称软件配置库,存放项目开发过程中的阶段产品
<3> 产品库--存放最终软件产品
8.软件工具--辅助软件开发,运行,维护,管理,支持等的软件。
软件工具通常也称CASE--Computer Aided Software Engineering计算机辅助软件工程工具
按软件过程的活动来分类:
(1)软件开发工具--对应软件开发过程
<1> 需求分析工具
生成完整,清晰,一致的功能规范(Functional Specification)
分为:基于自然语言或图形描述的工具和基于形式化需求定义语言的工具
<2> 设计工具
生成相应的设计规范(Design Specification)
分为:a.概要设计工具--设计目标软件的体系结构,控制结构,数据结构
b.详细设计工具--设计模块的算法和内部实现细节
c.基于形式化描述的设计工具
d.OO分析与设计工具
<3> 编码与排错工具
(2)软件维护工具--对应软件(代码 & 文档)维护过程
<1> 版本控制工具--存储,更新,恢复,管理一个软件得多个版本
<2> 文档分析工具--分析文档以得到软件维护活动所需的维护信息(如修改某文档后的影响范围)
<3> 开发信息库工具--维护软件开发项目的开发信息。包括对象,模块等。
<4> 逆向工程工具--具体到抽象,力图恢复源程序的设计信息以使软件更易理解。分静态动态两种
<5> 再工程工具--支持构成一个功能,性能更完善的软件系统。集中在代码重构,程序结构重构,数据结构重构等方面
(3)软件管理和支持工具
<1> 项目管理工具
<2> 配置管理工具
<3> 软件评价工具
9.软件开发环境--支持软件开发的软件系统,由软件工具集和环境集成机制构成。
10.软件过程管理--确保良好的软件过程,以确保良好的软件质量
软件过程评估的意义
软件能力成熟度模型(CMM简介)
统一过程(UP)
极限编程(XP)
11.软件质量管理与质量保证--有计划有组织地开发,以生成高质软件。
软件质量特性
软件质量保证
软件复杂性
软件评审
软件容错技术