软件可靠性工程、硬件可靠性工程;软件测试及软件可靠性测试[中国可靠性论坛]

昨天看到一些朋友对于软件可靠性和硬件可靠性的异同点有些模棱两可,把软件测试和软件可靠性测试等同起来了。个人经过一段时间的学习,觉得上述几个概念还是有区别的。欢迎大家一起来讨论:
1、软件可靠性和硬件可靠性的异同点是那些
2、软件测试和软件可靠性测试异同点是那些

给TA打赏
共{{data.count}}人
人已打赏
可靠性技术新手提问

功放类产品如何排除初期失效?

2007-9-28 16:15:20

可靠性技术新手提问

可靠性术语--试验与验证

2007-9-29 8:52:42

10 条回复 A文章作者 M管理员
  1. reliability

    看来PASSWAY,对软件可靠性工程很有研究.也给大家整理了很多实用的资讯.赞一赞这种精神.

  2. passway

    [color=#000000][font=宋体][size=11pt]软件可靠性测试不同于硬件可靠性测试[/font][font=ˎ̥][size=11pt][font=宋体,MSSong],[/font][/font][font=宋体][size=11pt][color=#000000]这主要是因为二者失效的原因不同。[color=fuchsia]硬件失效一般是由于元器件的老化引起的[/font][font=ˎ̥][size=11pt][font=宋体,MSSong],[/font][/font][font=宋体][size=11pt]因此硬件可靠性测试强调随机选取多个相同的产品[/font][font=ˎ̥][size=11pt][font=宋体,MSSong],[/font][/font][font=宋体][size=11pt]统计它们的正常运行时间。正常运行的平均时间越长[/font][font=ˎ̥][size=11pt][font=宋体,MSSong],[/font][/font][font=宋体][size=11pt]则硬件就越可靠。软件失效是由设计缺陷造成的[/font][font=ˎ̥][size=11pt][font=宋体,MSSong],[/font][/font][font=宋体][size=11pt]软件的输入决定是否会遇到软件内部存在的故障。因此[/font][font=ˎ̥][size=11pt][font=宋体,MSSong],[/font][/font][font=宋体][size=11pt]使用同样一组输入反复测试软件并记录其失效数据是没有意义的[/font][font=宋体][size=11pt][color=#000000]。[/font]
    [font=宋体][size=11pt][color=#000000][/font]
    [font=宋体][size=11pt][font=宋体][size=11pt][color=#000000]软件可靠性测试也不同于一般的软件功能测试。[color=red]相比之下[/font][font=ˎ̥][size=11pt][font=宋体,MSSong],[/font][/font][font=宋体][size=11pt]软件可靠性测试更强调测试输入与典型使用环境输入统计特性的一致[/font][font=ˎ̥][size=11pt][font=宋体,MSSong],[/font][/font][font=宋体][size=11pt]强调对功能、输入、数据域及其相关概率的先期识别[/font][font=宋体][size=11pt]。[/font][font=宋体][size=11pt]测试实例的采样策略也不同[/font][color=#000000][font=ˎ̥][size=11pt][font=宋体,MSSong],[/font][/font][font=宋体][size=11pt]软件可靠性测试必须按照使用的概率分布随机地选择测试实例[/font][font=ˎ̥][size=11pt][font=宋体,MSSong],[/font][/font][font=宋体][size=11pt]这样才能得到比较准确的可靠性估计[/font][font=ˎ̥][size=11pt][font=宋体,MSSong],[/font][/font][font=宋体][size=11pt]也有利于找出对软件可靠性影响较大的故障。此外[/font][font=ˎ̥][size=11pt][font=宋体,MSSong],[/font][/font][font=宋体][size=11pt]软件可靠性测试过程中还要求比较准确地记录软件的运行时间[/font][font=ˎ̥][size=11pt][font=宋体,MSSong][color=#000000],[/font][/font][font=宋体][size=11pt]它的输入覆盖一般也要大于普通软件功能测试的要求[/font][font=宋体][size=11pt][color=#000000]。[color=blue]对一些特殊的软件[/font][color=#000000][font=ˎ̥][size=11pt][font=宋体,MSSong],[/font][/font][font=宋体][size=11pt]如容错软件、实时嵌入式软件等[/font][font=ˎ̥][size=11pt][font=宋体,MSSong],[/font][/font][font=宋体][size=11pt][color=#000000]进行软件可靠性测试时[color=blue]需要有多种测试环境[color=#000000]。这是因为在使用环境下常常很难在软件中植入错误[/font][color=#000000][font=ˎ̥][size=11pt][font=宋体,MSSong],[/font][/font][font=宋体][size=11pt]以进行针对性的测试。[/font]
    [/font]
    [font=宋体][size=11pt][font=ˎ̥][size=11pt][font=宋体][size=11pt]保证软件可靠性的关键不是确保软件没有错误[/font][font=ˎ̥][size=11pt][font=宋体,MSSong],[/font][/font][font=宋体][size=11pt]而是要确保软件的关键部分没有错误[/font][color=#000000][font=宋体][size=11pt]。更确切地说[/font][font=ˎ̥][size=11pt][font=宋体,MSSong],[/font][/font][font=宋体][size=11pt][color=#000000]是要[color=red]确保软件中没有对可靠性影响较大的错误。这正是软件可靠性测试的目的之一[color=#000000]。[/font][/font][/font]
    [font=宋体][size=11pt][font=ˎ̥][size=11pt][font=宋体][size=11pt][font=宋体][size=11pt]软件可靠性测试的侧重点不同于一般的软件功能测试[/font][font=ˎ̥][size=11pt][font=宋体,MSSong],[/font][/font][font=宋体][size=11pt]其测试实例设计的出发点是寻找对可靠性影响较大的故障[/font][color=#000000][font=宋体][size=11pt]。因此[/font][font=ˎ̥][size=11pt][font=宋体,MSSong],[/font][/font][font=宋体][size=11pt]要达到同样的可靠性要求[/font][font=ˎ̥][size=11pt][font=宋体,MSSong],[/font][/font][font=宋体][size=11pt]可靠性测试比一般的功能测试更有效[/font][font=ˎ̥][size=11pt][font=宋体,MSSong],[/font][/font][font=宋体][size=11pt]所花的时间也更少。[/font][/font]
    [/font][/font]

  3. passway

    [b]以下引自:[url=http://www.oldchild.net/jsjsj/spks/cps/rjcsykkx.htm]http://www.oldchild.net/jsjsj/spks/cps/rjcsykkx.htm[/url][/b]
    [b]软件测试的定义
    [/b]  软件测试(Softwaretesting)是软件生存期(Softwarelifecycle)中的一个重要阶段,是软件质量保证的关键步骤。通俗地讲,软件测试就是在软件投入运行前,对软件需求分析、设计规格说明和编码进行最终复审的活动。1983年IEEE提出的软件工程术语中给软件测试下的定义是:“使用人工或自动的手段来运行或测定某个软件系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别”。这个定义明确指出:软件测试的目的是为了检验软件系统是否满足需求。
      从用户的角度来看,普遍希望通过软件测试暴露软件中隐藏的错误和缺陷,所以软件测试应该是“为了发现错误而执行程序的过程”。或者说,软件测试应该根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例(即输入数据及其预期的输出结果),并利用这些测试用例去运行程序,以发现程序错误或缺陷。
    [b]软件可靠性评估的定义
    [/b]  可靠性(reliability)是产品在规定的条件下和规定的时间内完成规定功能的能力,它的概率度量称为可靠度。
      软件可靠性(softwarereliability)是软件系统的固有特性之一,它表明了一个软件系统按照用户的要求和设计的目标,执行其功能的正确程度。软件可靠性与软件缺陷有关,也与系统输入和系统使用有关。理论上说,可靠的软件系统应该是正确、完整、一致和健壮的。但是实际上任何软件都不可能达到百分之百的正确,而且也无法精确度量。一般情况下,只能通过对软件系统进行测试来度量其可靠性。
      这样,给出如下定义:“软件可靠性是软件系统在规定的时间内及规定的环境条件下,完成规定功能的能力”。根据这个定义,软件可靠性包含了以下三个要素:
    [b]  1.规定的时间
    [/b]  软件可靠性只是体现在其运行阶段,所以将“运行时间”作为“规定的时间”的度量。“运行时间”包括软件系统运行后工作与挂起(开启但空闲)的累计时间。由于软件运行的环境与程序路径选取的随机性,软件的失效为随机事件,所以运行时间属于随机变量。
    [b]  2.规定的环境条件
    [/b]  环境条件指软件的运行环境。它涉及软件系统运行时所需的各种支持要素,如支持硬件、操作系统、其它支持软件、输入数据格式和范围以及操作规程等。不同的环境条件下软件的可靠性是不同的。具体地说,规定的环境条件主要是描述软件系统运行时计算机的配置情况以及对输入数据的要求,并假定其它一切因素都是理想的。有了明确规定的环境条件,还可以有效判断软件失效的责任在用户方还是研制方。
    [b]  3.规定的功能
    [/b]  软件可靠性还与规定的任务和功能有关。由于要完成的任务不同,软件的运行剖面会有所区别,则调用的子模块就不同(即程序路径选择不同),其可靠性也就可能不同。所以要准确度量软件系统的可靠性必须首先明确它的任务和功能。
      在讲到软件可靠性评估的时候,我们不得不提到软件可靠性模型。软件可靠性模型(Softwarereliabilitymodel)是指为预计或估算软件的可靠性所建立的可靠性框图和数学模型。建立可靠性模型是为了将复杂系统的可靠性逐级分解为简单系统的可靠性,以便于定量预计、分配、估算和评价复杂系统的可靠性。

    完整的测试过程包括测试前的检查、设计测试用例、测试实施、可靠性数据收集和编写测试报告5个步骤,

    这个网页也值得一看:[url=http://www.testage.net/html/45/n-45.html]http://www.testage.net/html/45/n-45.html[/url]

    [[i]本帖最后由passway于2007-9-2919:34编辑[/i]]

  4. passway

    [u][color=#154ba0][/u]软件测试的目的:论坛有论述:
    [u][color=#154ba0][url=http://www.kekaoxing.com/soft/softrel/200704/682_2.html]http://www.kekaoxing.com/soft/softrel/200704/682_2.html[/url][/u][url=http://www.21cmm.com/][color=#800080][/url]
    [color=#000000][font=宋体][font=Verdana]软件测试的目的决定了如何去组织测试。如果测试的目的是为了尽可能多地找出错误,那么测试就应该直接针对软件比较复杂的部分或是以前出错比较多的位置。如果测试目的是为了给最终用户提供具有一定可信度的质量评价,那么测试就应该直接针对在实际应用中会经常用到的商业假设。[/font][font=Verdana][/font][/font]
    [color=#000000][font=宋体][font=Verdana]  不同的机构会有不同的测试目的;相同的机构也可能有不同测试目的,可能是测试不同区域或是对同一区域的不同层次的测试。[/font][font=Verdana][/font][/font]
    [color=#000000][font=Verdana][font=宋体]  在谈到软件测试时,许多人都引用[/font][/font][font=Verdana]GrenfordJ.Myers[/font][font=Verdana][font=宋体]在《[/font][/font][font=Verdana]TheArtofSoftwareTesting[/font][font=宋体][font=Verdana]》一书中的观点:[/font][font=Verdana][/font][/font]
    [color=#000000][font=宋体][font=Verdana]  [/font][color=blue]①[font=Verdana]、软件测试是为了发现错误而执行程序的过程;[/font][/font]
    [color=blue][font=宋体][font=Verdana]  [/font]②[font=Verdana]、测试是为了证明程序有错,而不是证明程序无错误。[/font][/font]
    [font=宋体][font=Verdana]  [/font]③[font=Verdana]、一个好的测试用例是在于它能发现至今未发现的错误;[/font][/font]
    [font=宋体][font=Verdana]  [/font]④[font=Verdana]、一个成功的测试是发现了至今未发现的错误的测试。[/font][font=Verdana][/font][/font]
    [color=#000000][font=宋体][font=Verdana]  这种观点可以提醒人们测试要以查找错误为中心,而不是为了演示软件的正确功能。但是仅凭字面意思理解这一观点可能会产生误导,认为发现错误是软件测试的唯一目,查找不出错误的测试就是没有价值的,事实并非如此。[/font][font=Verdana][/font][/font]
    [color=#000000][font=宋体][font=Verdana]  [color=red]首先,测试并不仅仅是为了要找出错误。通过分析错误产生的原因和错误的分布特征,可以帮助项目管理者发现当前所采用的软件过程的缺陷,以便改进。同时,这种分析也能帮助我们设计出有针对性地检测方法,改善测试的有效性。[/font][font=Verdana][/font][/font]
    [color=#000000][font=Verdana][font=宋体]  [color=red]其次,没有发现错误的测试也是有价值的,完整的测试是评定测试质量的一种方法。详细而严谨的[color=red]可靠性增长模型可以证明这一点。例如[/font][/font][font=Verdana]BevLittlewood[/font][font=Verdana][font=宋体]发现一个经过测试而正常运行了[/font][/font][font=Verdana]n[/font][font=Verdana][font=宋体]小时的系统有继续正常运行[/font][/font][font=Verdana]n[/font][font=Verdana][font=宋体]小时的概率。[/font][/font]
    [font=宋体][color=#000000][/font]
    [font=宋体][color=#000000]passway:从上述论断可以看出:软件可靠性测试是包纳于软件测试的,它是软件测试的升级版本!出于不同的目的才会采取相应的测试程度,毕竟搞软件测试是花销巨大的,特别是网络测试,搭建测试平台就要花费N多money!一般的软件公司是不会搞软件可靠性测试的,得不偿失!常见的软件测试一般出现在军事和航天领域。[/font]
    [font=宋体][color=#000000][/font]
    [font=宋体][color=red]软件环境指被测软件运行时的操作系统、数据库以及其他应用软件构成的环境。在实际测试中,[color=red]软件环境又可分为主测试环境和辅测试环境,主测试环境是测试软件功能、安全可靠性、性能、易用性等大多数指标的主要环境,一般来说,配置主测试环境可遵循下列原则:[/font][size=9pt]
    [font=宋体] [size=9pt]1.[/font][font=宋体][size=9pt]符合软件运行的最低要求。测试环境首先要保证能支撑软件正常运行。[/font]
    [font=宋体][size=9pt][size=9pt][font=宋体,MSSong]2.[/font][font=宋体][size=9pt]选用比较普遍的操作系统和软件平台。[/font][/font]
    [font=宋体][size=9pt][font=宋体][size=9pt] [size=9pt][font=宋体,MSSong]3.[/font][font=宋体][size=9pt]营造相对简单、独立的测试环境。[/font][/font][/font]
    [font=宋体][size=9pt][font=宋体][size=9pt][font=宋体][size=9pt][size=9pt][font=宋体,MSSong]4.[/font][font=宋体][size=9pt]无毒的环境。[/font][/font][/font][/font]
    [font=宋体][size=9pt][font=宋体][size=9pt][font=宋体][size=9pt][font=宋体][size=9pt]辅测试环境常常用来满足不同的测试需求或特殊测试项目:[/font][/font][/font][/font]
    [font=宋体][size=9pt][font=宋体][size=9pt][font=宋体][size=9pt][font=宋体][size=9pt]兼容性测试:在满足软件运行要求的范围内,可选择一些典型的操作系统和常用应用软件对其安装卸载和主要功能进行验证。
    [font=宋体][size=9pt]模拟真实环境测试:有些软件,特别是面向大众的商品化软件,在测试时常常需要考察在真实环境中的表现。如测试杀毒软件的扫描速[/font][/font][/font][/font][/font]
    [font=宋体][size=9pt][font=宋体][size=9pt][font=宋体][size=9pt][font=宋体][size=9pt][font=宋体][size=9pt]度时,硬盘上布置的不同类型文件的比例要尽量接近真实环境,这样测试出来的数据才有实际意义。[/font]
    [font=宋体][size=9pt]横向对比测试:利用辅测试环境“克隆”出完全一致的测试环境,从而保证各个被测软件平等对比。[/font][/font][/font][/font][/font]
    [font=宋体][size=9pt][font=宋体][size=9pt][font=宋体][size=9pt][font=宋体][size=9pt]
    [/font][/font][/font][/font]
    [font=宋体][size=9pt][font=宋体][size=9pt][font=宋体][size=9pt][font=宋体][size=9pt][font=宋体][size=9pt]passway:有些朋友把兼容性测试列入了软件可靠性测试范围,我个人认为不妥,从上述论断可以看出,兼容性测试还是属于软件测试的(我在软件测试过程中就经常做兼容性测试),现阶段对于软件可靠性测试提得比较多,但是纯粹搞这的人很少,对于软件可靠性的模型还不像硬件可靠性工程那样成熟,所以将软件测试和软件可靠性测试混为一谈是很正常的。个人认为:软件可靠性测试是深层次的软件测试,如果要搞软件可靠性测试,就先要明确通过测试的所得是否大于不做软件可靠性测试的所失。[/font][/font][/font][/font][/font]

    [font=Verdana][/font]

    [[i]本帖最后由passway于2007-9-2919:16编辑[/i]]

  5. robert928

    晕倒!没想到一个帖子引来你的这么多“废话”呵呵!不错,继续哈!不知道你这段时间搞软件测试到底收获了些啥?

  6. passway

    本论坛的:[url=http://club.kekaoxing.com/viewthread.php?tid=194&highlight=%2B%C8%ED%BC%FE%BF%C9%BF%BF%D0%D4%B9%A4%B3%CC%B8%C5%C2%DB%2B]http://club.kekaoxing.com/viewthread.php?tid=194&highlight=%2B%C8%ED%BC%FE%BF%C9%BF%BF%D0%D4%B9%A4%B3%CC%B8%C5%C2%DB%2B[/url]对于软件可靠性测试及软件测试的关系,有初略的论述:
    第5页
    软件可靠性工程测试包括两种类型:可靠性增长测试和确认测试。这两种类型与不同测试阶段无关,例如单元测试、子系统测试、系统测试或b测试,而是与测试的目标相关。可靠性增长测试的目标是找到并清除错误。在可靠性增长测试过程中,使用软件可靠性工程来估计并跟踪可靠性。测试人员和开发经理应用可靠性信息来指导开发和发布。可靠性增长测试一般在自己机构内开发软件的系统测试阶段。如果一边测试一边解决失效问题(清除导致它们的错误),那么可靠性增长测试也可以应用于b测试阶段。为了得到一个“好的”(有一定的不确定性)对失效强度的估计,在失效数据样本中对失效数据的数量有一个最低要求,通常是10到20。

    可靠性增长测试包括特性测试、负载测试和回归测试。在特性测试中,操作都是独立运行的,运行场地环境的影响和交互作用被减小到最低程度。有时通过在操作之间重新初始化系统来减小交互作用。负载测试是指同时运行很多操作,并且是以相同的频率,在其他现场将会出现的相同环境条件下。这样就可以产生与在现场中可能出现的情况相同的交互作用和环境条件的影响。验收测试和性能测试都属于负载测试。回归测试是在系统发生重要改变之后进行的,包括一些(通常是随机选取的)或全部特性测试。在回归测试中应该包括所有关键操作。负载测试通常包括对系统资源的竞争,这可能会产生排序或计时问题,同时还经常出现数据随时间的退化问题。前述的因素可能会揭示出一些潜在的特性测试和回归测试中没有被激活的由交互作用导致的失效。尽管交互作用对于多用户系统更为重要,它对于像在个人电脑上运行的软件这样的单用户系统也是重要的,因为可能会有由于操作之间的顺序而产生的不同的交互作用。

    对于软件可靠性测试及软件测试的区别和联系,我将陆续用事实说话!

    本论坛的:[url=http://club.kekaoxing.com/viewthread.php?tid=194&highlight=%2B%C8%ED%BC%FE%BF%C9%BF%BF%D0%D4%B9%A4%B3%CC%B8%C5%C2%DB%2B]http://club.kekaoxing.com/viewthread.php?tid=194&highlight=%2B%C8%ED%BC%FE%BF%C9%BF%BF%D0%D4%B9%A4%B3%CC%B8%C5%C2%DB%2B[/url]对于软件可靠性工程及硬件可靠性工程的关系,也有论述:
    第26-27页:
    硬件和软件可靠性都依赖于环境。软件失效的根源在于设计错误,而硬件失效的主要根源通常在于物理变质。然而,为软件可靠性开发的概念和理论确实可以应用于任何设计活动,包括硬件设计。一旦软件(设计)缺陷被适当地修复,通常就被永久性修复了。失效通常只发生在当程序(设计)运行在并非它所开发和测试时面向的环境中的情况。尽管制造过程也可能影响物理组件的质量,但是软件(设计)的复制过程很简单,并且其质量水平很高。
    尽管存在上述的不同,我们提出软件可靠性理论所采用的方法与硬件可靠性理论仍然是相容的。因此可以使用标准硬件组合技术(LloydandLipow,1977;Shooman,1986)来计算系统可靠性。总之,硬件与软件可靠性有许多相似之处,也有一些不同。不能错误地假定软件所表现出的问题总是特有的,同时又必须小心不要将此类推广得太远。

  7. reliability

    还是passway对这方面有研究啊。论坛里已有的资料我都没有仔细看看,惭愧:L

    不过你的图片怎么不显示出来,是不是截图后改了文件后缀。有点点问题哦。当然下载下来打开是可见的。

  8. passway

    论坛这个教程:[url=tid=233]软件可靠性培训讲稿[/url],明确提到了[url=http://www.kekaoxing.com/club/thread-1604-1-1.html]软件可靠性工程、硬件可靠性工程[/url]的区别:
    [size=3][color=#000000][font=宋体,MSSong]详见第26、27页[/font]
    [font=宋体][size=3][color=#000000][/font]

    [[i]本帖最后由cliffcrag于2007-9-2914:01编辑[/i]]

    文件下载:1.jpeg
    密码或说明: 大小:75KB

    文件下载:2.jpeg
    密码或说明: 大小:74KB

  9. passway

    软件可靠性工程与硬件可靠性工程还是有区别的!
    软件可靠性工程与硬件可靠性工程的相似点
    1产品设计越简单,越易保证其可靠性
    2依靠设计与开发过程保证固有可靠性
    3利用概率论和数理统计学研究产品可靠性
    4冗余性容错设计的某些分析技术的原理
    5FTA、FMEA、Petri网等方法的基本思想
    6软件硬件互补的思想
    7必须采用系统工程的基本方法学

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索