1.软件工程的基本知识.
软件包含3部分: 1.计算机程序 2.数据结构 3.描述程序的操作和使用文档.
(1)软件生存周期和开发方法.
<1> 软件生存周期.
软件生存周期包括: 需求阶段, 设计阶段,实现阶段,测试阶段,安装阶段和运行维护阶段.
*1.可行性分析与项目开发阶段.
参与者: 用户, 项目负责人, 系统分析师.
产生: 可行性分析报告和项目开发计划.
*2.需求分析
参与者: 用户,项目负责人,系统分析师.
产生: 软件需求说明书.
*3.概要设计
参与者: 系统分析师与软件设计师
产生: 概要设计说明书.
*4.详细设计.
参与者: 软件设计师和程序员.
产生: 详细设计文档
*5.编码.
*6.测试.
*7.维护.
<2>软件生存周期模型.
常见的: 瀑布模型,螺旋模型,演化模型,喷泉模型等,目前流行的有: 统一过程和敏捷方法.
<3>软件开发方法
*1.结构化方法
由结构化分析,结构化设计,结构化程序设计组成.它是一种面向数据流的开发方法.
结构化方法指导思想: 自顶向下和逐层分解,他的基本原则是功能的分解与抽象.
特别适合于解决数据处理领域的问题,但不适用于解决大规模和特别复杂的项目且难以适应需求变化.
*2.Jackson方法.
它是一种面向数据结构的开发方法.
JSP方法: 是以数据结构为驱动,适用于小规模项目,当输入数据结构和输出数据结构没有对应关系的时候,难以使用该方法.
JSD方法: JSP的扩充,是一种完整的系统开发方法.它特别强调操作之间的时序性,以事件作为驱动,是一种基于进程的开发方法.适用
时序性较强的系统.如数据处理系统和实时控制系统.
*3.原型化方法.
适用于用户需求不清,业务理论不确定和需求经常变化的情况.
*4.面向对象的开发方法.
主要是: 按照人类思维方法和认识世界的方法来分析和解决问题,主要有Booch方法,Coad方法和OMT方法.
*5.基于构件的开发方法.
*6.面向服务的软件开发方法.
(2)系统分析的基础知识.
<1>需求的分类.
*1.功能需求.
*2.非功能需求:可靠性,性能,响应时间,容错性和扩展性,可移植性等.
*3.设计约束.
<2>需求工程.
*1.需求开发: 需求获取,需求分析,编写规格说明书和需求验证4方面的工作.
*2.需求管理: 包括定义需求基线,处理需求变更和需求跟踪等方面的工作.
(3)系统设计知识.
<1>.系统设计的任务.
A.概要设计
*1.软件系统总体结构设计.
模块的划分.调用关系和接口.
*2.数据结构的设计.
*3.数据库的设计.
概念设计(ER图),逻辑设计,物理设计
*4.概要设计文档编写.
*5.评审
B.详细设计
<2>.系统设计的基本原理.
*1.抽象
*2.模块化
*3.信息隐藏
*4.模块独立.
a.耦合性
无直接耦合,数据耦合,标记耦合,控制耦合,公共耦合,内容耦合.
b.内聚性
偶然内聚,逻辑内聚,时间内聚,通信内聚,顺序内聚,功能内聚.
(4).总体结构设计.
<1>.系统总体结构设计原则.
*1.分解--协调原则
*2.自顶向下原则
*3.信息隐藏抽象原则
*4.一致性原则
*5.明确性原则
*6.模块间要低耦合,模块要高内聚
*7.模块的扇入系数和扇出系数要合理
一个模块调用其他模块的个数称为该模块的扇出系数.
一个模块被其他模块直接调用的个数称为扇入系数.
平均扇入系数和扇出系数一般为3或4,不超过7
*8.模块规模要适当
<2>子系统的划分原则.
*1.子系统要具有相对独立性.
*2.子系统之间的数据的依赖性要尽量少.
*3.子系统的划分的结果应该是的数据冗余较小.
*4.子系统的设计应该考虑今后管理发展的需要.
*5.子系统划分应该便于系统分阶段实现.
*6.子系统的划分应考虑到各类资源的充分利用
<3>子系统的结构设计.
必须考虑以下几个问题:
*1.每个子系统如何划分成多个模块
*2.如何确定子系统之间,模块之间传送的数据及其调用关系.
*3.如何评价并改进模块结构的质量.
*4.如何从数据流图导入模块结构图.
<4>.系统模块的结构设计.
4个要素:
*1.输入和输出
*2.处理功能
*3.内部数据
*4.程序代码
<5>结构化系统设计方法(SD)
这一部分主要是数据流图的设计与分析.
<6>面向数据结构的系统设计方法
主要介绍Jackson方法.
<7>系统详细设计
*1.代码设计
*2.输出设计
*3.输入设计
*4.处理过程设计
对于数据流图中加工的处理
a.程序流程图.
b.盒图(N-S图)
c.决策树
d.决策表
*5.用户界面处理
*6.安全控制设计
环境性因素和数据处理因素
(5)系统实施知识
<1>系统实施的主要任务
购置设备,软件准备,培训,数据准备,投入转换和试运行.
<2>系统实施的步骤
购置设备,数据库搭建,程序设计,输入数据并进行系统测试,人员培训
<3>程序设计
依据: 层次式-处理-输出图(HIPO图)
*1.程序设计方法
结构化程序设计方法,快速原型式程序开发,面向对象程序设计方法.
*2.程序设计的基本模块
*3.程序设计语言的选择
(6)测试与调试
<1>.系统测试的意义,目的及原则.
意义: 为了发现软件的错误.
目的: 以最少的人力和时间发现潜在的各种错误和缺陷.
<2>.测试过程
a.制定测试计划.
b.编写测试大纲
c.根据测试大纲设计和生成测试用例,产生测试设计说明文档
d.实施测试
e.生成测试报告.
<3>.测试策略
*1.单元测试(一般采用白盒测试)
模块接口,局部数据结构,重要的执行路径,出错处理和边界条件
编写驱动模块和桩模块
*2.集成测试
a.非增量式集成
先测试每个模块,最后整合起来一起在测试一遍.
优点: 可以对模块进行并行测试,能充分利用人力物力并加快工程进度
缺点: 出现错误时不容易查找和定位
b.增量式集成
把下一个需要测试的模块组合到已测试好的模块中,测试完后再将下一个需要测试的模块组合起来进行测试.逐步把所有的模块组合在
一起并完成测试
优点:范围一步一步扩大,容易定位且已测试的模块可在新的条件下再测试,测试更彻底.
c.面对对象的测试.
基于集成的测试和基于使用的测试.
*3.确认测试
进一步检查软件的功能和性能是否与用户要求的一样.
分为:
a.有效性测试: 在模拟的环境下,通过黑盒测试验证所开发的软件是否和需求规格说明书一样.
b.软件配置审查
c.验收测试:以用户为主的测试.
d.安装测试.
*4.系统测试
将已经确认的软件,计算机硬件,外设和网络等结合在一起进行信息系统的各种集成测试和确认测试.
a.恢复能力测试,
b.安全性测试.
c.压力测试.
d.性能测试.
e.可靠性.
f.安装测试
<4>测试用例的设计
*1.等价类
*2.边界值
*3.错误推断
*4.因果图
<5>调试
试探法,回溯法,对分查找法,归纳法,演绎法
2.软件过程的基本知识
(1)软件过程模型
<1>瀑布模型
以文档为驱动,适用于需求明确的项目.但缺乏灵活性
<2>演化模型
通过开发原型,然后根据客户的反馈和意见改进原型.适用于需求模糊的情况.
<3>螺旋模型
结合了瀑布模型和演化模型,并加入了风险分析.
过程: 1.制定计划. 2.风险分析. 3.实施工程. 4.用户评估.
<4>喷泉模型
以用户需求为动力,以对象为驱动的模型.适合于面向对象开发方法.
使得开发过程具有跌代谢和无间隙性(使得各个过程没有明确的界线).
<5>统一过程(UP)
以用例驱动,以架构为中心,迭代并且增量
<6>敏捷方法
(2)统一过程(UP)
<1>用例驱动
<2>以架构为中心.
<3>迭代和增量
<4>统一过程的生命周期
分为: 初始阶段, 精化阶段, 构建阶段, 移交阶段, 产生阶段.
<5>RUP
(3)敏捷方法
目标: 尽可能早的,持续的对有价值的软件的交付使客户满意.
4条宣言与12条原则.
<1>极限编程(XP)
四大价值观: 沟通,简单,反馈和勇气
<2>水晶法
她认为每个不同的项目都需要一套不同的策略,约定和方法论,适用于规模在100-500个功能点的软件.
<3>并列争球法
她使用迭代的方法,把每30天一次的迭代称为一个冲刺并按需求的优先级来实现产品.
<4>自适应软件开发.
<5>特征驱动软件开发
(4)软件过程改进
<1>软件过程评估的意义
*1.软件过程改进的需要
*2.降低软件风险的需要
*3.集成各种过程改进工作的需要.
<2>软件能力成熟度摸得简介(CMM)
他是对软件进化阶段的描述
理解关键过程域
软件过程成熟度分为:
初始化级,可重复级,已定义级,已管理级,优化级
<3>能力成熟度集成模型(CMMI)
能力等级0-5.
3.软件开发计划与管理
(1)软件项目管理
<1>成本预算
*1.自顶向下估算法.
优点: 重视系统级工作,工作量小,速度快.
缺点: 忽视低级别上的技术困难,使得成本上升.
*2.自顶向上估算法.
将软件细分并由负责该部分子任务的人员来负责估算
优点: 估算精准
缺点: 估算缺乏各个子项目之间
*3.差别估算法.
与已经完成的项目进行比较,找出不同之处并估算其对成本的影响.
优点: 提高估算准确度/缺点: 不容易明确差别的界线.
*4.其他: 专家估算法,类推估算法算式估算法.
*5.常见的估算模型: Putnam模型和COCOMO模型
<2>风险分析
*1.风险识别.
建立风险条目检查表
*2.风险预测.
*3.风险评估.
*4.风险控制.
<3>进度管理
*1.甘特图(Gantt)
优点: 能清晰地描述任务的开始,结束以及进展
缺点: 无法反映各个任务之间的依赖关系,难以确定其关键所在.
*2. 项目计划评审技术(PERT图)
能准确的反映出各个任务之间的关系与找出关键路径.
<4>人员管理.
人员能力成熟度模型(P-CMM)
(2)软件配置管理(SCM)
<1>基线
<2>软件配置项<SCI>
<3>软件版本控制
<4>变更控制
(3)软件质量管理
<1>软件质量的特性
*1.功能性: 适应性,准确性,互用性,依从性,安全性
*2.可靠性: 成熟性,容错性,易恢复性
*3.易使用性: 易理解性,易学性,易操作性
*4.效率: 时间特性,资源特性
*5.可维护性: 易改变性,易分析性,稳定性,易测试性
*6.可移植性: 适应性,易安装性,一致性,易替换性
<2>Mc Call软件质量模型
<3>软件质量保证
<4>软件复杂度
*1.代码行度量法
*2.McCabe度量法
公式: V(G)=m-n+2p 其中: m 弧数, n 节点数, p=1
<5>软件评审
<6>软件容错技术
4.系统运行和维护知识
(1)系统维护概述
<1>系统可维护性概念
维护人员理解,改正,改动和改进软件的难易程度.
*1.系统可维护性的评价指标
可理解性,可测试性,可修改性
*2.维护与软件文档
*3.软件文档的修改
<2>系统维护的内容及类型
*1.硬件维护
*2.软件维护
*3.数据维护
<3>系统维护的管理和步骤