赞
踩
考试题型:选择题(20),名词解释(12),简答题(30),综合题(38)
注:以下资料来自各种渠道进行筛选整理的!!!
设计质量
在软件开发中,设计质量包括设计满足需求模型规定的功能和特性的程度。
符合质量
符合质量关注的是实现遵从设计的程度以及所得到得系统满足需求和性能目标的程度。
用户满意度 = 合格的产品 + 好的质量 + 按预算和进度安排交付
软件质量定义:
(1) 在一定程度上应用有效的软件过程;
(2) 创造有用的产品;
(3) 为生产者和使用者提供明显的价值。
质量因素:
运行:
修改:
转移:
软件质量困境的论述:
如果生产一个存在严重质量问题的软件系统,你将受到损失,因为没有人想去购买。另一方面,如果你花费无限的时间、极大的工作量和高额的资金来开发一个绝对完美的软件,那么完成该软件将花费很长的时间,生产成本是极其高昂的,以至于破产。要么没人购买,要么几乎耗尽所有资源、错过市场机会
质量成本包括追求质量过程中或在履行质量有关的活动中引起的费用以及质量不佳引起的费用等。
质量成本可分为:预防成本、评估成本、失效成本
软件质量保证 (SQA)包括:
(1) SQA过程;
(2) 具体的质量保证和质量控制任务 (包括技术评审和多层次测试策略);
(3) 有效的软件工程实践 (方法和工具);
(4) 对所有软件工作产品及其变更的控制;
(5) 保证符合软件开发标准的规程 (当适用时);
(6) 测量和报告机制。
软件质量保证:就是为了保证软件高质量而必需的“有计划的、系统化的行动模式”
可靠性的简单测量
定义三者之间的关系:MTBF = MTTF + MTTR
失效率(Failures-In-Time, FIT):一个部件每10亿机时发生多少次失效的统计测量。因此,1FIT相当于每10亿机时发生一次失效。
可用性:
软件可用性是指在某个给定时间点上程序能够按照需求执行的概率。其定义为:可用性 = MTTF / (MTTF + MTTR) ×100%
可用性测量在某种程度上对MTTR较为敏感,MTTR是对软件可维护性的间接测量。
软件安全:
主要用来识别和评估可能对软件产生负面影响并促使整个系统失效的潜在灾难。
软件可靠性和软件安全的区别:
软件可靠性使用统计分析的方法来确定软件失效发生的可能性,而失效的发生未必导致灾难或灾祸。
软件安全则考察失效导致灾难发生的条件。
验证 (verification):确保软件正确实现特定功能的一系列活动;(对的)
确认 (validation):确保开发的软件可追溯到用户需求的一系列活动,某种程度上是评价软件产品的有用或有效性。(有根据的)
独立测试组 (Independent Test Group,ITG)
为了避免开发人员进行测试所引发的固有问题;
只有在软件体系结构完成后,独立测试组才开始介入。
什么是单元测试 (Unit Testing)?
指对软件中的最小可测试单元进行检查和验证。
单元:一般应根据实际情况判定其具体含义,如,C语言中,单元指1个函数;java中,单元指1个类;图形化软件中也可以是1个窗口、1个菜单等。
单元就是认为规定的最小被测试的模块。
单元测试主要对模块的五个基本特性进行评价
单元测试的特点
什么是测试用例?
是为某个特殊目标而编制的一组测试输入、执行条件以及预期结果,以便测试某个程序路径是否满足某个特定需求。
单元测试的环境
构件不是独立程序,必须为每个测试单元开发驱动程序和桩程序。
驱动程序:“主程序”,接收测试用例数据,将这些数据传递给待测试构件;
桩程序:替换那些从属于待测试构件的构件。
进行单元测试
什么是集成测试 (Integration Testing)?
单元测试的下一个阶段,指将通过测试的单元模块组装成系统或子系统,再进行测试。
集成测试的内容:
集成测试的方式
示例:
程序结构
一步到位集成的示意图
自顶向下测试(广度优先)(一次增加一层)
自顶向下测试(深度优先)(一次增加一条分支)
自底向上测试
三明治集成测试(先选一层为中间层,在这层下面的使用自底向上,在这层上面的使用自顶向下,例如我们选择第2层做为中间层)
三明治集成测试修正版(在三明治的基础上对中间层进行独立测试)
回归测试
在程序有修改的情况下,保证原有功能正常的一种测试策略。
重新执行已进行测试的某个子集,以确保变更没有传播不期望的副作用,是减少“副作用”的重要方法:这种方式采取自顶向下的方式测试被修改的模块及其子模块;将这一部分视为子系统,再自底向上测试。
每次对软件做重要变更时(包括:新构件的集成、删除、修改),要进行回归测试。
冒烟测试(烟幕测试)
冒烟测试是一种常用的集成测试方法,被设计为一种时间关键的项目步进机制,允许软件小组经常性地评估其软件项目。
冒烟测试包括以下活动:
当应用于复杂的、时间关键的软件工程项目时,冒烟测试提供了下列好处:
面向对象软件的类测试等同于传统软件的单元测试。
面向对象系统的集成测试有两种不同的策略:
确认测试始于集成测试的结束,那时已测试完单个构件,软件已组装成完整的软件包,且接口错误已被发现和改正。
在进行确认测试或系统级测试时,传统软件、面向对象软件及WebApp之间的差别已经消失。
α测试
α测试是由有代表性的最终用户在开发者的场所进行。软件在自然的环境下使用,开发者站在用户的后面观看,并记录错误和使用问题。α测试在受控的环境下进行。
β测试
β测试在一个或多个最终用户场所进行。与α测试不同,开发者通常不在场,因此, β测试是在不为开发者控制的环境下软件的“现场”应用。最终用户记录测试过程中遇见的所有问题,并定期地报告给开发者。
β测试的一种变体称为客户验收测试,软件开发和QA人员也应该参加,有时是按照合同交付给客户时进行的。客户执行一系列的特定测试,试图在从开发者那里接收软件之前发现错误。
在某些情况下(例如,大公司或政府系统),验收测试可能是非常正式的,可能会测试很多天,甚至好几个星期。
系统测试实际上是对整个基于计算机的系统进行一系列不同考验的测试。虽然每个测试都有不同的目的,但所有测试都是为了验证系统成分已正确地集成在一起且完成了指派的功能
一些典型的系统测试包括:
恢复测试
恢复测试通过各种方式强制让系统发生故障,并验证其能适当恢复:
安全测试
安全测试验证建立在系统内的保护机制是否能够实际保护系统不受非法入侵。引用Beizer的话来说:“系统的安全必须经受住正面的攻击,但是也必须能够经受住侧面和背后的攻击。”
在安全测试中,测试者扮演试图攻击系统角色,做什么都可以:
压力测试
压力测试目的是在性能可以接受的前提下,测试系统可以支持的最大负载。
压力测试要求以非正常的数量、频率或容量的方式执行系统:
压力测试的一个变体称为敏感性测试。在一些情况下(最常见的是在数学算法中),包含在有效数据界限之内的一小部分数据可能会引起极端处理情况,甚至是错误处理或性能的急剧下降:
敏感性测试试图在有效输入类中发现可能会引发系统不稳定或者错误处理的数据组合。
性能测试
性能测试是在不同负载下(负载一定时),通过一些系统参数(如反应时间等)验证系统性能指标。通过监测系统,测试人员可以发现导致效率降低和系统故障的情形。
部署测试
在很多情况下,软件必须在多种平台及操作系统环境中运行。有时也将部署测试称为配置测试,是在软件将要运行的每一种环境中测试软件。另外,部署测试检查客户将要使用的所有安装程序,并检查用于向最终用户介绍软件的所有文档。
当测试用例发现错误时,调试是使错误消除的过程。调试并不是测试,但是发生在测试之后。
对测试结果进行评估,而且期望的表现与实际表现不一致时,调试过程就开始了。调试试图找到隐藏在症状背后的原因,从而使错误得到修正
软件可测试性:计算机程序能够被测试的容易程度。受以下方面影响:
影响软件可测性的两个因素:
好的测试具有的属性
白盒测试
把测试对象看做一个透明盒子,利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对目标逻辑路径进行测试——也称为玻璃盒测试、结构测试或逻辑驱动测试。
在测试早期进行。
它是在程序控制流图的基础上,分析控制构造的环路复杂性,导出基本可执行路径集合。
设计出的测试用例要保证在测试中,程序的每一个可执行语句至少要执行一次。
示例:
该图的独立路径集合为:
路径1:1-2-3-4-5-6-7
路径2:1-2-3-4-5-7
路径3:1-2-3-4-6-7
路径4:1-2-4-6-7
路径5:1-4-6-7
环形复杂度计算的三种方法:
独立路径数量 <= 环形复杂度V(G)
语句覆盖
保证每个语句至少执行一次。
分支覆盖
保证每个分支至少执行一次。
条件覆盖
保证每个条件的真假至少执行一次。(当没有复合条件【 例如:a=0 && b>1】时,条件覆盖和分支覆盖等价)
分支/条件覆盖
保证每个条件的真假至少执行一次的基础上,再保证每个分支至少执行一次。(因为单单条件覆盖,有可能会漏掉某些分支没有执行)
路径覆盖
保证待测程序的每条独立路径至少执行一次。
数据流测试
数据定义点:数据被赋值的点
数据使用点:数据被使用的点
数据使用:计算性使用(C-USE)和判定性使用(P-USE)
方法:找出数据所有的定义点和数据使用点,根据定义使用对设计测试用例
示例:
黑盒测试
把测试对象看做一个黑盒子:测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明。又叫做功能测试、行为测试。
在测试后期进行,作为发现其他类型错误的辅助方法。
等价类的划分有两种不同的情况:
在设计测试用例时,要同时考虑有效等价类和无效等价类的设计。
等价类划分原则
边界值分析:
多数错误出现在输入域的边界处,而不是在 “中间”;
指导原则:
示例:
划分测试的目的是减小测试特定类所需的测试用例数量。可以采用以下划分方法:
类间测试用例设计
当开始集成面向对象系统时,测试用例的设计变得更为复杂。在这个阶段必须开始类间协作的测试。与单个类的测试相似,类协作测试可运用以下方法:
对下面的程序给出流图,以及基本路径、语句测试、分支测试、条件测试用例;标记a的所有定义点、使用点以及可能的定义使用关系,并给出测试用例
解:
软件的安全性提供了使软件系统保护资产免于受到攻击的机制。
软件的安全性需求是由以下两方面确定的:
安全性保证是为了向最终用户和其他利益相关者表明确已开发出一个安全产品,从而增强他们的信心。
威胁建模
威胁建模是一种安全性分析方法,可用于识别那些最有可能引发基于软件系统的破坏的威胁。
威胁建模是在项目的初期阶段利用需求模型完成。
微软建议的威胁建模的生成步骤如下:
软件配置管理(SCM)协调软件开发,使混乱降到最小的技术,也叫变更管理,是贯穿于整个软件过程的普适性活动。
软件配置管理用于:
软件支持和软件配置管理的区别:
软件过程的输出信息可以分成3个主要类别:
(1) 计算机程序 (源代码和可执行程序)
(2) 描述计算机程序的文档 (针对不同软件开发人员和客户)
(3) 数据或内容 (包含在程序内部和在程序外部)
在软件过程中产生的所有信息项总称为软件配置,软件配置是软件的具体形态在某一时刻的瞬时影像。
变更的起因是什么?
4种基本的变更源:
软件维护(也称软件支持)的类型有三种:
实践表明,在几种维护活动中,完善性维护所占的比重最大。即大部分维护工作是改变和加强软件,而不是纠错。
典型的CM(配置管理)有关人员包括:负责软件小组的项目经理、负责CM规程和方针的配置管理员、负责开发和维护软件产品的软件工程师以及使用软件产品的客户。
基线定义:
已经通过正式评审和批准的规格说明或产品,它可以作为进一步开发的基础,并且只有通过正式的变更控制规程才能修改它。
基线是软件开发中的里程碑,能够帮助我们在不严重阻碍合理变更的条件下控制变更。
在软件配置项成为基线之前,可以较快地且非正规地进行变更。然而,一旦成为基线,虽然可以进行变更,但是必须应用特定的、正式的规程来评估和验证每次变更。
软件配置项
缩写为SCI,在软件工程过程中创建的信息。在现实中,将SCI组织成配置对象,这些配置对象具有自己的名字,并且按类别存储在项目数据库中。
一个配置对象具有一个名称和多个属性,并通过关系来表示与其他配置对象的关联。
单向箭头(A->B)表示组合关系,即B是A的组成部分。
双向箭头说明对象之间存在内在联系,如果某个对象发生变更,软件工程师通过查看内在联系能够确定哪些对象可能受到影响。
SCM中心存储库
SCM中心存储库是一组机制和数据结构,它使软件团队可以有效地管理变更。
作为软件工程团队的中心存储库,应该具备以下四点:
中心存储库内容
版本控制可以用来管理在软件过程中所创建的配置对象的不同版本。
版本:某个特定系统的一个配置。就是一个系统实例,在某种程度上区别于其他系统实例
发布:一个改进了的系统,用于替代原系统,分发给客户的版本。
一个系统的版本要比发布版本多得多,因为一个系统的内部版本是为内部开发或测试而创建的,有些根本不会发布给客户。
软件项目管理的“4个P”
人员(People)、产品(Product)、过程(Process)、项目(Project)。
人员:
是整个项目成功最重要的因素;
每个组织都需要不断地提高他们的能力来吸引、发展、激励、组织和留住那些为实现其战略业务目标所需的劳动力;
人员能力成熟度模型 (People-CMM):针对软件人员定义了一些关键实践域:人员配备、沟通与协调、工作环境、业绩管理、培训、报酬、能力素质分析与开发、个人事业发展、工作组发展、团队精神或企业文化培养等。
参与软件过程的利益相关者可以分为以下5类:
领导能力的MOI模型:
具有实战能力的项目经理应该具有的4种品质:
团队结构取决于组织的管理风格、团队里的人员数目与技能水平,以及问题的总体难易程度。
软件工程团队的四种组织范型:
5个培育潜在含毒团队的环境:
产品——项目团队将要开发的软件:
确定产品的目标只是识别出产品的总体目标 (从利益相关者的角度),而不用考虑如何实现这些目标。
确定产品的范围是要标识出产品的主要数据、功能和行为特性,更为重要的是,应以量化的方式界定这些特性。
了解产品的目标和范围之后,就要开始考虑备选的解决方案。管理者和参与开发的人员应根据给定的约束条件选择“最好”的方案,而约束条件包括产品交付期限、预算限制、可用人员、技术接口以及其他各种因素。
软件范围
软件项目范围在管理层和技术层都必须是无歧义的和可理解的。
过程:
为完成工作所要求的框架活动和软件工程任务;
软件过程管理中,需要定义整个软件开发经历的活动、所采用的技术方法、每个阶段的验收标准等。
项目:
实现产品的所有工作。
90-90规则
系统前面90%的任务会花费所分配总工作量和时间的90%,系统最后10%的任务也会花费所分配总工作量和时间的90%。
如何避免90-90问题?
W5HH原则
关键实践包括:
对软件进行测量的理由:
项目度量使得软件项目管理者能够:
不同类型的过程数据可分为“私有的和公有的”的使用。
统计软件过程改进 (statistical software process improvement,SSPI)
随着一个组织更加得心应手地收集和使用过程度量,更精确的统计软件过程改进方法将取代简单的指标获取方式。
统计软件过程改进 (statistical software process improvement,SSPI) 使用软件失效分析方法,来收集应用软件、系统或产品开发及使用过程中所遇到的所有错误及缺陷信息。
可以用以下指标进行生产率度量:
软件测量
测量在现实世界中可分为两类:直接测量和间接测量。
软件度量也可以这样分类:
软件度量范围分为产品度量、项目度量和过程度量:
产品度量对个人来讲是私有的,将产品度量合并起来生成项目度量。
项目度量对软件团队来说是公有的,再将项目度量联合起来可以得到整个软件组织公有的过程度量。
为了产生可以与其它项目相比较的度量,可以选择代码行作为规范化值。根据表中所包含的基本数据,能够为每个项目产生一组简单的面向规模度量:
除此之外,还能够计算出其它有意义的度量:
示例:
面向功能度量是由Albrecht首先提出来的,他建议使用功能点 (Function Point, FP)的测量:
计算功能点公式:FP = 总计数 × ( 0.65+ 0.01×SUM (Fi))
测量质量的指标
缺陷排除效率(DRE)是对质量保证及控制活动中滤除缺陷能力的一个测量,这些活动贯穿于所有过程框架活动。
当把项目作为一个整体来考虑时,DRE按如下方式定义:DRE = E /(E + D)。其中: E = 软件交付之前所发现的错误数,D = 软件交付之后所发现的缺陷数
DRE也能够用于在项目中评估一个团队在错误传递到下一个框架活动或软件工程任务之前发现这些错误的能力。DREi = Ei / ( Ei + Ei+1 )。其中: Ei = 软件工程活动i中所发现的错误数,Ei+1 = 软件工程活动 i+1中所发现的错误数,这些错误起源于软件工程活动i中未能发现的错误。
软件项目管理从项目策划开始,估算是项目策划的第一项活动,是其他项目策划活动的基础。
项目策划的第二个任务是对完成软件开发工作所需的资源进行估算。有3类主要的软件工程资源:人员、可复用的软件构件以及开发环境。
在项目计划中,规模是指软件项目的可量化结果:
计算三点估算(综合不同的估计结果):
先确定规模的乐观值 (Sopt)、可能值 (Sm)和悲观值 (Spess),再将它们结合起来 (加权平均)
期望值 S = ( Sopt + 4Sm + Spess ) / 6
假定实际的规模结果落在乐观值与悲观值范围之外的概率很小
示例:
回顾历史数据,此类系统的平均生产率 = 620 LOC/pm.
一个劳动力每月成本 = $ 8000, 则每行代码成本 = $8000/ 620 = $13 ;
根据LOC估算及历史生产率数据,该项目总成本估算值 = 33 200 * 13 = $431,000 ,工作量估算值是 = 33 200 / 620 = 54人月。
示例:
总计Fp为320,FP的估算值:FPestimated = 总计 * [0.65 + 0.01 × Σ(Fi)] = 320 * 1.17 = 375
假设此类系统的平均生产率 = 6.5 FP/pm,劳动力价格 = $8000 per month, 每个FP的成本约为 $8000 / 6.5 = $ 1230;
根据FP估算和历史生产率数据,项目总成本估算为$ 1230 *375 = $461,000 ,项目工作量估算为58人月= (375 / 6.5) 或 (461,000 / 8,000)。
示例:
使用COCOMO II模型来估算构造一个困难的ATM软件所需的工作量,它产生12个屏幕、10个报表,将需要大约80个软件构件。假定该软件具有困难复杂度和平均开发者/环境成熟度。要求使用基于对象点的应用组装模型计算工作量。
对象点 = 12 × 3 + 10 × 8 + 80 × 10 = 916
工作量 = 对象点 / 生产率 = 916 / 13 = 71 /人月
当采用基于构件的开发或一般的软件复用时,还要估算复用的百分比,并调整对象点数:
新对象点 = 对象点 * [(100-复用的百分比) / 100
案例
假定你负责的软件团队受命开发一个医疗诊断仪器的实时控制器,该控制器要在9个月之内推向市场。在你进行了仔细的估算和风险分析之后得到的结论是:在现有人员条件下,需要14个月的时间才能完成这一软件。你下一步该怎么办呢?闯进客户的办公室并要求修改交付日期?
项目延期的解决步骤
项目进度安排
软件项目进度安排 (Software Project Scheduling)是一种活动,通过将工作量分配给特定的软件工程任务。
进度是随时间而不断演化的:
在项目计划早期,建立的是一张宏观进度表,该进度表标识了所有主要的过程框架活动。
随着项目的进展,宏观进度表中的每个条目都会被细化成详细的进度表,这样就标识了特定的 (完成一个活动所必须实现的)软件活动和任务,同时也进行了进度安排。
软件项目进度安排的基本指导原则:
人员与工作量之间的关系
软件神话:即使进度拖后,我们也总是可以在项目后期增加更多的程序员来跟上进度。
项目后期增加人手经常会对项目产生破坏性影响,使进度进一步拖延,原因如下:
项目进度具有弹性:
PNG曲线
工作量分配: 40%(前期的分析和设计) + 20%(编码) + 40%(后期测试)
这种工作量分配方法只能作为指导原则。各个项目的特点决定了其工作量如何分配:
挣值分析
挣值分析是在软件小组按项目进度表工作时,定量分析项目进展的技术:
挣值系统为每个(软件项目)任务提供通用的值尺度,可以估算完成整个项目所需要的总小时数。并且可以根据各个任务所估算的小时数占总小时数的百分比来确定该任务的挣值。
更简单地说,挣值是对项目进展的测量。它使得计划者能够不依赖于感觉,采用定量的分析方法来评估一个项目的“完成百分比”。
挣值确定的步骤:
进度情况评估:
预算准确性评估:
示例1:
假设你是一个软件项目管理者,授命为一个小型软件项目进行挣值统计。这个项目共计划了56个工作任务,估计需要582人日才能完成。目前有12个工作任务已经完成,但是,按照项目进度,现在应该完成15个任务,下面给出相关进度安排数据(单位:人日),请你做出挣值分析。
任务 | 计划工作量 | 实际工作量 | 任务 | 计划工作量 | 实际工作量 |
---|---|---|---|---|---|
1 | 12.0 | 12.5 | 9 | 12.0 | 10.0 |
2 | 15.0 | 11.0 | 10 | 6.0 | 6.5 |
3 | 13.0 | 17.0 | 11 | 5.0 | 4.0 |
4 | 8.0 | 9.5 | 12 | 14.0 | 14.5 |
5 | 9.5 | 9.0 | 13 | 16.0 | - |
6 | 18.0 | 19.0 | 14 | 6.0 | - |
7 | 10.0 | 10.0 | 15 | 8.0 | - |
8 | 4.0 | 4.5 |
计算该项目的进度执行指标SPI、进度表偏差SV、预定完成百分比、完成百分比、成本执行指标CPI、成本偏差CV。
解:
示例2 :
计算4.1前的进度执行指标SPI、进度表偏差SV、预定完成百分比、完成百分比、成本执行指标CPI、成本偏差CV。
解:
示例3:
解:
选择题
软件风险
具有负面后果、人们不希望发生的事件,包含两个特性:
软件风险的类型:
另一种风险分类方法:
风险管理的4个主要作用:
风险显露度 (risk exposure, RE):RE = P * C
其中P是风险发生的概率,C是风险发生时带来的项目成本;
示例
假设软件团队按如下方式定义了项目风险:
风险细化
在项目计划的早期,风险很可能只是一个大概的描述。随着时间的推移,对项目和风险的了解加深,可以将风险精化为一组更详细的风险,在某种程度上,这些风险更易于缓解、监测和管理。
风险求精的实现方法之一是按条件-转化-结果(conditiontransition-consequence, CTC)格式来表示,即:给定<条件>,则(可能)将导致:<结果>。
风险回避:通过建立一个风险缓解计划来回避风险。
风险监测:监测那些可以表明风险正在变高或变低的因素。
风险管理及应急计划:风险发生时的应对措施,是以缓解工作已经失败、而且风险已经发生为先决条件。
风险缓解、监测和管理计划RMMM= (Risk Mitigation, Monitoring and Management Plan)计划将所有风险分析工作文档化,项目管理者还可将其作为整个项目计划的一部分:
有些软件团队并不建立正式的RMMM文档,而是将每个风险分别使用风险信息表单 (risk information sheet, RIS)进行文档化。在大多数情况下,RIS采用数据库系统进行维护,这样容易完成创建、信息输入、优先级排序、查找以及其他分析。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。