我最近目睹了越来越多的问题,这些问题与本文中有关特征交点的解释类似。它的另一个术语是产品线,尽管我倾向于将它们归因于实际上不同的产品,而我通常以可能的产品配置形式遇到这些问题。
这类问题的基本思想很简单:您向产品添加了功能,但是由于其他现有功能的组合,事情变得有些复杂。最终,QA发现了一个罕见的功能组合问题,以前没有人想到过,应该是一个简单的错误修复程序甚至可能变成需要进行重大设计更改的问题。
此特征相交问题的维度令人难以置信。假设当前软件版本具有N
功能,并且您添加了一项新功能。让我们通过说每个功能只能打开或关闭来简化事情,那么您已经有2^(N+1)
可能要考虑的功能组合。由于缺乏更好的措词/搜索词,我将这些组合的存在称为特征相交问题。(奖励点数包含一个更明确的术语的参考答案。)
现在我要解决的问题是如何在开发过程的每个级别上解决这个复杂性问题。出于明显的成本原因,要想分别解决每个组合问题,直到成为乌托邦式的想法都是不切实际的。毕竟,我们有充分的理由尝试远离指数复杂性算法,但是将开发过程本身变成指数大小的怪物势必会导致彻底失败。
因此,您如何以系统的方式获得最佳结果,而不会花费任何预算,并且以体面,有用和专业上可接受的方式完成。
规范:当您指定一个新功能时,如何确保它与其他所有子功能都能正常使用?
我看到一个人可以结合新功能来系统地检查每个现有功能-但这将隔离其他功能。考虑到某些功能的复杂性,这种孤立的视图通常已经非常复杂,以至于它本身就需要一种结构化的方法,更不用说
2^(N-1)
由其他功能引起的因素了,而这些功能是一个人们乐意忽略的。实施:实施功能时-如何确保代码在所有情况下均正确交互/相交。
再次,我想知道纯粹的复杂性。我知道有多种技术可以减少两个相交特征的潜在错误,但是没有任何一种能够以任何合理的方式扩展。不过,我确实认为,在规范制定过程中采取好的策略应该可以在实施过程中解决问题。
验证:在测试要素时-如何处理这个事实,即您只能测试该要素相交空间的一小部分?
很难理解,单独测试一个功能不会保证没有错误的代码,但是当您将其减少到一小部分时
2^-N
,似乎数百个测试甚至都无法覆盖所有海洋的一滴水。 。更糟糕的是,最有问题的错误是由要素交集引起的,这些错误可能不会导致任何问题-但是,如果您不期望如此强烈的交集,那么如何测试这些错误?
尽管我想听听其他人如何解决这个问题,但我主要对更深入地分析该主题的文学或文章感兴趣。因此,如果您个人遵循某种策略,则在答案中包括相应的来源会很好。