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

该笔记参考<软件设计师教程>(2010.7)版编写

MadeBy: Kingmoon

2011/05/07

 

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)系统评价的指标

posted on 2011-05-07 13:36  kingmoon  阅读(2878)  评论(0编辑  收藏  举报

导航