医疗设备使用的软件代码比以往任何时候都多。然而,虽然软件为医疗设备提供了更多的功能和灵活性,但它也带来了额外的复杂性,从而增加了故障风险。今天大约 20% 的医疗设备召回是由软件缺陷引起的,而且这个数字还在上升。
联邦药物管理局 (FDA) 监督在美国销售的医疗器械的质量,希望发布医疗器械的公司必须获得 FDA 510(k) 许可。在调查上市后失败的同时,FDA 更加注重预防,并建议将静态代码分析作为方法的一部分。
复杂缺陷检测的价值
现代静态代码分析工具使用复杂的技术来分析源代码以检测潜在的软件缺陷。工具尝试分析代码中的所有逻辑路径,提供比传统测试形式更多的路径和代码覆盖率。静态分析工具不需要任何测试用例,甚至可以对代码片段进行操作,发现潜在的程序崩溃、缓冲区溢出、内存泄漏、数据损坏等。静态分析通常运行迅速,并且可以在相对较短的时间内报告一系列潜在的错误(参见图 1)。
图 1:静态分析可以在软件开发生命周期的早期发现潜在问题。
由于各种原因,静态分析工具确实会产生一些错误的结果,通常称为误报和误报。当静态分析工具认为有错误而没有错误时,就会发生误报。误报是应该报告错误但没有报告。
大多数现代静态分析工具必须在可接受的精度水平和可接受的运行时间之间找到尽可能多的好结果之间进行微妙的权衡。换句话说,在大量误报中发现每个问题的嘈杂工具的价值可能有限,就像只发现一小部分问题的高度准确的工具一样(参见图 2)。
图 2:静态分析工具不会发现所有错误(误报),并且会报告一些并非真正的错误(误报)。使遗漏的错误和错误报告最小化的是良好的分析算法和适当的分析调整。
现代静态分析工具已经改进了分析技术,可以以足够的准确度生成有用的结果。大多数组织认识到静态分析工具虽然不完善,但在大多数软件开发过程中都提供了重要的价值。
充分利用静态分析工具
现代静态分析工具对大多数医疗设备制造商来说都是相对较新的。对于许多首次在其流程中实施静态分析的组织而言,了解最佳实践有助于在最短的时间内以最少的返工量充分利用工具。
调音
静态分析工具提供了适用于所有类型代码库的通用设置,虽然它们可以立即发现好的错误,但只需针对代码调整工具就可以大大改善结果(参见图 3)。这有助于找到更多相关的错误并减少通过误报进行的搜索,这会浪费时间并导致开发人员疲劳。
图 3:几乎每个静态分析部署都应该从一个可靠的调优项目开始。调整会带来更多更好的错误和更少的误报。
许多静态分析工具都有自己的源代码解析器,它们可能无法理解或无法访问所有代码。将系统配置为分析所有代码或调整系统以识别分析时无法访问的接口——例如单独验证的第三方库——确保结果是最佳和可重复的。实现 100% 的代码覆盖率对于堵住可能增加风险的漏洞非常重要。
调优有助于发现真正的问题。例如,告诉静态分析工具内存分配机制是如何工作的,或者程序何时退出,这样工具就不会继续沿着特定路径跟踪问题,这有助于发现新问题并剔除错误问题。这可能是一个繁琐的过程,需要特定的专业知识,但从长远来看会有所回报。
调优通常是一个持续的过程,应定期审查,以确保一致地使用配置并跟上代码和环境的变化。如果不进行持续调整,开发人员可能会错过一些重要的错误,并且团队将浪费时间检查误报。
配置检查器
许多静态分析工具附带数百个检查,涵盖从并发性到安全性到 C 和 C++ 陷阱的一系列问题。许多人不一定适用于给定的应用程序。例如,为什么在分析 C 代码时打开 C++ 特定检查?确定正确的检查器集需要一些试验和错误以及专业知识,以了解什么是最划算的。需要考虑的一些领域是:哪些类型的检查器会导致真正的问题,哪些检查器容易产生噪音,哪些检查器可以配置为有用。一旦一个好的集合最终确定,将其锁定,以便记录并始终如一地运行。
在一个说明检查器价值的真实示例中,客户希望确保他们的静态分析系统始终如一地运行,并要求在系统出现差异时立即收到警报。开发人员创建了一个测试套件,其中包含每个检查器的测试用例。每当他们更改系统时,他们都会运行测试套件以确保每个检查器确实按预期运行。如果结果失败,他们知道他们有需要解决的配置问题。如果测试通过,开发人员会将结果放入他们的设计历史文件中,以证明系统按照他们记录的方式工作。该测试套件不仅为客户提供了责任和保证,而且还降低了他们的维护和管理成本。
过程
一旦实现了全面覆盖、调整了系统并定义了分析的广度,开发人员就可以开始更有效地使用静态分析。对于医疗设备,一个典型的目标是检查报告的每一个问题。每个问题都可以通过多种不同的方式进行分类:
一个必须解决的问题。它将有一个适当的优先级来描述它的重要性以及在软件开发过程中必须如何解决它。
正确标记的问题,但不太可能表现为现实世界的错误,通常是因为该工具做出了不正确的环境假设。这些类型的分类标志着潜在的调整机会。
被错误地标记为错误的问题,无论是误报还是分析工具中的彻底错误。这些问题也预示着调整机会。
这些案例中的每一个都必须仔细审查。尤其应检查误报的正确性。每个问题都需要自由文档,并且需要一个强大的数据保留政策来实现全面问责。如果在流程后期发现重大错误,这些分类缺陷报告可能会在审计过程中或在回顾中重新审查。组织通常会回到静态分析缺陷以查看主要错误是如何通过该过程的。它可能标志着一个中断的过程或一个调整分析以找到更好的错误的机会。
使用模式
静态分析通常在开发人员沙箱构建中和/或通过中央构建运行(参见图 4)。至少,在发布之前分析和评估结果是有意义的。但是,软件开发组织不应该等到最后一刻才解决可能存在的大量错误,特别是当这些错误本可以作为规范流程的一部分更早地解决时。否则,团队可能会错过最后期限并在最坏的时间更改代码。
图 4:静态分析可以根据业务需求、环境和使用的工具以多种不同方式部署。
组织通常将静态分析自动化作为夜间构建或持续集成构建的一部分。通过这种方式,可以经常审查结果并在结果出现时加以处理。其他人则通过使开发人员能够在沙盒环境中分析他们正在处理的代码来更早地执行错误发现过程。开发人员可以立即获得有关其代码更改质量的反馈,然后在签入前修复和验证缺陷。循环时间越快,代码库中的代码就越干净。
无论在哪里运行,技术环境都需要保持一致,以确保结果相同。中央和开发人员构建需要保持一致。对分析设置的轻微更改可能会导致报告更多结果,并且组织不需要审查更多可能主要是误报的问题的额外负担。为开发人员创建一个高度自动化的系统将有助于确保一致性。
许多医疗设备公司不仅将源代码检查到其存储库中,还检查其实际环境。这样,可追溯性是可用的。静态分析可执行文件和所有相关配置、状态和其他相关项目也应定期检查,以确保一致性和问责制。
处理积压
大多数组织在开发大量代码后开始使用静态分析。通常,代码越多,报告的错误就越多。因此,在推出静态分析时,管理层必须预先分配时间来处理最初积压的错误。
最好在开发周期中尽早进行静态分析,以尽量减少积压,然后创建一个流程来处理积压,与由于日常代码更改导致的日常流入错误流分开处理。审查缺陷需要时间,应该在开发人员之间适当分配,或者外包给一个单独的团队来挑选需要工作的缺陷。
文化
所有开发团队在技术技能水平以及团队中每个人如何定义质量方面都存在差异。在培训和指导课程中,最常见的论点是:
“是的,这绝对是一个错误,但代码一直在工作,所以我们不想更改它。”
“我们不应该让这样的代码出现在我们的产品中。”
“这种情况在现实生活中永远不会发生。”
“如果我们将来将产品移植到另一个平台,这将成为一个错误。”
“如果你在这上面多花几分钟,你就会发现这显然是一个错误。”
静态分析将提供各种类型的错误,从必须解决的关键问题到警告。一些组织希望投机取巧,只为可证明的错误更改代码。其他人则主动清理代码并提高质量,甚至“修复”警告。团队应该在处理静态分析结果的方式上保持一致。审查结果、培训/指导和频繁的沟通是成功的关键。
如果使用得当,静态分析已被证明在提高安全关键代码的软件质量方面非常有效。尽管不严格要求批准,但 FDA 承认其有效性。通过适当的规划、专业知识和现实的投资,静态分析应该会产生可观的投资回报,并有助于向市场提供安全的代码。
审核编辑:郭婷
全部0条评论
快来发表一下你的评论吧 !