新闻中心

EEPW首页 > 测试测量 > 设计应用 > 降低实现科学计算算法的风险

降低实现科学计算算法的风险

作者: 时间:2017-02-06 来源:网络 收藏


算法开发工作流程
在传统的手工编码工作流程中,会用C代码重写原始科学计算算法和测试框架,并且必须对C代码进行测试和调试。在新的工作流程中,C代码会从技术计算软件中自动生成,从而节约了时间并可防止编码错误(图3)。


图3.传统的手工编码工作流程(左)和新的自动代码生成工作流程(右)

在一个典型的情景中,自动代码生成工作流程可将开发和测试最终产品中实现的算法的总时间缩短近40%(图4)。


图4.各个流程阶段花费时间百分比

对于这个特定的项目,新的工作流程的开始是工程团队在科学计算软件中快速探索新创意。在确定最佳方法后,他们使用同一款软件来建立一个通用序列估算算法的原型。然后进一步扩展该算法,以用于MWD系统的地面PC上。在进行到下一个阶段之前,工程部门使用已纳入同一软件中的测试框架内的多种测试案例来测试算法,以验证它是否符合要求和规范。

通过自动代码生成来实现
传统手工编码流程的许多缺点迫使工程团队去寻找一种替代流程来开发序列预测算法。首先,手工编码非常耗时,并且在紧张的截止日期临近时,为了留出时间给重要而又耗时的集成测试,团队需要将开发时间缩短大约30%。其次,程序员可能会在原始科学计算算法细节上出现解读错误,从而将缺陷引入手写的C代码,造成需要额外的时间来进行调试和修复。
在新的工作流程中,通过自动代码生成可以消除这些缺点。在科学计算软件中,工程师们的工作侧重于在较高层次上开发和微调算法,不用过多地困在较低层次的实现细节上。然后,该团队只需一键点击就可以从原始设计自动生成C代码。由于该流程是自动执行的,因此在将算法转换为C代码时不会出现解析错误的情况。为了生成代码,需要花些时间来微调原始科学计算算法,但这属于一次性任务,如果在开发设计的开始阶段就考虑到代码生成,则可以进一步简化这项任务。
维护和测试算法
在传统的工作流程中,在开发后期对需求进行更改会影响原始设计及其实现。对算法的更新必须反映在C代码中,使用两种语言和环境维护并测试同一个算法及测试框架的成本会迅速成为阻碍因素。在开发周期的后期发现缺陷时,开发人员需要更新该算法的原始科学计算代码和C代码版本两者,还需要创建两套测试方案来验证缺陷是否已经解决。当然,还存在两个代码库产生差异的风险。时间限制经常会促使团队仅更新C代码。出现这种情况时,团队会再次受困于用C代码手工编码的所有缺陷,直到两个代码库一致。
使用自动代码生成,工程团队则可避免这些潜在的错误。当需求发生变化时,工程师只需要更新原始科学计算代码,然后重新生成C代码,将新变化反映到实现中。具体来说,团队无需对生成的C代码进行任何更改,因为在重新生成代码时这些更改会被覆盖。此外,工程团队也不再需要开发第二个测试框架,因此节约了额外的时间。用于测试科学计算代码的原始测试框架可以重用来测试C代码。

将算法集成到地面系统
C代码单元测试一结束,团队便将C代码编译到一个动态链接库(DLL)。然后,将DLL集成到地面解码软件。最后,小组在公司的基于C代码的测试基础架构中执行整个地面解码算法的系统测试。
在测试期间如果发现缺陷,小组发现很容易查明错误的源头。由于工程师将序列预测算法隔离到一个DLL中,因此很容易确定缺陷是集成问题的结果还是算法本身所导致。此外,C代码会映射回原始科学计算代码,并为您提供了在C代码中嵌入技术计算代码作为备注的选项,进一步加强了原始科学计算算法与最终实现之间的可追溯性。
结果
● 缺陷数量减少:该项目计划分配了三周时间来修复十个缺陷,而在生成的C代码中仅找到四个缺陷。因此,团队能够将多出的时间分配给项目的其他环节,例如整个地面系统的系统测试。
● 修复缺陷所需的时间缩短:由于整个功能测试框架在科学计算软件中可用,因此与传统的手工编码相比,团队能够更快地找到缺陷并予以解决。科学计算软件中提供的分析和调试工具加速了此流程。这些工具中有许多也用于测试和调试C代码。
● 代码和流程可以在未来的项目中重用:序列预测算法可以在未来的项目中重用。该算法可以以现有的形式随时现用,也可以在通过代码生成采用C代码重新实现之前,在科学计算软件中进行快速更新以用于其他应用情形。
结论
通过使用自动代码生成,工程师成功采用了一种新的工作流程。这种流程可以避免耗时且容易出问题的手工编码。地面解码软件(包括序列预测算法)接近最终版。在项目上实现的时间和成本节约使公司可以探索更多的机会,将自动代码生成工作流程应用到广泛的未来项目中。

上一页 1 2 下一页

评论


技术专区

关闭