赞
踩
本篇包含第五章软件设计师中比较重要的部分,文章中的序号对应《软件设计师教程》中的章节。
目录
5.2.5 基于构件的开发模型 (Component-based Development Model)
早期的软件:主要指采用个体工作方式实现的程序。
第一次软件危机:20世纪60年代中期典型表现有软件质量低下、项目无法如期完成、项目严重超支等因为软件而导致的重大事故时有发生。
软件工程的诞生:1968年在NATO会议上提出对软件危机的解决方法
软件工程的基本要素:方法、工具、过程、环境
软件工程:应用计算机科学,数学及管理科学等原理,以工程化的原则和方法解决软件问题的工程。
目标:确定软件开发目标及其可行性
输出:可行性分析报告
目标:确定软件系统要做什么,以及它的功能、性能、数据和界面等要求来确定系统的逻辑模型。
输出:软件需求说明书
目标:明确软件中的模块、模块的层次结构、模块的调用关系和功能。明确数据库结构/
输出:概要设计说明书
目标:明确模块的控制结构
输出:详细设计说明书
目标:将过程描述转变为程序代码
输出:某种特定语言的源代码
目标:保证软件质量输出
输出:软件测试计划、测试用例软件测试报告
CMM是对软件组织进化阶段的描述。
能力等级 | 特点 |
---|---|
初始级别 | 杂乱无章,有时甚至很混乱,几乎没有明确定义的步骤,项目的成功完全依赖个人的努力和英雄式核心人物的作用。 |
可重复级别 | 建立了基本的项目管理过程和实践来跟踪项目费用、进度和功能特性,有必要的过程准则来重复以前在同类项目中的成功。 |
已定义级 | 管理和工程两方面的软件过程已经文档化、标准化,并综合成整个软件开发组织的标准软件过程。所有项目都采用根据实际情况修改后得到的标准软件过程来开发和维护软件。 |
已管理级 | 制定了软件过程和产品质量的详细度量标准。对软件过程和产品质量都有定量的理解和控制。 |
优化级 | 过程的量化反馈和先进的思想,新技术持续地改进。 |
CMMI:若干过程模型的综合和改进,不只软件,支持多个工程学科和领域的、系统的、一致的过程改进框架。
两种表示方法
阶段式模型成熟度等级模型:
能力等级 | 特点 | 关键区域过程 |
---|---|---|
初始级 | 过程不可预测且缺乏控制 | |
已管理级 | 过程为项目服务 | 需求管理、项目计划、配置管理、项目监督与控制、供应商合司管理、度量和分析、过程和产品质量保证 |
已定义级 | 过程为组织服务 | 需求开发、技术解决方案、产品集成、验证、确认组织级过程焦点、组织级过程定义、组织级培训、集成项目管理、风险管理、集成化的团队、决策分析和解决方案、组织级集成环境 |
定量管理 | 过程已度量和控制集中于 | 组织过程性能、定量项目管理 |
优化级 | 过程改进和优化 | 组织级改革和实施、因果分析和解决方案 |
例题 1.【2022年】以下关于软件维护的叙述中,正确的是( )
A. 工作量相对于软件开发而言要小很多
B. 成本相对于软件开发而言要更低
C. 时间相对于软件开发而言通常更长
D. 只对软件代码进行修改的行为
解析:系统出现问题时,运维的工作量会很大。A错误。可能有好多期运维,成本不一定比软件开发低。B错误。运维是整个软件运行的维护。D错误。选C。
2. 【2009年】软件能力成熟度模型(CMM)的第4级(已管理级)的核心是( )。
A. 建立基本的项目管理和实践来跟踪项目费用、进度和功能特性
B. 组织具有标准软件过程
C. 对软件过程和产品都有定量的理解和控制
D. 先进的新思想和新技术促进过程不断改进
解析:参考上面CMM等级描述表格。选C。
软件过程模拟:软件开发全部过程、活动和任务的结构框架。
经典的生命周期模型,般将软件开发分为:可行性分析(计划)、需求分析、软件设计(概要设计、详细设计)、编码、测试、运行维护几个阶段。以文档作为驱动。
瀑布模型模式:
优点:容易理解,管理成本低,强调开发的阶段性早期计划级需求调查和产品测试,适合于软件需求明确的软件项目的模型。
不足:需求提出到看到成果的周期长,不能演示系统的能力。对项目风险的控制能力弱。
e.g. 乙方接甲方,若甲方改需求,那么乙方工作就会因为再次评审等工作而时间变长,成本相应增加。
左边的线是开发活动,分别代表了需求建模(需求分析)、概要设计、详细设计、编码。
右边的线是测试活动,分别代表了单元测试、集成测试、系统测试与验收测试。
特点如下:
单元测试主要针对编码过程中可能存在的各种错误进行验证。
集成测试主要针对详细设计中可能存在的各种错误进行验证。
系统测试主要针对概要设计,检查系统作为一个整体是否可以有效地运行。
验收测试主要是针对需求建模、需求分析,通常由业务专家或者用户进行,以确认产品能真正符合用户业务上的需要。
V模型用于需求明确和需求变更不频繁的情形,突出测试和开发生命周期各阶段的结合。
融合了瀑布模型的基本成分和原型实现的选代特征
假设可以将需求分段为一系列增量产品,每一增量可以分别开发。
增量之间有优先级,首先要开发核心模块功能,第一个增量是它的核心,而后与用户确认后开发下一个增量,优先级高的增量(服务)最先交付。
特点:由于不是从系统整体角度规划各个模块,每一次增量的模块划分可能没有延续性,因此不利于模块划分。难点在于如何将客户需求划分为多个增量。与原型不同的是增量模型的每一个增量版本都可以作为独立的作品,而原型的构造一般是为了演示。
适用于:用户需求不清,或经常变化;系统规模不大也不太复杂。
目的:快速、低成本地构建模型,迅速开发出让用户可以看得见的系统框架,使对计算机不熟悉地用户根据这个框架提出自己需求和改进意见。
原型模型:第一步交流,然后创建一个快速原型,使项目干系人与未来的用户通过原型进行交互,再经过讨论和分析,弄清楚系统的需求,在原型的基础上开发出用户满意的产品。
原型法认为在很难一下子全面准确地提出用户需求的情况下,原型应当具备的特点如下:
结合了瀑布模型和演化模型结合,强调了风险分析,特别适用于大型、复杂度高风险高的系统。
将开发过程分为几个螺旋周期,具有周期性重复的螺旋线状,每个螺旋周期大致和瀑布模型相符合。每个螺旋周期分为如下4个工作步骤:制定计划、风险分析、实施工程和客户评估。
以用户需求为动力,以对象作为驱动的而模型,适合于面向对象的开发方法。
使开发过程具有迭代性和无间隙性。迭代性:开大活动常常需要重复多次,在迭代过程中不断完善软件系统。
特点
构件:一个完整的、可单独使用的软件包。
利用预先保证的构件来构造应用系统。
构件可以是组织内部开发的构件,也可以是商品化成品软件构件。
特点:增强了复用性,在系统开发过程中会构建一个构件库,供其他系统复用,因此可以提高可靠性,节省时间和成本。
建立在严格数学基础上。
主要活动:生成计算机软件形式化的数学规格说明。
“用例和风险驱动,以架构为中心,选代并且增量”的开发过程,由UML方法和工具支持。
迭代:将整个软件开发项目划分为许多个小的“袖珍项目”,每个“袖珍项目”都包含正常软件项目的所有元素:计划、分析和设计、构造、集成和测试,以及内部和外部发布。
统一过程模型包括4个阶段:初始阶段、精化阶段、构建阶段、移交阶段。
每次迭代产生包括最终系统的部分完成的版本和任何相关的项目文档的基线,通过逐步迭代基线之间相互构建,直到完成最终系统。
每个迭代中有5个核心工作流:
统一过程的典型代表是RUP(Rational UnifiedProcess)。RUP是UP的商业扩展,完全兼容 UP但比 UP 更完整、更详细。
总体目标:通过“尽可能早地、持续地对有价值的软件的交付”使客户满意。通过在软件开发过程中加入灵活性,敏捷方法使用户能够在开发周期的后期增加或改变需求。
以人为核心、迭代、循序渐进的开发方法,强调程序员团队与业务专家之间的紧密协作、面对面沟通(认为比书面文档更有效)、频繁交付新的软件版本、紧凑而自我组织型的团队、能够很好地适应需求变化的代码编写和团队组织方法,也更注重软件开发中人的作用。
敏捷软件开发宣言
敏捷过程的典型方法有很多,每一种方法基于一套原则,这些原则实现了敏捷方法所宣称的理念(敏捷宣言):极限编程(XP)、水晶法(Crystal)、并列争求法(Scrum)、自适应软件开发(ASD)、敏捷统一过程AUP)
轻量级(敏捷)、高效、低风险、柔性、可预测的、科学的软件开发方式。
由价值观、原则、实践和行为4个部分组成,彼此相互关联,并通过行为贯穿于整个生存周期。
4大价值观:沟通、简单性、反馈和勇气。
5个原则:快速反馈、简单性假设、逐步修改、提倡更改和优质工作。
12个最佳实践:
结对编程:一个程序员开发,另一个程序员在一旁观察审查代码,能够有效的提高代码质量共同对代码负责。
自适应开发:强调开发方法的适应性。侧重为软件的重要性提供最根本的基础,并从更高的组织和管理层次来阐述开发方法为什么要具备适应性。
水晶方法:每一个不同的项目都需要一套不同的策略、:约定和方法论
并列争求法SCRUM:迭代的增量化工程。把每段时间(30天)一次的选代成为一个“冲刺”,并按需求的优先级别来实现产品,多个自组织和自治的小组并行地递增实现产品。
类型 | |
---|---|
瀑布 | 结构化放大 |
软件需求:用户对目标软件系统在功能、行为、性能、设计约束等方面的期望。
IEEE定义:软件需求指用户解决问题或达到目标所需要的条件或能力,时系统或系统部件要满足合同标准、规范或其它正式规定文档所需具有的条件或能力,以及反应这些条件或能力的文档说明。
需求来源
可以来自于用户(实际的潜在的)、用户的规约、应用领域的专家、相关的技术标准和法规;
可以来自于原有的系统、原有系统的用户、新系统的潜在用户;
甚至还可以来自于竞争对手的产品。
按照多层次分类,软件需求包括业务需求、用户需求和系统需求。这三者是从目标到具体,从整体到局部,从概念到细节。
业务需求:反映企业或客户对系统高层级的目标要求(高层级需求)。e.g. 产品一天能支撑一千万交易额。
用户需求:描述用户的具体目标,用户想要什么,以及要这些做什么(用户需求)
系统需求:从系统的角度说明软件的需求,包括功能需求、非功能需求、设计约束等
质量功能部署(Quality Function Deployment,QFD):一种将用户要求转化成软件需求的技术。目的是最大限度提升软件工程过程中用户满意度。把用户对产品的需求进行多层次的演绎分析,转化为产品的设计需求、工程部件特征、工艺要求、生产要求,用来指导产品设计并保证产品的质量,是一种以用户为导向的质量管理工具。
按照QDF将软件需求分为三类
例题:某软件公司正在承担开发一个文字处理器的任务。在需求分析阶段,公司的相关人员整理出一些相关的系统需求。其中,”找出文档中的拼写错误并提供一个替换项列表来供选择替换拼错的词“属于(1),“显示提供替换词的对话框以及实现整个文档范围的替换”属于(2),“用户能有效地纠正文档中的拼写错误”属于(3)。(每个选项可以多次使用)
A. 业务需求 B. 用户需求 C. 功能需求 D. 性能需求
解析:
(1)描述用户想要具体实现的需求,技术人员难以直接跟着这条需求做开发。因此是用户需求,选B。
(2)对有文字处理相关经验的人看到此需求知道具体怎么做。因此是功能需求,选C。
(3)更倾向于描述所期望的最终结果,而不是用户期待的具体的功能或操作(没有具体说明如何纠正,怎么算“有效”)。因此是业务需求,选A。
通过应用这些原则,分析人员将能系统地处理问题。检查信息域可以更完整地理解功能,通过模型可以更简洁地交流功能和行为的特征,应用抽象与分解可减少问题的复杂度。
需求工程:是一个不断反复的需求定义、文档记录、需求演进的过程,并最终在验证的基础上冻结需求。
细分为6个阶段:需求获取、需求分析与协商、系统建模、需求规约、需求验证和需求管理。
需求开发:包括需求获取、需求分析、编写规约(系统规格说明书)和需求验证4个阶段。
需求开发的4个阶段:
在需求开发阶段需要确定产品所期望的用户类型、获取每种用户类型的需求、了解实际的用户任务和目标,以及这些任务所支持的业务需求。
同时还包括分析源于用户的信息、对需求进行优先级分类、将所收集的需求编写成为软件规格说明书和需求分析模型,以及对需求进行评审等工作
What:应该搜集什么信息。
Where:从什么地方搜集这些信息。
How:用什么机制或者技术来搜集这些信息。
常见的需求获取方式有:用户访谈、问卷调查、采样、情节串联版、联合需求计划等。
用户访谈:一对一进行访谈,适合于针对有代表性的用户。其形式分为结构化(提前列好访问内容)和非结构化(根据用户反应调整问题)两种。
问卷调查:设计问题、制作成用户调查问卷、下发填写、整理分析。适合用户面广、用户需要灵活时间进行回馈。
采样:采用统计分析技术,从目标总体中选择出样本集的过程。可以是随机抽样,或非随机抽样。适合用于大量用户信息或者数据信息采集分析,最终得出需求的场景。
情节串联板:一系列图片,通过这些图片来讲故事。
联合讨论会:通过联合各个关键用户代表、系统分析师、开发团队代表一起,通过有组织的会议来讨论需求。
需求记录技术:任务卡片、场景说明、用户故事等。
例题 在多种需求获取方式中,(1)方法具有良好的灵活性,有较宽广的应用范围 , 但存在获取需求时信息量大 、记录较为困难 、需要足够的领域知识等问题。(2)方法基于数理统计原理 ,不仅可以用于收集数据 , 还可以用于采集访谈用户或者是采集观察用户并可以减少数据收集偏差。(3)方法通过高度组织的群体会议来分析企业内的问题,并从中获取系统需求。(每个选项可以多次使用)
A.用户访谈 B.问卷调查 C.联合需求计划 D.采样
解析:(1)问卷调查的问题固定,且题量不能太多,所以信息量不大。用户访谈可以深入挖掘,但记录困难,需要用笔记录并慢慢沉淀,且需要足够知识才能谈下去,激发有用信息。选A。(2)采样是基于数据统计,选D。(3)高度组织且内部—>联合需求计划。
需求分析:一个好的需求应该具有无二义性、完整性、一致性、可测试性、确定性、可跟踪性、正确性、必要性等特性。
需求分析人员:杂乱无章、真假难辨的用户要求和期望—>真正的用户需求—>系统需求—>需求规约(需求规格说明书)。
需求分析:逐步细化所有的软件功能,找出系统各元素间的联系,接口特性和设计上的限制,分析他们是否满足需求,剔除不合理部分,增加需要部分。最后综合成系统的解决方案,给出要开发的系统的详细逻辑模型(做什么的模型 )。
需求分析的任务:
绘制系统上下文范围关系图
创建用户界面原型分析需求的可行性
确定需求的优先级
为需求建立模型
创建数据字典
使用QFD(质量功能部署)
常用的分析方法:面向数据流的结构化分析方法(SA)和面向对象的分析方法(OOA)。
结构化分析方法:自顶向下、逐步分解、分析的核心是数据字典。
结构化分析围绕数据字典建立三种模型:数据模型、功能模型、行为模型
数据流图
数据流图:可以分层,根据层级数据流图分为顶层数据流图、中层数据流图和底层数据流图。除顶层数据流图外,其他数据流图从零开始编号。
例题
1. 结构化分析方法中,数据流图中的元素在()中进行定义。
A.加工逻辑 B.实体联系图 C.流程图 D.数据字典
答案:D
2. 下列关于结构化分析方法的数据字典加工逻辑的叙述中,不正确的是()。
A. 对每一个基本加工,应该有一个加工逻辑。
B. 加工逻辑描述输入数据流变换为输出数据的加工规则。
C. 加工逻辑必须实现加工的数据结构和算法。
D. 结构化语言,判定树和判定表可以用来表示加工逻辑。
答案:C
3. 绘制分层数据流图(DFD)时需要注意的问题中,不包括()。
A. 给图中的每个数据流、加工、数据存储和外部实体命名。
B. 图中要表示出控制流。
C.一个加工不适合有过多的数据流。
D.分解尽可能均匀。
答案:B
软件需求规约(也叫需求定义、软件需求规格说明书SRS),是需求分析任务的最终产物,通过建立完整的信息描述详细的功能和行为描述、性能需求和设计约束的说明、合适的验收标准,给出对目标软件的各种需求。
需求规约作为用户和开发者之间的一个协议,在之后的软件工程各阶段发挥重要的作用。
软件需求规约中通常包含以下内容:
需求定义方法
严格定义也称为预先定义,需求的严格定义建立在以下的基础假设之上:所有需求都能够被预先定义。开发人员与用户之间能够准确而清晰地交流。采用图形(或文字)可以充分体现最终系统。
原型方法,迭代的循环型开发方式。需要注意的问题:并非所有的需求都能在系统开发前准确的说明。项目干系人之间通常都存在交流上的困难,原型提供了克服该困难的一个手段。特点:需要实际的、可供用户参与的系统模型。有合适的系统开发环境。反复是完全需要和值得提倡的,需求一旦确定,就应遵从严格的方法。
目的:作为需求开发阶段工作的复查手段,检查需求功能的正确性、完整性和清晰性,是否能够反映用户的意愿。
对需求规约进行评审和测试,包括两个步骤
由于需求的变化往往使系统的设计和实现也跟着改变,所以由需求问题引起系统变更的成本比修改设计或代码错误的成本高得多。因此,评审应指定专门的人员负责,并按规程严格进行。除分析人员之外,还要有用户,开发部门的管理者,软件设计、实现、测试人员参加。
需求验证通过后,要请用户签字确认,作为验收标准之一,此时,这个需求规格说明书就是需求基线,不可以再随意更新,如果需要更改必须走需求变更流程。
在需求验证之后,对遗漏的补充以及对错误理解的更正是不可避免的,因此需要进行需求管理。
需求验证内容:
软件需求管理:是一组用于帮助项目组在项目进展中的任何时候去标识、控制和跟踪需求的活动,对需求工程所有相关活动的规划和控制。换句话说,需求管理就是一种获取、组织并记录系统需求的系统化方案,以及一个使用户与项目团队对不断变更的系统需求达成并保持一致的过程。
在需求管理中,每个需求被赋予唯一的标识符, 一旦标识出需求,就可以为需求建立跟踪表,每个跟踪表标识需求与其他需求或设计文档、代码、测试用例的不同版本间的关系。
需求跟踪的目的:为了建立和维护从用户需求开始到测试之间的一致性与完整性,确保所有的实现是以用户需求为基础,所有的输出符合用户需求,并且全面覆盖了用户需求。
需求跟踪方式:
整个项目过程中,要始终跟踪需求状态即变更情况。
主要关心需求变更中的需求风险管理
带有风险的做法:无足够用户参与、忽略了用户分类、用户需求的不断增加、模棱两可的需求、不必要的特性、过于精简的SRS、不准确的估算。
变更产生的原因:外部环境的变化、需求和设计做的不够完整、新技术的出现、公司机构重组造成业务流程的变化。
变更控制委员会CCB:也称为配置控制委员会,其任务是对建议的配置项变更做出评价、审批,以及监督已经批准变更的事实。
变更控制的内容有:
使项目团队和用户达成共识,定义需求基线(即通过了评审的需求规约)。下次如果需求变更需求,就需要安装流程来一步步进行。
例题 ()是关于需求管理正确的说法
A. 为达到过程能力成熟度模型第二级,组织机构必须具有3个关键过程域。
B.需求的稳定性不属于需求属性。
C.需求变更的管理过程遵循变更分析和成本计算 、问题分析和变更描述 、变更实现的顺序。
D.变更控制委员会对项目中任何基线工作产品的变更都可以做。
答案:D
目的:为系统指定蓝图,在各种技术和实施方法中权衡利弊,精心设计,合理使用各种资源,最终勾画出新系统的详细设计方案。
主要内容:新系统总体结构设计、代码设计、输入设计、输出设计、处理过程设计、数据存储设计、用户界面设计和安全控制设计等。
系统设计方法
基本原理:抽象化;自顶而下,逐步求精;信息隐蔽;模块独立(高内聚、低耦合)
系统设计原则:保持模块的大小适中;尽可能减少调用的深度;多扇入(对模块的上级调用,复用程度高)、少扇出(下级模块逻辑较复杂);单入口、单出口;模块的作用域应该在模块之内;功能应该可预测。
基本任务用某种设计方法,将系统按功能划分成软件模块,确定每个模块的功能和调用关系;确定模块之间的接口,即模块之间传递的信息;评价模块结构的质量。形成模块的模块结构图,即系统结构图。
软件系统的质量及一些整体特性都在软件系统总体结构的设计中决定。
(1)数据结构的设计。逐步细化的方法也适用于数据结构的设计。在需求分析阶段,已经通过数据字典对数据的组成、操作约束和数据之间的关系等方面进行了描述,确定了数据的结构特性,在概要设计阶段要加以细化,详细设计阶段则规定具体的实现细节。在概要设计阶段,宜使用抽象的数据类型。
(2)数据库的设计。数据库的设计是指数据存储文件的设计,主要进行以下几方面设计。
文档主要有概要设计说明书、数据库设计说明书、用户手册以及修订测试计划。
对设计部分是否完整地实现了需求中规定的功能、性能等要求,设计方法的可行性,关键的处理及内外部接口定义的正确性、有效性、各部分之间的一致性等都-一进行评审。
例题
1. 系统设计是根据系统分析的结果,完成系统的构建过程。系统设计的主要内容包括( );系统总体结构设计的主要任务是将系统的功能需求分配给软件模块,确定每个模块的功能和调用关系,形成软件的( )
A.概要设计和详细设计 B.架构设计和对象设计 C.部署设计和用例设计 D.功能设计和模块设计
A.用例图 B.模块结构图 C.系统部署图 D.类图
答案: A,B
以下关于软件系统模块结构设计的叙述中,正确的是()
A.当模块扇出过大时,应把下级模块进一步分解为若干个子模块
B.当模块扇出过小时,应适当增加中间的控制模块
C.模块的扇入大,表示模块的复杂度较高
D.模块的扇入大,表示模块的复用程度高
解析:
一个模块的扇出是指该 模块直接调用的下级模块的个数,扇出大表示模块的复杂度高,需要控制和协调过多的下级模块。扇出过大一般是因为缺乏中间层次,应当适当增加中间层次的控制模块;扇出过小时可以把下级模块进一步分解成若干个子功能模块, 或者合并到它的上级模块中去。一个模块的扇入是指直接调用该模块的上级模块的个数。 扇入大表示模块的复用程度高。
设计良好的软件结构通常顶层扇出比较大,中间扇出比较小,底层模块则有大扇入。
系统转换是指新系统开发完毕,投入运行,取代现有系统的过程。需要考虑多方而的问题,以实现与老系统的交接,有下三种转换计划:
数据转换与迁移:将数据从旧数据库迁移到新数据库中。有三种方法:系统切换前通过工具迁移、系统切换前采用手工录入、系统切换后通过新系统生成。
系统的可维护性可以定义为维护人员理解、改正和改进这个软件的难易程度,可维护性是所有软件都应具有的基本特点,必须在开发阶段和其他软件工程阶段保证软件具有可维护的特点。其评价指标如下:
系统维护主要包括硬件维护、软件维护和数据维护。
软件维护:根据需求变化或硬件环境的变化对应用程序进行部分或全部修改,其包含内容如下:
按评价的时间与信息系统所处的阶段的关系又可从总体上把广义的信息系统评价分为以下三种:
系统评价的指标
软件质量管理:对软件开发过程进行独立的检查活动,主要由质量保证、质量规划和质量控制构成。
软件质量保证:是指为保证软件系统或软件产品充分满足用户要求的质量而进行的有计划、有组织的活动其目的是生产高质量的软件
软件质量模型:SO/EC9126 软件质量模型, McCal软件质量模型
由三个层次组成:第一层为质量特性,第二层是质量子特性,第三层是度量指标。
出题形式:选择。给某一个质量特性的描述,判断此特性/此特性的子特性。
例题
1. 【2019年】在ISO/IEC 9126软件质量模型中,软件质量特性()包含质量子特性安全性
(A)功能性 (B)可靠性 (C)效率 (D)可维护性
答案:A
【2018年】在ISO/IEC 9126软件质量模型中,可靠性质量特性是指在规定的一段时间内和规定的条件下,软件维持在其性能水平有关的能力,其质量子特性不包括()
(A)安全性 (B)成熟性 (C)容错性 (D)易恢复性
答案:A
【2019年】从减少成本和缩短研发周期考虑,要求嵌入式操作系统能运行在不同的微处理器平台上,能针对硬件变化进行结构与功能上的配置。该要求体现了嵌入式操作系统的()
(A)可定制性 (B)实时性 (C) 可靠性 (D)易移植性
答案:A
软件质量保证是软件质量管理的重要组成部分。软件质量保证主要是从软件产品的过程规范性角度来保证软件的品质,主要活动包括:质量审计(包括软件评审)和过程分析。
两个必要
设计质量的评审:对象是在需求分析阶段产生的软件需求规格说明、格说明,以及在软件概要设计阶段产生的软件概要设计说明书等。
程序质量的评审:从开发者的角度进行评审,与开发技术直接相关。它是着眼于软件本身的结构、与运行环境的接口以及变更带来的影响而进行的评审活动。
在一定程度上,
冗余:对于实现系统规定功能来说是多余的资源。
加入冗余,可能使系统的可靠性提高。
4种主要冗余
(1)结构冗余:通过在系统中添加额外的便件或饮件来提高系统的可靠性和容错能力。分为静态、动态和混合冗余三种类型。
(2)信息冗余:通过在数据中添加额外的信息来提高数据的检错和纠错能力。这种冗余通常采用校验码原理,即通过对数据进行某种运算来生成校验码,并将校验码附加到数据中。当数据传输或存储时,如果校验码与数据不匹配,则说明数据可能发生了错误。
校验码原理:校验码原理是指通过对数据进行某种运算来生成校验码,并将校验码附加到数据中。常见的校验码:循环冗余校验码(CRC)、汉明码等。例如,在 USB 接口中,数据传输时会使用 CRC 校验码来检测数据是否发生了错误。
(3)时间冗余:通过额外的时间延迟来提高系统的容错能力。通常采用重复执行的方式,即当系统出现错误时,会重复执行相同的操作,直到操作成功为止。如果重复执行多次仍然失败,则说明系统可能出现了严重的故障。
(4)冗余附加技术:为实现结构、信息和时间冗余技术所需的资源和技术,包括程序、指令、数据、存放和调动它们的空间和通道等。
外部属性:面向管理者和用户,可直接测量,一般为性能指标(成本、效益、开发人员生产率)
内部属性:软件产品或软件过程本身的属性。
软件度量有两种分类方法:
软件复杂度的度量方法:McCabe度量法,又称为环路复杂度,假设有向图中有向边数为m,节点数为n,则此有向图的环路复杂度为m-n+2
注意m和n代表的含义不能混淆,可以用一个最简单的环路来做特殊值记忆此公式,另外,针对一个程序流程图,每一个分支边(连线)就是一条有向边,每一条语句(语句框)就是一个顶点。
还有一种更加简单的算法:封闭空间数量+1
例题:采用McCabe度量法计算下图的环路复杂性为()
1.
解析:8个有入度的带箭头的边,6个节点,因此环路复杂度为8-6+2 = 4;3个封闭空间,复杂度为3 + 1 = 4
2.
解析:13个边,11个节点,复杂度为4;有3个封闭空间,复杂度为3 + 1 = 4。
在进行项目计划之前,应该首先进行项目定义,也就是定义项目范围,其中包括建立产品的目的和范围、可选的解决方案、技术或管理的约束等。
范围管理是确定在项目内要干什么和不干什么, 当然由此界定的项目范围在项目的全生命周期内可能因种种原因而变化, 项目范围管理也要管理项目范围的这种变化。
产品范围和项目范围
项目范围的管理过程:
WBS如下表所示:
进度管理:采用科学的方法,确定进度目标,编制进度计划和资源供应计划,进行进度控制,在与质量、成本目标协调的基础上 ,实现工期目标。
进度管理基本原则:
进度管理过程
活动资源估算方法
COCOMO模型:常见软件规模估算方法。以代码行估算每个程序员工作量、累加的软件成本。按其详细程度可以分为三级:
COCOMOⅡ模型:以软件规模作为成本的主要因素,考虑多个成本驱动因子。包括三个阶段性模型,应用组装模型、早期设计阶段模型和体系结构阶段模型。包含三种不同规模估算选择:对象点、功能点和代码行。
进度安排的常用图形描述方法
Gantt图:体现任务历时和并行性。
项目计划评审技术(PERT):体现任务之间的依赖性。
关键路径法
关键路径:项目的最短工期,从开始到结束时间最长的路径。进度网络图中可能有多条关键路径。因为活动会变化,关键路径也在不断变化中。
关键活动:关键路径上的活动,最早开始时间 = 最晚开始时间。
通常,每个节点的活动会有如下几个时间:
这几个时间通常作为每个节点的组成部分,如图所示
顺推:最早开始ES = 所有前置活动最早完成EF的最大值;最早完成EF=最早开始ES+持续时间
逆推:最晚完成LF=所有后续活动最晚开始的最小值;最晚开始LS=最晚完成LF-持续时间。
总浮动时间:在不延误项目完工时间且不违反进度制约因素的前提下,活动可以从最早开始时间推迟或拖延的时间量,就是该活动的进度灵活性。正常情况下,关键活动的总浮动时间为零。
总浮动时间 = 最迟开始LS - 最早开始ES 或 最迟完成LF-最早完成EF 或 关键路径-非关键路径时长。
自由浮动时间 : 是指在不延误任何今后活动的最早开始时间且不违反进度制约因素的前提下, 活动可以从最早开始时间推迟或拖延的时间量。
自由浮动时间 = 今后活动最早开始时间的最小值-本活动的最早完成时间
例题 进度安排的常用图形描述方法有Gantt图和PERT图。Gantt图不能清晰地描述 (1 );PERT图可以给出哪些任务完成后才能开始另一些任务。下图所示的PERT图中,事件6的最晚开始时刻是(2)。
A.每个任务从何时开始 B.每个任务到何时结束
C.每个任务的进展情况 D.各任务之间的依赖关系
A.0 B.3 C.10 D.11
答案:
(1)D
(2)找出关键路径,求最短工期:2+2+5+6 = 15;确定事件6以后的工作需要多长时间:1+4 = 5。事件6最晚开始时间 = 最短工期-之后需要的时间 = 10。选C。
陈本管理包括:
成本类型:
学习曲线:重复生成产品时,产品的单位会随着产量的扩大呈现规律性递减。估算成本时,也要考虑此因素。
用于整个软件工程过程。
主要目标:标识变更、控制变更、确保变更正确地实现,报告有关变更。
SCM:一组管理整个软件生存周期中各阶段变更的活动,在系统的整个生命周期中维持配置的完整性和可跟踪性
配置项:GB/T11457-2006对配置项的定义为:"为配置管理设计的硬件、软件或二者的集合 ,在配置管理过程中作为一个单个实体来对待”。
以下内容都可以作为配置项进行管理:外部交付的软件产品和数据、指定的内部软件工作产品和数据、指定的用于创建或支持软件产品的支持 工具 供方/供应商提供的软件和客户提供的设备/软件
典型配置项:项目计划书、需求文档 、设计文档 、源代码 、可执行代码 、测试用例、运行软件所需的各种数据, 它们经评审和检查通过后进入配置管理。
每个配置项的主要属性有 : 名称 、标识符 、文件状态 、版本 、作者 、日期等
配置项可以分为基线配置项和非基线配置项两类。基线配置项可能包括所有的设计文档和源程序等;非基线配置项可能包项目的各类计划和报告等。
所有配置项的操作权限应由CMO(配置管理员)严格管理,基本原则是:基线配置项向开发人员开放读取的权限;非基线配置项向PM、CCB及相关人员开放。
配置项的状态可分为"草稿","正式"和"修改"三种。配置项刚建立时 ,其状态为"草稿"。配置项通过评审后 , 其状态变为"正式"。此后若更改配置项则其状态变为"修改"。当配置项修改完毕并重新通过评审时,其状态又变为"正式":
配置项版本号
配置项版本管理:在项目开发过程中,绝大部分的配置项都要经过多次的修改才能最终确定下来。对配置项的任何修改都将产生新的版本。由于我们不能保证新版本一定比旧版本“好”,所以不能抛弃旧版本。版本管理的目的是按照一定的规则保存配置项的所有版本,避免发生版本丢失或混淆等现象,并且可以快速准确地查找到配置项的任何版本。
配置基线(常简称为基线)由一组配置项组成,这些配置项构成一个相对稳定的逻辑实体。基线中的配置项被"冻结"不能再被任何人随意修改。对基线的变更必须遵循正式的变更控制程序。
基线通常对应于开发过程中的里程碑,一个产品可以有一个或多个基线。交付给外部顾客的基线一般称为发行基线(Release),内部开发使用的基线一般称为构造基线(Build)
一组拥有唯一标识号的需求 、设计、源代码文卷以及相应的可执行代码、构造文卷和用户文档构成一条基线。
对于每一个基线 , 要定义下列内容:建立基线的事件 、受控的配置项 、建立和变更基线的程序 、批准变更基线所需的权限。在项目实施过程中,每个基线都要纳入配置控制,对这些基线的更新只能采用正式的变更控制程序。
建立基线还可以有如下好处:
配置数据库:存放配置项并记录与配置项相关的所有信息,时配置管理的有力工具。主要作用:
使用配置库可以帮助配置管理员把信息系统开发过程的各种工作产品包括半成品或阶段产品和最终产品管理得并并有条,使其不致管乱 、管混 、管丟 。 如Git
配置数据库可以分开发库、受控库、产品库3种类型。
例题 项目配置管理中,产品配置是指一个产品在其生命周期各个阶段产生的各种形式和各种版本的文档、计算机程序、部件及数据的集合。该集合中的每一个元素称为改产品配置中的一个配置项,()不属于产品组成部分工作成果的配置项。
A. 需求文档 B. 设计文档 C. 工作计划 D. 源代码
解析:选C。配置项是构成产品配置的主要元素,配置项主要有以下两大类:(1)属于产品组成部分的工作成果:如需求文档、设计文档、源代码和测试用例等;(2)属于项目管理和机构支撑过程域产生的文档:如工作计划、项目质量报告和项目跟踪报告等。
软件质量是指反映软件系统或软件产品满足规定或隐含需求的能力的特征和特性全体。软件质量管理是指确定质量方针、目标和职责并通过质量体系中的质量计划 、质量控制 、质量保证和质量改进来使其实现的所有管理职能的全部活动;
软件质量管理主要包括以下过程:
风险管理:对项目风险进行认真的分析和科学的管理,能够避开不利条件 、少受损失 、取得预期的结果并实现项目目标的, 能够争取避免风险的发生或尽量减小风险发生后的影响 。但是,完全避开或消除风险, 或者只享受权益而不承担风险是不可能的。
风险识别:识别出项目中已知和可预测的风险 ,确定风险的来源 、产生的条件 、描述风险的特征以及哪些项目可以产生风险形成一个风险条目检查表。
风险定性分析:对已经识别的风险进行排序,确定风险可能性与影响、确定风险优先级 、确定风险类型。
风险定量分析:进一步了解风险发生的可能性具体有多大,后果具体由多严重 。包括灵敏度分析、期望货币价值分析、决策树分析、蒙特卡罗模拟。
风险应对计划编制:对每一个识别出来的风险来分别制定应对措施,这些措施组成的文档称为风险应对计划。包括消极风险(避免策略 、转移策略 、减轻策略) 和积极风险(开拓 、分享 、强大)。
风险监控: 监控风险计划的执行,检测残余风险,识别新的风险,保证风险计划的执行,并评价这些计划对减少风险的有效性
从宏观上来看,风险可以分为项目风险、技术风险和商业风险,
项目风险:作用于项目上的不确定的事件或条件,既可能产生威胁,也可能带来机会。
风险的属性:
风险的分类
组织结构模式:项目型(项目经理绝对领导)、职能型(部门领导为主)、矩阵型(二者结合,权力分割不同)
程序设计小组的组织方式
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。