软件设计师复习笔记__软件工程与软件过程

来源:互联网 发布:矩阵行列式定义 编辑:程序博客网 时间:2024/06/05 20:53

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)

01300000291092124133739769845

优点: 能清晰地描述任务的开始,结束以及进展

缺点: 无法反映各个任务之间的依赖关系,难以确定其关键所在.

*2. 项目计划评审技术(PERT图)

anli4-7

能准确的反映出各个任务之间的关系与找出关键路径.

<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>系统维护的管理和步骤

(2)系统评价

(3)系统评价的指标

0 0
原创粉丝点击