【软考】 9 软件工程

概述

  • 软件生存周期:可行性分析与项目开发计划、需求分析、概要设计(选择系统解决方案,规划子系统)、详细设计(设计子系统内部具体实现)、编码、测试、维护

软件过程

能力成熟度模型CMM

  • 初始级:杂乱无章
  • 可重复级:基本的项目管理过程和实践来跟踪,有必要的过程准则
  • 已定义级:文档化、标准化、标准软件过程
  • 已管理级:指定了详细度量标准
  • 优化级:加强了定量分析,使用反馈持续改进

能力成熟度模型CMMI

将CMM模型结合起来

  • 阶段式模型:类似于CMM
    • 初始级:过程不可预测缺乏控制
    • 以管理的:过程为项目服务
    • 已定义的:过程为组织服务
    • 定量管理的:过程已度量和控制
    • 优化的:集中于过程改进
  • 连续式模型:关注每个过程域的能力,一个组织对不同过程域可以达到的不同等级

统一过程UP

一种开发模型
特点:

  • 用例和风险驱动
  • 以架构为中心
  • 迭代并且增量

阶段:

  • 起始:项目的初始活动,如确认需求和风险评估等
  • 精化:需求分析和架构设计
  • 构建:系统构建、产生实现模型
  • 移交:软件已交方面的工作,产生软件增量,beta测试等
    UP的每一次迭代都是一次完整的软件开发过程

软件过程模型

  • 瀑布模型:结构化方法,开发如瀑布一般一步一走下去直到完成
    • 只适用于需求明确或二次开发(需求稳定)
  • V模型:瀑布模型的变体,增加了很多轮测试,贯穿于软件开发的各个阶段
  • 演化模型
    • 原型:快速原型开发,与瀑布模型相反,针对需求不明确的情况,快速构造功能模型,及时修改,迭代
    • 螺旋模型:多种模型的混合,需求不明确+风险分析
      • 步骤:制定计划、风险分析、实施工程、用户评估
  • 增量模型:先开发核心模块,确认后在开发次模块
    • 不利于模块划分,难点在于如何划分为多个增量,每个增量版本都是独立可操作的产品,而原型一般只是为了演示
  • 喷泉模型:以用户需求为动力,以对象作为驱动,适合面向对象,使开发过程可迭代,无间隙
  • 基于构件的开发模型CBSD:利用预先包装的构件来构造系统,增强复用性,构件库可复用
  • 形式化方法模型:建立在严格数学基础上的开发方法,生成计算机软件形式化的数学规格说明

软件开发方法

  • 结构化方法:流程固定,需求明确自顶向下,逐层分解
    • 变换流型、事务流型
    • 设计:体系结构设计、数据设计、接口设计、过程设计
  • Jackson方法:面向数据结构的开发方法,适合于小项目
  • 原型方法:适用于需求不明确的开发
  • 面向对象方法:强调复用性,构建全面合理的模型,供不同项目使用,方便修改
  • 敏捷开发:针对中小型项目,去掉了不必要的会议和文档
    • 指代一组模型:自适应开发、水晶方法、特征驱动开发、SCRUM、极限编程
    • 结对编程:一个程序员开发,另一个程序员在一旁观察审查代码,共同负责
    • 自适应开发:强调适应性
    • 水晶方法:每一个项目都需要一套不同的策略
    • 特性驱动开发:简化、使用、易于被开发团队接手,适用于需求经常变动的项目
    • 极限编程XP:核心是沟通、简明、反馈和勇气,计划赶不上变化,测试先行
    • 并列争球法SCRUM:迭代的增量化过程,把每段时间一次的迭代称为一个冲刺,按需求的优先级别来实现产品,多个自组织和自治的小组并行迭代实现产品

软件开发环境

  • 软件工具集
  • 环境集成机制
  • 开发支持环境
    • 环境信息库
    • 过程控制和消息服务
    • 用户界面规范

软件项目管理

有效的项目管理集中在4P上:人员、产品、过程、项目
软件项目估算方法:成本估算方法

  • 自顶向下估算(类比估算法):确定一个总金额,再向下分摊到每一个功能点
  • 自底向上估算:从底层功能点开始估算成本
  • 差别估算:与以前项目比较
  • 专家估算:聘请专家以其经验对项目整体估算

COCOMO模型:常见软件规模估算方法,以代码行估量工作量

  • 基本:用代码行计算工作量
  • 中级:增加了产品、硬件、人员、项目等方面的影响
  • 详细:增加软件工程的每一步骤(分析、设计等)的影响

COCOMOII模型:包括三个阶段性模型:应用组装模型(前期)、早期设计阶段模型(需求已经稳定并且基本的软件体系结构已经建立)、体系结构阶段模型(软件的构造过程中使用)

Putnam估算模型:动态多变量,假设软件开发的整个生存周期中工作量有特定的分布

进度管理

基本原则:划分、相互依赖、时间分配、工作量确认、确定责任、明确输出结果、确定里程碑

  • Gantt图:横道图,横轴时间纵轴活动,以时间顺序表示活动,能反映活动间的并行关系,无法反应依赖关系,难以清晰确定关键人物和关键路径
  • PERT图:类似于前驱图,AOE,是有向图,反应活动间的依赖关系,有向边上标注活动运行的时间,无法反应并行关系
    • 最早开始时间ES:取所有前驱活动最早完成时间EF的最大值
    • 最早完成时间EF:最早开始时间ES + 活动本身时间DU
    • 关键路径
    • 最晚完成LF:后续活动最晚开始时间LS的最小值
    • 最晚开始时间LS:最晚完成LF - 活动本身时间DU
    • 松弛时间:最晚开始时间 - 最早开始时间
    • 先从头至尾计算活动的最早开始时间和最早完成时间,在从尾至头计算最晚开始时间
    • 简便方法:FG的松弛时间为关键路径 - 包含FG的最长段的路径

软件项目的组织

  • 项目型:项目经理绝对领导
  • 职能型:部门领导为主
  • 矩阵型:二者结合,权力不同

程序设计小组的组织方式

  • 主程序员小组:主程序员全权负责,后援工程师必要时能替代主程序员,适合大规模项目
  • 民主制小组:无主程序员,全员投票,适合小项目,新技术,确定性小
  • 层次是小组:两个层次,一名组长 - 若干高级程序员 - 若干程序员

软件质量管理

ISO/IEC9126软件质量模型:质量特性和子特性

McCall质量模型

软件质量保证

软件容错技术

软件配置管理

基线 - 里程碑,每次修改都得在基线之后

风险管理

软件度量

外部属性、内部属性
McCabe度量法:环路复杂度

  • 有向图中有向边数为m,节点数为n,则环路复杂度为m-n+2(边-点+2)(只有入度没有出度的线不算)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值