14、上午题——软件工程(上)上下一共10分左右

目录

CMM与CMMI

瀑布模型

增量模型

演化模型

喷泉模型

​编辑

统一过程(UP)模型

敏捷方法 

软件需求

 系统设计

系统测试

单元测试(模块测试)

集成测试

测试方法

黑盒测试

McCabe度量法

白盒测试 

 语句覆盖

判定覆盖

条件覆盖

判定/条件覆盖

条件组合覆盖

路径覆盖

伪代码+白盒测试+McCabe度量法

系统可维护性评价指标 

软件维护

软件文档

软件维护内容

 软件可靠性、可用性、可维护性

 沟通路径

软件项目估算

Gantt图(甘特图)

PERT图

项目活动图

画项目活动图 


CMM与CMMI

CMM:(能力成熟度模型)

  1. 初始级       英雄式核心人物
  2. 可重复级        建立项目
  3. 已定义级        标准软件工程
  4. 已管理级        产品质量
  5. 优化级           反馈改进

CMMI:(能力成熟度模型集成)

分为两种,阶段式模型和连续式模型

对于阶段式模型

  1. 初始的:        过程不可预测且缺乏控制
  2. 已管理的:     为项目服务
  3. 已定义的:     为组织服务
  4. 定量管理的:    度量和控制
  5. 优化的            过程改进

对于连续式模型

  1. 未完成的:        未执行、未得到
  2. 已执行的:        输入转输出
  3. 已管理的:        共形目标已管理的制度化
  4. 已定义级的:        共形目标已定义制度化
  5. 定量管理的:        共形目标定量管理制度化
  6. 优化的:        改变优化 

瀑布模型

包括需求分析、设计、编码、测试、运行与维护。

由前至后、相互衔接

适用于软件需求很明确的软件项目

V模型:(一般是作为一个干扰选项出现)

增量模型

不断迭代更新,类似于现在的软件更新

可快速构造出可运行产品的好方法

演化模型

演化模型适用于对软件需求缺乏准确认识的情况

演化模型可分为原型模型和螺旋模型

原型模型适用于用户需求不清,需求经常变化的情况,不适合大规模

为了有效地捕获系统需求,应采用原型模型

螺旋模型

 适用于大规模、高风险 ,开发成本不低

喷泉模型

喷泉模型是一种以用户需求为动力,以对象为驱动的模型,适用于面向对象的开发方法

迭代性(开发活动重复多次)、无间隙(没有明显的边界)

 支持软件重用和多项开发活动集成,可以提高开发效率,节约时间;

统一过程(UP)模型

每个迭代中有五个核心工作流

4个技术阶段:

  1. 初始阶段:生命周期目标        项目的初始活动
  2. 精化阶段:生命周期架构        需求分析和架构演进
  3. 构建阶段:初始运作功能        系统构建,实现模型
  4. 移交阶段:产品发布                软件提交工作,产生软件增量

RUP仅做了解即可

 

敏捷方法 

水晶法(Crystal):不同项目不同策略约定和方法论

并列征求法(Scrum):30天冲刺

自适应软件开发(ASD):6个基本原则:使命指导、特征关键点、重做和做同样关键。。。

敏捷统一过程(AUP):

小型发布:尽早交付 

测试先行:先写测试代码再编写程序 

这个考的有点偏吧 

 

软件需求

  1. 功能需求:系统做什么、何时做、如何做
  2. 性能需求:考虑技术性指标
  3. 用户或人的因素:考虑用户类型
  4. 环境需求:考虑环境,包括硬件和软件
  5. 界面需求
  6. 文档需求
  7. 数据需求:考虑数据准确性和精度、数据流量数据需保持的时间
  8. 资源使用需求
  9. 安全保密需求
  10. 可靠性需求
  11. 软件成本消耗与开发进度需求

性能需求是非功能需求 

 

 系统设计

概要设计

划分模块、确定模块的功能、确定模块之间的调用关系、接口 

详细设计是指算法设计、某种图形、表格具体语言等详细步骤 

模块之间的接口设计属于概要设计

系统测试

系统测试是为了 发现错误而执行程序的过程

成功的测试是发现了至今尚未发现的错误的测试

测试的目的是以最小的人力和时间发现潜在的各种错误和缺陷

信息系统测试包括软件测试、硬件测试和网络测试。

硬件测试、网络测试可以根据具体的性能指标进行

信息系统测试时应遵循的原则

  1. 尽早并不断地进行测试
  2. 测试工作不应由原开发软件的人或小组承担
  3. 在设计测试方案时,不仅要确定输入数据,还要确定预期输出
  4. 在设计测试方案时,还要包含一些不合理、失效的输入条件
  5. 在测试程序时,不仅要检验程序是否做了该做的事,还要检验是否做了不该做的事
  6. 严格按计划进行,避免随意性
  7. 妥善保存测试计划、测试用例,作为软件文档的组成部分
  8. 测试例子都是精心设计的,可以为重新测试或追加测试提供方便
  9. 系统测试阶段的测试目标来自于需求分析阶段

白盒测试技术中,路径覆盖法往往能比语句覆盖法发现更多的错误

有效的软件测试实际上分4步:单元测试、集成测试、确认测试和系统测试

单元测试(模块测试)

在模块编写完成且无编译错误时即可进行。

单元测试侧重于模块中的内部处理逻辑和数据结构。

一般用白盒测试法。

可以对多个模块同时进行。

单元测试主要检查模块的以下5个特征:

  1. 模块接口(测试模块的输入参数和形式参数在个数、属性、单位上是否一致;调用其他模块时,所给出的实际参数和所调用的模块形式参数在个数、属性、单位上是否一致;调用标准函数时,所调用的参数在属性、数目和顺序上是否正确;全局变量在各个模块中的定义和用法是否一致;输入是否改变了形式参数;开/关的语句是否正确;规定的I/O格式是否与输入输出语句一致;在使用文件之前是否已经打开了文件或使用后是否已经关闭文件)
  2. 局部数据结构(变量的说明是否合适;是否使用了尚未赋值或尚未初始化的变量;变量初始化或默认值是否正确;变量名是否出错)
  3. 重要的执行路径(计算方面的错误;比较和控制流的错误)
  4. 出错处理
  5. 边界条件

注意分清楚哪些是模块接口的,不要弄混了 

集成测试

  1. 自顶向下集成测试(是一种构造软件体系结构的增量方法)(从抽象到具体)(不需要编写驱动模块)
  2. 自底向上集成测试(从具体到抽象)(不需要编写桩模块)
  3. 回归测试(重新执行已测试过的某些子集,以确保变更没有传播不期望的副作用)
  4. 冒烟测试(常用的集成测试方法,是时间关键项目的决定性机制,让软件团队频繁地对项目进行评估)

回归测试会重新测试之前的 

测试方法

软件测试分为静态测试和动态测试

静态测试是指被测试程序不在机器上运行,采用人工检测和计算机辅助静态分析的手段对程序进行检测

动态测试是指通过运行程序发现错误,在对软件产品进行动态测试时可以采用黑盒测试法和白盒测试法(黑少白多)

测试用例由测试输入数据和与之对应的预期输出结果组成。在设计测试用例时,应当包括合理的输入条件和不合理的输入条件

黑盒测试

黑外白内

黑盒测试也称功能测试,在完全不考虑软件的内部结构和特性的情况下,测试软件的外部特性。

进行黑盒测试主要是为了发现以下几类错误:

  1. 是否有错误的功能或遗漏的功能
  2. 界面是否有误,输入输出是否正确
  3. 是否有数据结构或外部数据库访问错误
  4. 性能是否能够接受
  5. 是否有初始化或终止性错误

常见的黑盒测试技术有等价类划分、边界值分析、错误推测和因果图等

无法获得其源代码表示不知道内部结构,所以应该使用黑盒测试 

C两个输入都不符合条件,所以不是一个合适的测试用例 

McCabe度量法

 计算有向图G的环路复杂公式:有向图中的环路个数=有向弧数-节点数+2

                                                (方法二)闭合区域数+1

对于下面这个题,要注意指向i>0这个菱形框的箭头没有对应的节点,所以要么删除这个箭头,要么添加一个节点

白盒测试 

白盒测试也称结构测试,根据程序的内部结构和逻辑来设计测试用例,对程序的路径和过程进行测试,检查是否满足设计的需要 

白盒测试常用的技术是逻辑覆盖(考察用测试数据运行被测程序时对程序逻辑的覆盖程度)、循环覆盖(执行足够的测试,使循环中每个条件都得到验证)和基本路径测试(程序中的每条可执行语句至少执行一次)

逻辑覆盖6种:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖

白盒覆盖的原则:

  1. 程序模块中的所有独立路径至少执行一次
  2. 所有逻辑判断中,取“真”和取“假”的两种情况至少都能执行一次
  3. 每个循环都应在边界条件和一般条件下各执行一次
  4. 测试程序设计内部数据结构的有效性等

 语句覆盖

语句覆盖是指每条语句至少执行一次,很弱的逻辑覆盖

判定覆盖

每个判定表达式至少获得一次“真”值或“假”值

条件覆盖

使得每一判定语句中每个逻辑条件的各种可能的值至少满足一次

判定/条件覆盖

判定中每个条件的所有可能取值至少出现一次,每个判定本身的判定结果也至少出现一次

条件组合覆盖

每个判定中条件的各种可能值都至少出现一次

路径覆盖

覆盖被测试程序中所有可能的路径

伪代码+白盒测试+McCabe度量法

for循环转流程图

while转流程图 

do-while转流程图

系统可维护性评价指标 

软件维护时生命周期中的最后一个阶段

系统可维护性的评价指标:可理解性、可测试性、可修改性

软件维护

文档是软件可维护性的决定性因素

软件系统的文档可以分为用户文档和系统文档两类

必须在开发阶段保证软件具有可维护的特点,在软件工程的每一个阶段都应考虑并提高软件的可维护性

软件文档

编写高质量文档可以提高软件开发的质量

文档也是软件产品的一部分,没有文档的软件就不能称之为软件

总的来说,软件文档只好不坏,选项中说软件文档不好的就是错的

软件维护内容

系统维护主要包括硬件维护、软件维护和数据维护

软件维护的内容:

  1. 正确性维护:改正错误
  2. 适应性维护:随着需求变化进行的修改
  3. 完善性维护:扩充功能和改善性能进行的修改
  4. 预防性维护:改进应用系统的可靠性和可维护性

 软件可靠性、可用性、可维护性

可靠性、可用性和可维护性是软件的质量属性

可靠性是指在给定条件下无失效运作的概率        MTTF/(1+MTTF)        MTTF指平均无故障时间

可用性是指正确运作的概率        MTBF/(1+MTBF)        MTBF指平均失效间隔时间

可维护性是指完成维护获得的概率        1/(1+MTTR)        MTTR指平均修复时间

 沟通路径

公式就是n*(n-1)/2

软件项目估算

COCOMO估算模型是一种精确的、易于使用的成本估算模型

COCOMO模型按其详细程度分为基本COCOMO模型、中级COCOMO模型和详细COCOMO模型

基本COCOMO模型是一种静态单变量模型

中级COCOMO模型是一种静态多变量模型

详细COCOMO模型分为系统、子系统和模块3个层次

COCOMOII模型也是一种层次结构的估算模型,被分为3个阶段性模型

  1. 应用组装模型:在软件工程的前期阶段使用
  2. 早期设计阶段模型:在需求已经稳定且基本的软件体系结构已经建立时使用
  3. 体系结构阶段模型:在软件的构造过程中使用

在模型层次结构中有3中不同的规模估算选择:对象点、功能点、代码行

应用组装模型使用的是对象点,早期设计阶段模型使用的是功能点,功能点可以转化为代码行

Gantt图(甘特图)

进度安排的常用图形描述方法有Gantt图和项目计划评审技术(PERT)图

PERT图

感觉这个PERT图挺像数据结构里的那个DAG图

正推最早时间取最大,反推最晚时间取最小,松弛时间等于迟-早

项目活动图

和上面的PERT图的做法差不多

画项目活动图 

前驱指向后驱,时间写在箭头线上

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值