目录
一、软件可靠性度量
二、可靠性分配简介
三、软件配置项简介
四、软件可靠性分配方法
五、操作剖面分配法案例
我们在讲可靠性的度量时,常常用可靠度、失效率、平均失效前时间、平均失效间隔时间等指标去衡量。软件作为一种产品,也可以用这些指标。
可靠度:指软件在规定条件下和规定时间内,不引起系统失效的概率。设规定的时间为t0,软件发生失效的时间为t,则:
R(t0)=P(t>t0)
失效率:软件在规定条件下和规定时间内,丧失规定功能的概率。设规定的时间为t0,软件发生失效的时间为t,则:
F(t0)=P(t 失效率与可靠度的关系:F(t0)=1-R(t0) 平均失效前时间(MTTF):指当前时间到下一次失效时间的均值。 比如我们举个例子,某软件分别在如下时刻失效:477h,389h,532h,则MTTF的观测值为:(477+389+532)/3=466h 平均失效间隔时间(MTBF):指两次相邻失效间隔时间的均值。当软件从时刻T1工作到时刻T2,若发生了N次失效,则: MTBF=(T2-T1)/(N+1) 还有一些其他的表征指标,这里不再介绍。 《可靠性工程师手册》一书中,对可靠性分配是这样介绍的:将产品可靠性的定量要求合理分配到分系统、设备、组件、元器件等单元上的分解过程。 可靠性分配的目的为: 1.明确各单元的可靠性定量要求 2.发现设计中的薄弱环节 3.对不同的设计方案进行比较,为设计决策提供依据 4.作为可靠性试验与评估的依据之一 常用的分配方法有评分分配法、比例组合分配法、考虑重要度和复杂度分配法(AGREE法),直接分配法等。 可靠性分配的一般程序: 第一步:明确所分配的产品可靠性参数和指标,如任务可靠度、故障率等。 第二步:选择可靠性分配方法。 第三步:进行可靠性分配,发现薄弱环节。 第四步:确定分配结果是否满足产品可靠性要求,如果满足,完成分配;否则,返回第三步。 一些概念我们需要先了解下,在后面的环节会用到: 软件:一系列按照特定顺序组织的计算机数据和指令的集合。软件并不只是包括可以在计算机(这里的计算机是指广义的计算机)上运行的电脑程序,与这些电脑程序相关的文档一般也被认为是软件的一部分。 CSCI:CSCI是计算机软件配置项(Computer Software Configuration Item)简称,在软件设计文档中经常用到。 什么是配置项? 在国标《GB/T 11457-2006 信息技术与软件工程术语》里,是这么说的: 配置项(configuration item,缩写为CI),是为配置管理设计的硬件、软件或两者的集合。它在配置管理中作为单个实体来对待。 配置项包含了硬件配置项和软件配置项。 计算机软件配置项(computer software configuration item,缩写为CSCI),是为配置管理设计的软件的集合,在配置管理的过程中,作为单个实体对待。 这么看上述定义,大家可能还是很难理解。 我用通俗的语言来解释下:软件生存周期各个阶段活动的产物经审批后即可称之为软件配置项。 软件配置项包括: ①与合同、过程、计划和产品有关的文档和资料; ②源代码、目标代码和可执行代码; ③相关产品,包括软件工具、库内的可重用软件、外购软件及顾客提供的软件等。 即包括了受控的所有产品特性,其内容及相关文档,软件版本,变更文档,软件运行的支持数据,以及其他一切保证软件一致性的组成要素。 在软件建立时,变更是不可避免的,而变更又加剧了项目中软件工程师间的混乱。之所以产生混乱,是因为在进行变更前没有仔细分析,或没进行变更控制。相对于硬件类配置,软件产品的配置”包括更多的内容并具有易变性。 软件并不是说我们通常意义上理解的简单的一个程序,而是包括规约和相关文档。 我们常常说的软件测试,不仅指的是被测的程序,还包括涉及的软件需求,设计等文档(被测对象可能还要包括相关的数据,特别是现在的人工智能软件,这一点标准里没有提到),他们共同组成了一个软件实体。 软件可靠性的分配方法有很多种,有很多各种各样的研究。 作为通识类教育,我们这次介绍常用的几种:顺序执行分配法;并行执行分配法;复杂度因子分配法;重要度分配法;操作剖面分配法。 因为担心大家不好理解,下面的讲解,用功能组这个词去取代了CSCI,实际严谨点,这些应该是要叫做CSCI的。 1)顺序执行分配法 适用前提: 软件的各个功能组(CSCI)是顺序执行,各个功能组(CSCI)中的功能是系统功能的子功能,所有功能组(CSCI)执行时间之和等于系统任务执行时间。 所有的功能组(CSCI)都成功执行才能保证软件不失效。 使用失效率指标。 分配步骤: 1.使用失效率定义可靠性指标 2.确定整个软件系统的可靠性需求(λs) 3.确定整个软件系统的功能组数量(N) 4.对于每个功能组,分配可靠性需求(λi): λi=λs 2)并行执行分配法 适用前提: 软件的各个功能组是并行执行,但这些功能组的功能代表了整个软件的一系列的功能,任何一个功能组的执行不依赖于其他功能组的执行结果。 所有功能组单独执行时间均等于系统任务执行时间。 任何一个功能组的功能失效意味着软件系统的功能失效。 每个功能组同等对待。 使用失效率指标。 分配步骤: 1.使用失效率定义可靠性指标 2.确定整个软件系统的可靠性需求(λs) 3.确定整个软件系统的功能组数量(N) 4.对于每个功能组,分配可靠性需求(λi): λi=λs/N 3)复杂度因子分配法 适用前提: 基于每个功能组的相应复杂度分配失效率 计算功能组复杂度时,可以用源代码行数、功能点、特征点去计算。 使用失效率定义可靠性指标。 注意事项: 为了保证分配的有效性,对于每个功能组必须采用相同的复杂度度量方法。 选择的复杂度测量必须能按线性比例转化成失效率(如:如果功能组复杂度为4倍,失效率指标应该是等高的比例)。 复杂度更高的功能组,失效率指标也更高。 分配步骤: 1.确定整个软件系统的可靠性需求(λs) 2.确定整个软件系统的功能组数量(N) 3.对于每个功能组,确定它的复杂度因子(Wi),功能组的复杂度越高,Wi值越高 4.确定系统的任务持续时间(T) 5.确定系统任务持续期内,每个功能组的活动时间(τi) 6.计算系统的失效率调节因子(K): 7.计算每个功能组分配的失效率指标(λi): λi=λs*(Wi/K) 4)重要度分配法 适用前提: 基于对软件失效影响认知来分配失效率,将重要度等级与维持系统运行并且保持故障防护能力联系起来。 对于确定的操作模式或功能组,如果其重要度等级高,应分配较低的失效率,如果其重要度等级较低,应分配高一些失效率。 如果必须为某项特定的操作模式分配特别低的失效率,就需要采用容错或其它失效缓解设计技术。 使用失效率定义可靠性指标。 分配步骤: 1.确定整个软件系统的可靠性需求(λs) 2.确定整个软件系统的功能组数量(N) 3.对于每个功能组,确定它的重要度因子(Ci),对于系统更为重要的功能组,赋予较低的Ci值 4.确定系统的任务持续时间(T) 5.确定系统任务持续期内,每个功能组的活动时间(τi) 6.计算系统的失效率调节因子(K): 7.计算每个功能组分配的失效率指标(λi): λi=λs*(Ci/K) 5)操作剖面分配法 讲操作剖面,我们得理解什么是操作剖面? 我们可以把它理解为操作及其发生概率组成的集合。 同一个软件因为用户不同,存在多个操作剖面。 不同层面有不同的操作剖面,如客户剖面,用户剖面,系统模式剖面,功能剖面,操作剖面等。每个操作对应若干个运行。 适用前提: 软件可靠性是由用户的使用决定的,对于同一个软件,用户不同的使用方式会导致软件可靠性的变化。操作剖面用于定义软件的使用模型,刻画用户使用软件的模式。 使用失效率定义可靠性指标。 分配步骤: 1.确定整个软件系统的可靠性需求(λs) 2.确定确定整个软件系统的操作剖面(PF) PF={(item1,P1),(item2,P2)...(itemn,Pn)} item1∩item2∩......∩itemn = Φ P1+P2+......+Pn = 1 3.对于每个功能,分配可靠性需求(λi): λi=λs*Pi 我们在下面章节举例子说明下。 如果软件可靠性是由用户的使用决定的,对于同一个软件,用户不同的使用方式会导致软件可靠性的变化,这个时候我们就要去考虑操作剖面。 很多软件都是这种,例如说邮箱,用户会进行登录、写信、删信、上传附件、网盘管理等等一系列操作。 又比如饮水机的操作面板,用户可以去按各种按键,不同的用户习惯不一样。 操作剖面分配法,很重要的一点是我们要弄清楚概率。 我们看一个具体的例子: 虚拟维修训练系统可实现在虚拟环境下对装备进行维修和拆卸的功能。是一款集训练、学习、自测于一身的学习训练系系统,对受训人员的维修保障能力有极大的帮助,其构成如下。 a) 客户剖面可以表示为: 客户剖面= {P (院校),P(军工厂),P(基地)}; 本例中,一组模拟数据为:院校有5所,军工厂10个,基地15个,则概率计算如下: P (院校) =5/ (5+10+15) = 5/30 P (军工厂) =10/ (5+10+15) = 10 / 30 P (基地) =15/ (5+10+15) = 15/30 b) 用户剖面可以表示为: 用户剖面= {P (管理员), P (受训者) }; 这里模拟一组用户数据如下: 院校一共500人使用此软件,其中10人为管理员,490人为受训者;军工厂一共50人使用此软件,管理员5人,受训者45人;基地一共100人使用此软件,管理员5人,受训者95人。 根据这些数据可计算用户剖面概率: P (管理员) = (5/30) ∗ (10/500) + (10/30) ∗ (5/ 50) + (15/30) ∗ (5/100) =37/600 P (受 训 者) = (5/30) ∗ (490/500) + (10/30) ∗ (45/50) + (15/30) ∗ (95/100) =563/600 c) 功能剖面可以表示为: 功能剖面= {P (登录), P (实施) , P (查询) }; 不同系统使用人员 (管理员和受训者) 使用系统不同功能的情况如下所示: P (登录) =0∙7∗P (管理员) +0∙2∗P (受训者) =0.7*37/600+0.2*563/600 = 0.2308 P (实施) =0∙2∗P (管理员) +0∙6∗P (受训者) =0.2*37/600+0.6*563/600 = 0.5753 P (查询) =0∙1∗P (管理员) +0∙2∗P (受训者) = 0.1*37/600+0.2*563/600 = 0.1938 根据实际的使用情况对功能剖面中实施部分进行分解实施包括提示和训练两大功能,其概率分配比例为0.2,0.8。则: P (提示) =0∙2∗P (实施)=0.11506 P (训练) =0∙8∗P (实施)=0.46024 这样我们就计算出了登录、实施、查询这三个功能的使用概率。按照同样的道理,可以去计算再下层的功能剖面,如实施下面的调练,以及再往下的操作剖面:讲解演示、引导训练、自主训练、自测。 我们计算出了各个概率后,假设虚拟维修训练系统总的失效率要求是λs,那么对应的操作剖面分配就是λs*Pi,例如上述例子的登录,那就是分配0.2308λs,上述例子中的提示,那就是分配0.11506λs。 本文为《软件可靠性简介》培训课程中摘录的公开内容,关注微信公众号“永恒之地”,后台回复“软件可靠性”,下载培训课件。 二、可靠性分配简介
三、软件配置项简介
四、软件可靠性分配方法
五、操作剖面分配法案例