软考之软件设计师——软件过程基础知识

软件过程基础知识

1、软件过程

  1. 能力成熟度模型(CMM):对软件组织进化阶段的描述。CMM将软件过程分为5个成熟度级别。
  • 初始级:软件过程的特点是杂乱无章。
  • 可重复级:建立了基本的项目管理过程和实践来跟踪项目费用、进度等,有必要的过程准则。
  • 已定义级:管理和工程两方面的软件过程已经文档化、标准化,并综合成整个软件开发组织的标准软件过程。
  • 已管理级:制定了软件过程和产品质量的详细度量标准。
  • 优化级:加强了定量分析。通过过程质量反馈等不断持续更新地改进。
  1. 能力成熟度模型集成(CMMI):若干过程模型的综合和改进,是支持多个工程学科和领域的、系统的、一致的过程改进框架,能提高过程质量和工作效率。CMMI提供的两种表示方法:
  • 阶段式模型:类似CMM,关注组织的成熟度。
    (1)初始的 :过程不可预测且缺乏控制
    (2)已管理的:过程为项目服务。
    (3)已定义的:过程为组织服务
    (4)定量管理的:过程已度量和控制
    (5)优化的:集中于过程改进。
  • 连续式模型:关注每个过程域的能力。6个过程域能力等级。CL0(未完成的)、CL1(已执行的)、CL2(已管理的)、CL3(已定义的)、CL4(已定量管理的)、CL5(优化的)

2、软件过程模型:

  1. 瀑布模型:瀑布模型是将软件生存周期中的各个活动规定为依线性顺序连接的若干阶段的模型,包括需求分析、设计、编码、运行与维护。
    瀑布模型的特点是容易理解,管理成本低,每个阶段都有对应的成果产物,各个阶段有明显的界限划分和顺序要求,一旦发生错误,整个项目推倒重新开始,项目风险控制能力低。
    适用于需求明确的项目,一般表述为需求明确、或二次开发,或者对于数据处理类型的项目。
  2. V模型:瀑布模型的一个变体。强调测试贯穿项目始终,而不是集中在测试阶段。是一种测试的开发模型,提供了一种将验证确认活动应用于早期软件过程工作中的方法。
  3. 喷泉模型:典型的面向对象的模型。特点是迭代、无间隙。会将软件开发划分为多个阶段(分析、设计、实现、维护、演化),但各个阶段无明显界限,并且可以迭代交叉。这种模型要求严格管理文档,使得审核难度加大。
  4. 演化模型(迭代的过程模型)
  • 原型模型:典型的原型开发方法模型,根据目标初步建模,构建预期系统,然后交给用户,不断收集反馈意见,并在下一轮中对原型进行改进。适用于需求不明确,需求经常变化的场景,可以帮助用户明确需求。
  • 螺旋模型:结合了瀑布模型和演化模型的优点,最主要的特点在于加入了风险分析。它是由制定计划、风险分析、实施工程、客户评估这一循环组成的,它最初从概念项目开始第一个螺旋。属于面向对象开发模型,强调风险引入。
  1. 增量模型:融合了瀑布模型的基本成分和原型实现的迭代特征,可以有多个可用版本的发布,核心功能往往最先完成,在此基础上,每轮迭代会有新的增量发布,核心功能可以得到充分测试。强调每一个增量均发布一个可操作的产品。 可以减少用户需求的变更,但如果没有对用户变更要求进行规划,可能造成后来增量不稳定。

3、统一过程
(在软件设计师考试中UP、RUP都指统一过程):典型特点是用例和风险驱动、以架构为中心、迭代和增量的开发过程。由UML方法和工具支持。统一过程把一个项目分为四个不同的阶段:

  • 构思(起始)阶段 :包括用户沟通和计划活动两个方面,强调定义和细化用例,并将其作为主要模型,产生的主要工作产品有构想文档、初始用例模型、起始风险评估、项目计划(阶段及迭代)、业务模型等。
  • 细化(精化)阶段 :包括用户沟通和建模活动,重点是创建分析和设计模型,强调类的定义和体系结构的表示,对最初的领域范围进行需求分析和架构演进,产生的主要工作产品:用例模型、补充需求,分析模型,软件体系结构描述,项目计划(迭代计划,调整的工作流,里程碑和技术产品)和初始用户手册。
  • 构建阶段 :将设计转化为实现,并进行集成和测试,产生的产品:集成的软件增量、测试计划和步骤,测试用例和支持文档(用户手册,安装手册等)。
  • 移交阶段 :将产品发布给用户进行测试评价,并收集用户的意见,之后再次进行迭代修改产品使之完善。产生的主要工作产品:提交的软件增量、测试报告,用户反馈。

4、敏捷方法
敏捷开发是一种以人为核心、迭代、循序渐进的开发方法,适用于小团队和小项目,具有小步快跑的思想,敏捷方法使用户能够在开发周期的后期增加或改变需求。常见的敏捷开发方法有极限编程法、水晶法、并列争球法和自适应软件开发方法。
(1)极限编程(XP)是一种轻量级、高效、低风险、柔性、可预测的、科学的开发方法,由价值观、原则、实践、行为组成,它提出了四大价值观:沟通、简单、反馈、勇气。五大原则:快速反馈、简单性假设、逐步修改、提倡更改、优质工作。十二个最佳实践:计划游戏、隐喻、小型发布、简单设计、测试先行、重构、结队编程、集体代码所有制、持续集成、每周工作40小时、现场客户和编码标准。
(2)水晶法(Crystal,最少纪律约束):强调经常交付,认为每一种不同的项目都需要一套不同的策略、约定和方法论。
(3)并列争求法(Scrum,明确定义可重复的方法过程):核心是迭代、增量交付,按照30天进行迭代开发交付可实际运行的软件,协调是通过简短的日常情况会议来进行。
(4)自适应软件开发(ASD):核心是三个非线性的,重迭的开发阶段:猜测、合作、学习。有一个使命作为指导,重做与做同样关键。变化被视为对软件开发实际情况的调整,开发人员认真考虑每个版本的关键需求。

5、软件开发方法
(1)结构化方法:面向数据流的、严格区分阶段、强调系统开发过程的整体性和全局性、自顶向下,逐步分解。不适合大系统开发。
(2)原型法
(3)面向对象方法(喷泉模型):更好的复用性;关键在一建立一个全面、合理、统一的模型;分析、设计、实现三个阶段,界限不明确。
(4)面向服务的方法如:SOA

6、需求分析
需求的分类:功能需求、非功能需求、设计约束

7、系统设计
大体上可分为概要设计和详细设计软件
设计工具:IPO图(输入处理输出图)、PDL(程序描述语言)、PAD(问题分析图)、程序流程图、N/S盒图

(1)概要设计:

  • 设计软件系统总体结构:将一个复杂的系统按功能划分为模块,确定每个模块的功能等。
  • 数据结构及数据库设计:逐步细化的方法也适用于数据结构设计,对需求分析阶段的数据字典加以细化,宜使用抽象的数据类型。数据库的设计是指数据存储文件的设计,包括概要设计、逻辑设计、物理设计。
  • 编写概要设计文档:概要设计说明书、数据库设计说明书、用户手册及修订测试计划
  • 评审

(2)详细设计:

  • 对每个模块进行详细的算法设计
  • 对模块内的数据结构进行设计
  • 对数据库进行物理设计
  • 其他设计:代码设计、用户界面设计、输入输出格式设计。
  • 编写详细设计说明书
  • 评审

软件设计原则:高内聚低偶尔
内聚类型:从高到低

  • 功能内聚:完成一个单一功能,各部分协调工作,缺一不可。
  • 顺序内聚:模块内部的各个部分,前一部分处理动作的最后输出是后一部分处理动作的输入。
  • 通信内聚:模块的各个组成部分所完成的动作都使用了同一个数据,集中在一个数据结构或产生同一输出数据。
  • 过程聚合:模块内部各个组成部分所要完成的动作虽然没有关系,但必须按特定的次序执行。
  • 时间聚合:模块内部的各个组成部分所包含的处理动作必须在同一时间内执行。
  • 逻辑聚合:模块内部的各个组成在逻辑上具有相似的处理动作,但功能用途上彼此无关。
  • 偶然聚合:模块完成的动作之间没有任何关系,或者仅仅是一种非常松散的关系。

耦合类型:从低到高

  • 非直接耦合:两个模块之间没有直接关系,它们的联系完全是通过主模块的控制和调用来实现的。
  • 数据耦合:两个模块彼此间通过数据参数交换信息。
  • 标记耦合:一组模块通过参数表传递记录信息,这个记录是某一个数据结构的子结构,而不是简单变量。
  • 控制耦合:两个模块彼此间传递的信息中有控制信息。
  • 外部耦合:一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息。
  • 公共耦合:两个模块之间通过一个公共的数据区域传递信息。内容耦合:一个模块需要涉及到另一个模块的内部信息。

系统测试

有效的软件测试分为4步进行,即单元测试、集成测试、确认测试、系统测试.

  • 单元测试:也称为模块测试,侧重于模块中的内部处理逻辑和数据结构。如果用机器测试一般采用白盒测试。主要检查模块的以下5个特征:模块接口、局部数据结构、边界条件、独立的路径(重要的执行路径)、错误处理。
    单元测试过程:驱动模块(相当于主程序,接收测试例子的数据)、桩模块(也称为存根模块,用来代替测试模块中调用的子模块)

  • 集成测试:模块间的接口和通信,旨在发现于接口相关的错误测试。集成测试方法:非增量集成(并行工作,不过容易混乱)、增量集成。下面是几种增量集成策略。

  1. 自顶向下集成测试:可采用深度优先或广度优先的集成方法,可以执行回归测试
  2. 自底向上集成测试:从原子模块开始进行构造和测试。
  3. 回归测试:重新执行已测试过的某些子集,修改软件后进行的测试,以确保变更没有传播不期望的副作用。
  4. 冒烟测试:常用的集成测试方法,是时间关键项目的决定性机制,它让软件团队频繁地对项目进行评估。包括活动有:把软件构建集成在构件中;设计一系列测试;每天将该构建与其它构建或软件产品集成进行冒烟测试。可以自顶向下也可以自底向上。
  • 确认测试(验收测试):在进行确认测试或系统测试时,传统软件、面对对象软件及WebApp之间的差别已经消失,测试集中于用户可见的动作和用户可识别的系统输出。包括确认测试准则、配置评审、验收测试(由最终用户进行,有a测试,β测试)
  1. a测试:由由代表性的最终用户在开发者场所进行,开发者在场,在受控环境进行。
  2. β测试:在一个或多个最终用户场所进行,开发者不在场。
  • 系统测试:通常与系统的需求相比较。有恢复测试、安全性测试、压力测试、性能测试、部署测试

软件测试方法分类:
软考之软件设计师——软件过程基础知识_第1张图片

  1. 常见的黑盒测试方法:不考虑软件内部结构和特性,测试软件外部特性
  • 等价类划分:将输入域划分为若干个等价类。分为有效等价类和无效等价类,设计用例尽可能多的覆盖有效类,设计用例只覆盖一个无效类。
  • 边界值分析:处理边界情况时最容易出错,选取的测试数据应该恰好等于、稍小于或稍大于边界值。
  1. 常见的白盒测试方法:根据程序内部结构和逻辑设计测试用例,对程序的路径和过程进行测试。
  • 语句覆盖:语句覆盖是指选择足够多的测试用例,使得运行这些测试用例时,被测程序的每个语句至少执行一次。【最弱覆盖】
  • 判定覆盖:判定覆盖又称为分支覆盖,它的含义是,不仅每个语句至少执行一次,而且每个判定的每种可能的结果(分支)都至少执行一次。
  • 条件覆盖:条件覆盖的含义是,不仅每个语句至少执行一次,而且使得判定表达式中的每个条件都取得各种可能的结果。【条件不一定包含判定,反之亦然】
  • 判定/条件覆盖:同时满足判定覆盖和条件覆盖的逻辑覆盖。
  • 条件组合覆盖:使判定中条件的各种可能值的组合都至少出现一次。满足条件组合覆盖的测试用例一定满足判断覆盖、条件覆盖、判定/条件覆盖。
  • 路径覆盖:它的含义是,选取足够多的测试用例,使得程序的每条可能执行到的路径都至少经过一次(如果程序中有环路,则要求每条环路路径至少经过一次)【包含判定覆盖,但不包含条件覆盖】

调试
调试方法:试探法、回溯法、对分查找法、归纳法、演绎法。

环路复杂度

  • McCabe复杂度(至少需要多少个测试用例)计算公式:V(G)=m-n+2,其中m是有向弧的条数,n是结点数。也可用封闭区域+1来算
  • 对于伪代码可以先转换为程序流程图,对程序流程图可以最终转换为结点图处理,转换时注意将交点的地方标注为新的结点,以最终的结点图带入公式结算其McCabe复杂度。

系统维护

  1. 系统可维护性的评价指标:可理解性、可测试性、可修改性。
  2. 系统维护主要硬件维护、软件维护、数据维护。软件维护包括下面几方面:
    (1)正确性维护:针对真实存在并已经发生的错误进行的维护行为。
    (2)预防性维护:针对真实存在但还未发生的错误进行的维护。为了适应未来软硬件环境变化,主动增加的新功能。
    (3)适应性维护:指使应用软件适应信息技术变化和管理需求变化而进行的修改。企业的外部市场环境和管理需求的不断变化也使得各级管理人员不断提出新的信息需求。
    (4)完善性维护:扩充功能和改善性能而进行的修改。对已有的软件系统增加一些在系统分析和设计阶段中没有规定的功能与性能特征。占比最高
  3. 软件文档管理:分为开发文档、产品文档、管理文档
    软考之软件设计师——软件过程基础知识_第2张图片
    软件质量特性
    软考之软件设计师——软件过程基础知识_第3张图片
    图中的可移植性:包括适应性,易安装性,一致性,易替换性

软件项目管理

  1. 有效的项目管理集中在4P上,人员、产品、过程、项目
  2. 软件项目估算:
  • COCOMO模型:分为基本COCOMO模型(静态单变量模型,对整个软件系统进行估算)、中级COCOMO模型(静态多变量模型,将软件系统模型分为系统和部件两个层次)、详细COCOMO模型(将软件系统分为系统、子系统、模块三部分)
  • COCOMOⅡ:层次结构的估算模型,分为三个阶段:应用组装模型:使用的是对象点。早期设计阶段模型:在需求稳定,建立基本体系结构时使用,使用的时功能点,功能点可以转换为代码行。体系结构阶段模型:在软件的构造过程使用。
  • Putnam模型:动态多变量模型,假设软件开发在整个生产周期工作量有特定的分布。

项目进度管理

  1. 甘特图(Gantt):以日历为基准描述项目任务。能够消晰描述每个任务的开始/结束时间及各任务之间的并行性,也可以动态地反映项目的开发进展情况,但难以反映多个任务之间存在的逻辑关系。
  2. PERT图:是一个有向图,利用项目的网络图和各活动所需时间的估计值(通过加权平均得到的)去计算项目总时间,强调任务之间的先后关系,给出了开始结束时间和完成任务所需时间,但不能反映任务之间的并行性,以及项目的当前进展情况,虚箭头表示两个任务存在制约或依赖关系。
  3. 关键路径法是图中源点至汇点的最长路径,关键路径的时间称之为项目工期,也表述为项目完成所需的最少时间。
  4. 总时差:在不延误总工期的前提下,该活动的机动时间。一般在图中,以最晚结束时间减去最早结束时间求取,或以最晚开始时间减去最早开始时间求取。
  5. 对于网络图我们一般采用关键路径分析法处理,关键路径法是利用进度模型时使用的一种进度网络分析技术。沿着项目进度网络路线进行正向与反向分析,从而计算出所有计划活动理论上的最早开始与完成日期、最迟开始与完成日期,不考虑任何资源限制。
  6. 松弛度:不影响整个工期的前提下,完成该任务有多少机动余地,EF-LF
  7. 单代号网络图:结点表示活动,箭线表示活动与活动间的依赖关系。
    软考之软件设计师——软件过程基础知识_第4张图片
  8. 双代号网络图:结点表示里程碑,箭线表示活动。
    软考之软件设计师——软件过程基础知识_第5张图片
    风险
    1、风险的特性:具有不确定性,可能会造成损失。
    2、风险的类别:项目风险涉及到各种形式的预算、进度、人员、资源以及客户相关的问题,并且可能导致项目损失。技术风险涉及到技术相关的可能会导致项目损失的问题。商业风险与市场因素相关。社会风险涉及到政策、法规等因素。
    3、风险暴露又称风险曝光度,测量的是资产的整个安全性风险,它将表示实际损失的可能性与表示大量可能损失的资讯结合到单一数字评估中。在形式最简单的定量性风险分析中,风险曝光度可透过将风险可能性及影响相乘算出。风险曝光度(RiskExposure)=错误出现率(风险出现率)X错误造成损失(风险损失)。
    4、风险控制:风险避免、风险监控、RMMM计划(将所有风险分析工作文档化)

你可能感兴趣的:(软件设计师备考知识点)