分类：电脑/网络-程序设计
问题：求助，懂软件工程的就帮帮忙吧!什么是软件冗余,软件冗余和硬件冗余 
什么是冗余,软件冗余和硬件冗余有什么不同之处?单循环测试是怎样测试的,为什么说这种测试方法是严密与可靠的?
回答：冗余具有很多种形式： 1. 冗余(低端、高端或两者兼有)； 2. 软件冗余； 3. 时间冗余； 4. 信息冗余。 飞机内的自校验逻辑电路及多台飞行计算机即为典型的硬件冗余。软件冗余可采用两种完全不同的算法，得到的结果也完全相同。时间冗余可以利用通信重传实现，而信息冗余则可采用备份、校验及纠错代码实现。 冗余可以是动态的，也可以是静态的，两者均需复制系统的基本要素。在静态冗余中，同一时刻所有的复制要素均保持激活。如果一个复制“抛出”故障，系统能够马上使用另一复制，并继续正确的操作。在动态冗余中，只有一个复制保持激活，而其余复制则不激活。如果被激活的复制产生故障，先前未被激活的一个复制将被激活并接管临界操作。 那么上述各种方法是如何实现高可用性的呢？首先，必须对高可用性进行定义。高可用性表征系统容错并根据规范继续提供业务的能力。系统可以采用本文给出的所有概念和方法实现高可用性。 可用性通常采用“可用度”或“每年故障时间”进行量度。常规的容错系统可以达到99.99%的可靠度，即相当于每年故障1小时(每天故障10秒钟)。但高可用性系统则有望实现高达99.999%的可用度，即每年故障少于5分钟(简单地说，即每天故障1秒钟)。这意味着当故障出现时，系统必须能自动处理，因为操作人员难以在很短的时间内移除或掩盖任何故障。 硬件冗余 与采用极可用器件构建单个极可用模块的硬件设计相比，使用由常规商业级质量的器件构成的常规商业级质量硬件进行冗余复制模块设计，无疑具有更高的成本效益。 每个复制通常都要求具有“快速失效”或“失效即停”特性，这极大地简化了故障管理决策。每次失效都使硬件在运行中停止，而不是试图勉强执行下去并要求管理人员指出模块中哪些输出发生故障，哪些则一切正常。 对于采用静态冗余的容错，每个复制模块都具有常规的商用可用性。采用双重复制的模式称为配对或双路复用(duplexing)。如果采用了N个复制，则称为N路复用(N-plexing)。 图1显示了3路复用或3重冗余硬件设计，这三重复制均位于方框图的底端附近。这些复制向“表决器”提交输出，表决器决定了子系统的最终实际输出。在N路复用设计中，当N ≥ 3时，表决器通常采用多数决策策略。但是，这需要占不失效复制的绝大多数，而不仅仅是占复制总数(失效和不失效复制)的简单多数。 然而，表决器的硬件和软件不是类似于系统中的任何其他模块，也会失效吗？实际上，确实如此；而且一旦失效，还会给系统带来灾难性的影响。但表决器通常极为简单，因此可以通过设计和测试保证其鲁棒性。此外，还可以设计复杂表决器和二级表决器等复杂系统，但本文不准备进行深入讨论。 对于采用动态冗余的容错，复制模块仍然只需具有常规的商用可用性。一种实现方法是采用由一个被激活模块和一个备用模块组成的冗余对。另一方法则采用一簇模块，这些模块不必是其他模块的精确复制，可以具有不同的特征、接口和容量。这簇复制需要采用失效接替策略，这样当主模块出现故障时，就能确定如何对多个模块进行管理。下面给出了一些选择： 1. 热备用。主模块在系统中运行时，备份模块处于“热备用”状态，一旦主模块出现故障，备份模块将启动并接管主模块。例如，可以采用这种方法设计高可用性的互联网服务器。 2. 转动备用。主模块在系统运行时，可以具有许多备用模块。一旦主模块出现故障，一个备用模块将接管系统的运行。航天飞机上飞行计算机的设计就基于该原理：主模块由两台总稳定工作的计算机组成，其中一个备用模块是一个相似对(similar pair)，而第二个备用模块则是一台只能根据操作员指令接管系统的计算机。 3. 非关键模块的失效接替。主模块占用系统的关键资源，备用模块则占用其他非关键资源。一旦主模块出现故障，备用模块就能接管主模块占用的大部分关键资源。日常生活中我们也常常这么做：当我们试图发送一封紧急的电子邮件时，如果计算机的高速互联网连接出现故障，我们会立即切换到旧式的调制解调器。 4. 共同接管。每个模块均运行自带的关键资源，而且一旦某个模块发生故障，其他模块还能接管故障模块的关键资源。例如，在功能增强的心护理室中，每8位病人将设置一台心脏监控计算机。如果一台心脏监控计算机崩溃，那么邻近的计算机也能对故障计算机监控的8位病人进行监控(或许性能将有所降低)。 正确的失效接替实现非常关键。如果故障的主模块需要抛弃故障并继续执行，而同时另一模块也试图接管其业务，那么后果将是灾难性的，因为它们的业务有可能产生冲突。如果主模块抛弃故障后停止执行，而又没有其他模块接管其业务，这样的后果同样是灾难性的。因此失效接替的验证和测试非常关键，尽管我们当中的许多人并不热衷于此。 软件冗余 大多数硬件故障都是随机产生并由物理缺陷导致，这些缺陷要么在生产过程中维持不变，要么随器件的老化而不断变化，要么将受到外部物理环境的冲击。相反，软件故障与物理条件无关，因为软件不会老化。与硬件故障不同，软件故障源自对软件设计或实现中固有故障的软件路径调用。由于软件通常比硬件复杂，因此软件中可能具有比硬件多得多的内置缺陷，从而导致软件中的故障更多，容错设计的成本也更高。 N版编程（N-version programming ）是久经考验的一种软件容错设计方法。20世纪70年代偶然接触到该方法时，那时还被称为异质软件(dissimilar software)。这是硬件N路复用(如图1所示)的等价软件实现。但该方法比硬件N路复用的复制机制复杂，N路复用中相同软件的N个复制将包含相同的故障并产生N次相同的错误。在N版编程中，如果N套软件功能需要并行运行，那么它们应当是该功能的N个不同实现，而且是由N个单独的开发团队独立开发完成。这就是N版编程的基本原理。 1996年6月，当首次发射的阿丽安娜-5卫星发送火箭上升到4000米高空时，突然发生了爆炸。该事故的原因在于火箭的惯性参考系统(这是数字飞行控制的一部分)发生了故障。尽管惯性参考系统中引入了硬件冗余，但软件冗余没有得到正确的处理。阿丽安娜-5带有两台惯性参考计算机，一台处于工作状态，而另一台则处于“开机”备用状态。这两套系统并行运行，并具有完全一样的硬件和软件。系统上的软件也与先前已经成功发射的阿丽安娜-4几乎一模一样，但由于阿丽安娜-5上的某些飞行参数值比阿丽安娜-4大，因此数据发生了溢出。解决问题的方法是关闭计算机，由于冗余计算机也在运行相同的软件，因此也将受到数据溢出的冲击，从而很快关闭，这样整个惯性参考系统就完全崩溃。结果，引擎的喷管被回旋至极限位置，导致火箭突然转向，并在自毁之前裂成两半。这种处理数据溢出错误的方法适用于处理随机出现的硬件错误，但不适用于处理两台计算机上出现的类似软件错误。N版编程可以避免两台计算机出现类似的软件错误。 在20世纪70年代，N版编程(N-version programming)是先进的软件容错设计方法。此后，这种设计模式引发了一系列问题：随着该技术的采用，软件开发成本直线飙升，因为必须成立N个单独的团队开发N套相互独立的软件。如果期望降低成本，则将陷入所谓的“平均智商( Average IQ)”怪圈：较低成本的开发团队意味着较低质量的软件工程师，而这些工程师只能开发出较低质量的代码。因此，最终只能得到充斥着以N种不同方式产生故障的N种不同程序。 N版编程面临的另一个问题在于如何为N个独立开发团队提供输入。一般情况下，将为所有的N个开发团队提供相同的规范标准。然而，一旦规范存在缺陷，那么将得到N个独立开发的包含类似软件故障的版本。如果系统发布之后，规范或使用错误得到识别，那么每个新错误都需要纠正N次，即N个不同的实现都需要加以纠正，这样维护成本就相当惊人。现在，最佳的N版编程方法是让第一流的软件开发团队，利用最可靠的底层架构、软件开发工具、技术和测试来开发出高质量的软件版本上面是我在网上找到的关于冗余的信息，不知道能不能帮到你。至于单循环测试，真不好意思，可能是我学习不专心吧，学习到目前为止还没有用过，也不知道怎样做，在网上找也没有找到相关的知识。等以后要是我知道再跟你说吧