现在的位置: 首页 > 综合 > 正文

欧洲航空安全局希望劝阻把伪代码用作低层需求

2014年06月14日 ⁄ 综合 ⁄ 共 2879字 ⁄ 字号 评论关闭

 

欧洲航空安全局希望劝阻把伪代码用作低层需求

 

作者:European Aviation Safety Agency(EASA)

原文:EASA Proposed CM No.: EASA Proposed CM – SWCEH – 002 Issue: 01, 10th of February 2011

译者:logiciel,2011年5月28日

 

[译者注] 本文译自EASA Proposed CM - SWCEH – 002 Issue: 01的第24章 THE USE OF PSEUDO-CODE AS LOW-LEVEL REQUIREMENTS。

 

24.1 背景

欧洲航空安全局希望劝阻把伪代码用作低层需求的描述。

有些申请人选择不进行正常的开发高层需求、低层需求、然后源代码并且分别有独立的软件生命周期数据项的ED-12B/ DO-178B的周期。他们有的选择用伪代码设计他们的源代码,即显式地说明将要实现的源代码的结构。这些申请人声称他们的伪代码是他们的低层需求和功能需求的描述,甚至宣称每个代码模块的伪代码设计构成单个低层需求。

这违背了需求开发的正常做法,即逐层展开需求,使得每一个相继层次的需求比上一层次包含更多的需求,并且逐层降低抽象程度。如上所述的以伪代码设计的需求模式实际上逆转了需求的制订过程,甚至可理解为一种逆向工程过程。这表明,需求信息被用伪代码设计的相继的低层需求逐层吸收或隐藏,这违反D-12B/ DO-178B的软件生命周期的正常做法,并阻止需求得到适当的跟踪和测试。

如果遵循高层需求、更详细的低层需求、然后源代码的正常开发周期,就没有必要产生伪代码,它在ED-12B / DO - 178B的项目中不起有益的作用。

24.2 使用伪代码的问题

欧洲航空安全局认为,用伪代码来表示低层需求并不符合ED-12B/ DO-178B的低层需求定义。根据ED-12B/DO-178B,低层需求是不需要额外信息就可开发源代码的需求。伪代码的开发是为了使之实际上成为源代码的结构和内容的一个规范。源代码故意地几乎等同于伪代码,因此除了源代码用可编译语言进行了稍有差别的描述外,不能说源代码是从相应的伪代码发展而来的。在这种情况下,没有真正说明需求的低层需求,而是用伪代码提供的对未说明的低层需求的一种实现。在这种情况下,由于没有开发或说明实际的低层需求,不能说源代码是从任何伪代码发展而来的。因此,不存在常规的低层需求来用以评审、追踪或测试。

针对用与源代码几乎相同的所谓的伪代码表达的低层需求来评审或测试源代码的步骤,不能像针对常规的低层需求来评审或测试源代码那样有效,只能产生有限的结果。

这也意味着通过执行基于用所谓的伪代码表达的低层需求的测试来进行源代码结构覆盖分析的步骤是无效的活动,因为基于代码模块的测试是测试代码的结构(这是一种结构测试),不是对真实需求的测试。以伪代码或源代码为形式的代码模块结构知识为基础的,驱动代码模块中的所有判定和变量的模块测试,自然会产生模块的完全覆盖。甚至在以下情况下也能获得表面的完全覆盖,即在可执行目标码运行时,由于其他部分代码的而改变变量的值,结果是没有执行某些判定路径,这样模块的某些部分或整个模块可能没有实际执行或到达。如果这种模块测试被误解为是结构覆盖测试,那么结果应该始终是100%结构覆盖,这意味着该活动将不能有效地检测意外的功能或意外的行为。

代码模块的测试,即结构测试(译者注:原文如此),是ED-12B/DO-178B所要求的,但结构测试不是ED-12B/DO-178B的一部分,它不等于ED-12B/DO-178B的结构覆盖分析或高、低层需求的测试。ED-94/DO-248B的常见问题#43和#44深入介绍了这种区别。

 

24.3 可追踪性是否可以补偿非生产性的结构覆盖分析?

把伪代码用作低层需求的软件开发人员经常声称,他们可以通过针对高层需求的评审和确保可追踪性来确保伪代码和源代码模块的内容是正确的,即使他们实际上是执行结构测试,而不是结构覆盖分析。虽然可追踪性对于确保满足需求的功能性并且只满足了该功能是有价值的活动,用可追踪性来补偿缺失适当的结构覆盖分析的说法包含几个问题。

首先,这种说法意味着已直接从高层需求开发伪代码(从而源代码),这不是一个推荐的做法,如本文件第21章所述。

其次,缺失真正的低层需求意味着没有针对高层需求评审真正的低层需求,也没有针对真正的低层需求真正评审源代码。这样绕开了ED-12B/DO-178B的评审活动,失去了这些评审提供的发现和排除错误的机会。

第三,即使在一个正常的开发生命周期中进行低层需求和源代码的评审的正常阶段中,仍然可能在源代码中存在死代码、停用的代码、意外的功能或意外的行为,因为由于人为错误,很少能100%有效地进行评审活动。ED-12B/DO-178B把结构覆盖分析作为一个补充活动,因为它可以捕捉在评审中被错失的源代码的问题,或捕捉可能由于数据和控制流的复杂性而不很明显的源代码的问题。因此,除了按ED-12B/DO-178B要求进行评审外,针对高层需求和真正的低层需求进行适当的结构覆盖分析是重要的。因此,ED-12B/DO-178B的评审和可追踪性活动不能替代结构覆盖分析,尤其是未能正常进行评审和可追踪性活动,而这正是上节提到的用伪代码表达所谓低层需求的情况。

 

24.4 指南

欧洲航空安全局认为,当伪代码而不是真正的低层需求被用于开发代码时,这阻止了正常的ED-12B/DO-178B的审查以及对低层需求和源代码进行跟踪活动,也阻止有意义的结构覆盖分析,取而代之的是结构测试。ED-12B/DO-178B不需要结构测试,它不能被用来取代ED-12B/DO-178B的结构覆盖分析活动。可追踪性不能用来弥补结构覆盖分析的不足。

欧洲航空安全局因此认为, -

1 – 只用伪代码来表达ED-12B/DO-178B的低层需求既不是要求的,也不是有益的,机载软件开发人员不应该仅使用伪代码表达低层需求,它不应该被纳入软件生命周期的数据。源代码应该从不是用伪代码表达的、不指定源代码结构的低层需求开发而来。

2 – 在存在其他软件生命周期数据(如数据字典,真正的低层次需求等)的情况下把伪代码用于低层需求时,仍然存在一些问题。在某些情况下,使用一种伪代码可能易于理解低层需求的控制流(如有一个if-then -else结构)。在这种情况下,开发商应该:

-对高层需求进行分析以表明低层需求中的伪代码没有引入任何不希望的功能或意外的行为。

- 对所有覆盖实际的低层需求的验证用例进行分析以表明它们没有覆盖伪代码的结构形式。

-进行分析以表明伪代码的使用(例如,由于else语句隐式使用)没有影响ED-12B/DO-178B6.4.3.c定义的活动。

- 进行分析以表明伪代码的使用(进行结构测试)没有影响ED-12B/DO-178B 6.4.4.3定义的结构覆盖分析。

在用英语口语中不常见的语义结构(如,case, default, until等)表达伪代码结构时,这不能被看作是帮助理解低层需求,而是被看作是太贴近真实的源代码,因此属于上述的第一种情况。

抱歉!评论已关闭.