IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> 软件质量需要静态代码分析和动态测试 -> 正文阅读

[开发测试]软件质量需要静态代码分析和动态测试

召回活动增多、交付延迟、难以按时交付承诺的功能:软件质量不明显。只有通过一致的行动、遵守标准以及使用成熟的测试和质量保证工具,才能开发出好的软件。糟糕的软件会导致金钱损失和企业形象的恶化。嵌入式软件更为关键,因为它主要用于安全关键应用程序。在这里,软件错误可能危及人的生命,因此必须不惜一切代价避免。为此,ISO 26262、IEC 61508 或 DO178-C 等标准对软件的开发和测试质量有严格的要求。

为确保质量,静态代码分析程序和动态分析(包括单元测试)期间对可执行软件的测试都是必要的。由于这两种方法中的每一种都只发现了现有缺陷的一部分,因此两种互补的方法都是必要的。

在开发早期使用静态分析工具

动态分析需要执行代码,而静态分析则不需要。因此,可以在实施阶段的开发过程早期使用静态分析工具。出于这个原因,静态代码分析对项目的成功做出了巨大贡献——发现错误越早,修复的成本效益就越高。

在不编写测试用例的情况下,静态代码分析工具会检查代码的语法、语义、控制流和数据流异常、并发问题以及编程规则。发现了许多错误和安全漏洞。

建议从开发开始就定期对代码进行静态分析 - 最好由个人开发人员在签入他的代码之前进行。当静态代码分析不再指示任何错误时,才将代码提交到进一步的验证步骤(例如代码审查、单元测试或集成测试)是有意义的。通过此程序,可以显着减少交货前最终检查期间的错误消息数量。

静态分析工具在使用 C 和 C++ 等语言的嵌入式系统的开发中特别有用。这些语言为开发人员提供了很大的自由——不幸的是,编写错误的源代码也是如此。诸如空指针异常、缓冲区溢出或全局变量问题之类的错误很常见。静态代码分析可以避免此类错误。

动态测试也是必要的

一旦软件可以执行,静态分析就应该辅以动态测试。

动态测试主要用于证明系统的功能正确性。通常,它们会在第一个代码组件可执行后立即执行。这些测试的一个重要部分是代码覆盖率分析,它确保代码的所有(重要)部分都将被测试。

代码覆盖工具,如来自 Verifysoft Technology 的 Testwell CTC++,在源代码中的所有相关点(代码检测)放置计数器,以测量这些代码部分是否在测试运行期间被执行。由于嵌入式系统通常只有有限的内存空间,因此该仪器的开销保持很小很重要。此外,代码覆盖工具对性能的影响应该很小,以避免在时间关键的系统中出现故障。覆盖工具通常集成到开发环境中——代码检测是自动的。测试运行后,覆盖分析器生成报告,允许详细查看哪些功能已执行,哪些未执行。

对于安全关键的软件代码覆盖率是强制性的。标准 DO-178C(航空)、ISO 26262(汽车)、EN 50128(铁路)和通用标准 IEC 61508 规定了高达修改条件判定覆盖 (MC/DC) 的高代码覆盖水平,以证明所有条件或软件中的决策。

需要静态分析和动态测试才能获得良好的质量

为了保证高质量,静态分析、软件执行期间与代码覆盖率相关的充分测试(动态测试)的组合是必要的。我们的家用电器项目的实际例子说明了为什么需要使用这两种方法以及为什么只使用一种测试或分析技术可能会导致致命的后果。

制造商为洗衣机产品线的控制单元开发了软件。它是用 C 编写的,应该在微控制器上运行。这个相同的控制单元和相同的软件旨在用于该产品线的所有机器;因此,将根据机器类型打开或关闭特定功能。例如,更昂贵的机器配备了一个传感器,可以测量衣物的“污染程度”,并使程序能够自定义主洗周期的持续时间。没有传感器的更简单机器的洗涤时间将保持不变。

在 MC/DC 代码覆盖率为 100% 的规定下开发了测试用例,以确保足够的软件质量。制造商认为静态分析是可消耗的。

需要查看源代码(图 1)来描述由此产生的问题。
在这里插入图片描述
图 1 中的函数根据所选的洗涤程序以及衣物的负载大小和“染色程度”计算洗涤周期的持续时间。与此功能相关的是,下面图2中列出的测试用例是在模块测试期间执行的,其中“染色程度”是测试期间评估的一个因素。“产品版本”对这个结果的影响程度将在后面讨论。
在这里插入图片描述
然而,所考虑的功能的测试覆盖率仅为 71%。测试覆盖率报告(图3)连同测试结果立即发现了一个问题:第31行开头带有if条件的程序路径
在这里插入图片描述
尽管执行了相应的测试用例(第 5 号和第 6 号),但未通过。此外,这些测试用例的实际测试结果与预期结果不同。测试覆盖率报告说明第 28 行的 if 条件已被传递。
在这里插入图片描述
代码中这两个 else if 条件的交换消除了错误。现在,新的测试运行导致 95% 的测试覆盖率与匹配的实际和预期测试结果。

测试覆盖率报告显示,需要额外的测试用例才能达到 100% 的测试覆盖率:
在这里插入图片描述
在缺少测试用例的情况下,达到了规定的 100% 的测试覆盖率。

在成功完成集成测试并解决了一些小问题后,洗衣机投入生产并交付使用。过了一段时间,不满意的客户开始抱怨。部分机器洗涤效果不佳;这是由于洗涤周期提前终止。还有报道称机器将主洗涤周期延长了几个小时。事实证明,复制这种行为是不可能的。

最初,怀疑染色传感器出现故障。因此,它们在保修期内被更换。但是,很快就很清楚这并没有解决问题。

在仔细检查投诉案例后,很明显它们仅限于产品线中的特定机器类型。因此,考虑了软件错误的可能性,并委托外部服务提供商运行静态代码分析。

型号 12 的所有型号询问染色传感器和所有其他型号在恒定染色值下工作的规定已被错误执行。如图 4 所示,函数 getStainingLevel() 中模型 12 的变量“y”保持未初始化状态,并传递一个未定义的染色度值。
在这里插入图片描述
相关实战:https://www.99qibang.cn/information/613e9601902247079a8d9a784fd0404a.html
https://www.99qibang.cn/information/600cf4d9377841d0add01810aa8d9ec0.html
https://www.99qibang.cn/information/7749e33db459425691d32a7a821d0b7e.html
https://www.99qibang.cn/information/8b975d88277047d3bde8ee4dc5d8712f.html

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2021-11-23 12:39:57  更:2021-11-23 12:40:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/18 4:25:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码