鑫景福致力于满足“快速服务,零缺陷,支持无理由退换”PCBA订购单需求。
PCBA方案设计
PCBA方案设计
工程师讲解PCB设计中软件缺陷的查找
22Sep
Andy 0条评论

工程师讲解PCB设计中软件缺陷的查找

工程师讲解PCB设计中软件缺陷的查找


本文将介绍如何避免那些隐藏但常见的错误,并介绍几种帮助工程师发现PCB软件中隐藏错误的技巧。 大多数软件开发项目依靠代码检查、结构测试和功能测试的结合来识别软件缺陷。 尽管这些传统技术非常重要并且可以发现大多数软件问题,但它们无法检测当今复杂系统中的许多常见错误。

结构测试或白盒测试可以有效地发现代码中的逻辑、控制流、计算和数据错误。 这种测试需要清楚地了解软件的内部工作(因而称为“白盒”或“玻璃盒”),从而了解软件结构的细节。 它检查每个条件表达式、数学运算、输入和输出。 由于需要测试的细节很多,结构测试一次检查一个软件单元,通常是一个函数或类。

代码审查还使用复杂的技术来发现实现缺陷和潜在问题。 与白盒测试一样,评审通常针对每个软件单元进行,因为有效的评审过程需要集中且详细的评审。

PCB design

与评审和白盒测试不同,功能测试或黑盒测试假设不了解软件实现,并测试由受控输入驱动的输出。 功能测试由测试人员或开发人员编写的测试程序组成,这些测试程序指定与一组特定的程序输入相对应的预期程序输出。 测试运行后,测试人员将实际输出与预期输出进行比较,以发现问题。 黑盒测试可以有效地找出程序最常用功能中未满足的需求、接口问题、性能问题和错误。

虽然这些技术可以结合起来找到隐藏在特定软件程序中的大多数错误,但它们也有局限性。 代码审查和白盒测试一次只关注一小部分代码,而忽略系统的其他部分。 黑盒测试通常将系统视为一个整体,忽略实现的细节。 有些重要的问题只有关注它们在整个系统中的相互作用才能发现; 传统方法无法可靠地识别这些问题。 必须对软件系统进行整体检查,找出特定问题的具体原因。 由于通常不可能彻底分析程序的每个细节及其与代码所有其他部分的交互,因此分析应重点关注程序中已知会导致问题的特定方面。

本文将探讨三个潜在的问题领域:

  • 堆栈溢出

  • 竞争条件

  • 僵局


读者可以在线阅读本文的第二部分,其中将探讨以下问题:

  • 时序问题

  • 可重入条件


所有上述问题在使用多任务实时设计技术的系统中都很常见。


堆栈溢出:

处理器使用堆栈来存储临时变量、向被调用函数传递参数、保存线程“状态”等等。 如果系统不使用虚拟内存(换句话说,它无法将内存页转移到磁盘以释放内存空间用于其他用途),则堆栈将固定为产品出厂时的大小。 如果由于某种原因堆栈超出了程序员分配的数量,程序就会变得不确定。 这种不稳定性可能会导致严重的系统故障。 因此,确保系统在最坏的情况下能够分配足够的堆栈非常重要。

确保永远不会发生堆栈溢出的唯一方法是分析代码,确定程序在各种可能情况下的最大堆栈使用量,然后检查是否分配了足够的堆栈。 测试不太可能触发特定的瞬时输入组合,从而导致系统出现最坏的情况。

堆栈深度分析的概念很简单:

  • 为每个独立线程创建一个调用树。

  • 确定调用树中每个函数的堆栈使用情况。

  • 检查每个调用树,确定从树根到外部“叶子”的哪条调用路径需要最多的堆栈。

  • 添加每个独立线程调用树的最大堆栈使用量。

  • 确定每个中断优先级内每个中断服务例程 (ISR) 的最大堆栈使用量并计算其总和。 但是,如果ISR本身没有堆栈并使用被中断线程的堆栈,则应将ISR使用的最大堆栈数添加到每个线程的堆栈中。

  • 对于每个优先级,添加中断发生时用于保存处理器状态的堆栈数量。

  • 如果使用RTOS,则添加RTOS自身内部使用所需的最大堆栈数(与应用程序代码引起的系统调用不同,这已包含在步骤2中)。

此外,还有两个重要问题需要考虑。 首先,仅从高级语言源代码构建的调用树可能并不完美。 大多数编译器使用运行时库来优化常见的计算任务,例如大整数的乘法和除法、浮点运算等。这些调用仅在编译器生成的汇编语言中可见。 运行时库函数本身可能会使用大量的堆栈空间,必须将其包含在分析中。 如果使用C++语言,则以下类型的函数(方法)也必须包含在调用树中:构造函数、析构函数、重载运算符、复制构造函数和转换函数。 所有函数指针也必须被解析,并且它们调用的函数必须包含在分析中。

---- PCB组装、PCB设计、PCB加工厂家的介绍工程师讲解了PCB设计中软件缺陷的寻找。

点击
然后
联系