当前位置: 首页 > news >正文

系统架构设计师论文分享-论单元测试方法及其应用

论单元测试方法及其应用

在这里插入图片描述

摘要

2023年2月,我所在的公司做了开发纱线MES系统的决定,该系统为国内纱线工厂提供SAAS服务,旨在提高纱线工厂的智能化和数字化水平。我在该项目中被任命为系统架构设计师,全面掌管该项目的架构设计工作。本文将结合我在该项目中的架构设计工作经验,详细介绍如何把单元测试方法应用在项目中。在该项目中,我们采用了多种单元测试方法,包括静态测试和动态测试。静态测试在不运行程序的情况下,通过代码分析、人工走查等方式检查问题和缺陷。动态测试在运行项目后,通过访问项目去发现问题点。单元测试提高了项目的稳定性,最终在2023年10月,该系统正式上线并运行至今,系统运行稳定,表现优异,得到了客户工厂和公司领导的一致赞扬。

项目背景

随着我国从制造业大国升级为制造业强国以及工厂数字化和智能化的持续推进,我所在的某地某科技公司基于自研的物联网平台相继开发了染整一体化和织布一体化等系统,这些系统上线后,得到了工厂的追捧,也为公司带来了丰厚的经济回报。基于此,我司于2023年2月开始研发纱线MES系统,该系统预算730万,建设工期10个月,涵盖纱线工厂从清花、梳棉、并条、精梳、粗纱、细纱到络筒的全流程工序,将为纱线工厂提供全面的生产管理解决方案以及基于数据的智能决策分析能力。该项目为物联网层次架构,整体分为感知层、网络层和应用层。其中网络层为公司已有的物联网平台,这次重点建设内容为感知层和应用层,感知层使用Golang语言开发,作为联网网关部署在工厂侧,负责工厂数据的采集和云端指令的下发。应用层为纱线MES系统主体,采用Java语言开发,使用Spring Cloud微服务架构,数据库使用Mysql,缓存使用Redis,前端框架使用vue.js,日志、监控和链路追踪采用skywalking、prometheus、grafana和ELK,最终通过devops的方式部署在kubernetes集群中。系统上线后,将提供以下:基础管理、数据接入、工单排产、数字孪生、工资计算、智控中心和数据分析等等功能,通过以上功能,可以全面提升纱线工厂的数字化和智能化水平,使其运营水平和生产效率得到质的提升。

论述内容

由于该项目涉及流程多,处理过程复杂,同时项目参与者众多,需求变动快。为了提升项目的稳定性,我们采用单元测试方法来保证项目的质量。单元测试分为静态测试和动态测试,静态测试是指在不运行程序的情况下,通过人工走查、代码工具分析等方式去发现程序中的错误和问题,从而修正错误。动态测试是指在启动系统的情况下,通过人工验证功能或者别的驱动方式去让系统运行起来,让系统的业务运转起来,从而发现系统运行中的错误和问题,动态测试通常会采用边界值分析、等价类划分、因果图、决策树、代码覆盖等方式实现,为了提高系统的稳定性,我们会对不同级别的功能采用不同的测试方式。除此之外,我们在每次迭代后,都会采用自动化测试的方式去进行回归测试,通过回归测试保证业务的连贯性。下面我会详细论述各种测试方法在本项目中的应用。

一、静态测试

静态测试是保证代码质量的一种重要方式,我们在项目中会采取两种方式进行静态测试:一、成员代码互审会议;二、通过CICD中的自动化代码分析工具以及Idea中的代码审核插件。每次迭代中,当代码要提交测试前,小组就会举行代码评审会议,把本次迭代修改的代码逻辑给大家讲述一遍,大家一起去发现代码中的缺陷和问题,旨在提高代码的质量和可修改性以及可扩展性。当代码开发者修改之后,再次提交代码时,需要经过其他开发者的审核,在这个过程中,审核者要严格审查代码,否则具有同等的责任。除此之外,我们公司统一安装了Idea中的代码扫描工具,只要通过扫描才能进行代码提交,否则该代码会勒令修改,直到达到扫描标准。当代码提交后,CICD会自动化再次扫描代码,并生成报告,防止有问题的代码进入后续流程。我们公司就是通过这种方式,显著提高了代码的质量,在系统运行前就对系统的质量进行了把关。

二、动态测试

动态测试是测试团队的工作重心,动态测试的主要目标是提升系统的质量,发现系统存在的问题。所以,在项目的需求阶段,测试团队就要参与进来,识别测试需求,进行测试案例设计,经过测试评审之后,当完成系统开发之后,就可以进行动态测试。动态测试的种类很多如等价类划分、边界值分析、覆盖测试、基于因果图、基于决策树、基于正交等等方式,我们在设计测试案例时,主要采用了边界值分析和覆盖测试,边界值分析比较容易理解,比如我们在录入工厂的工序时,1-10的范围是合法的,测试人员在测试时就要测试边界值如0、1、2、9、10、11等等,看系统是否正常运行并进行响应。我们在进行覆盖测试时,首先要决定使用哪种级别的覆盖级别,覆盖测试分为:语句覆盖、条件覆盖、分支覆盖、条件分支覆盖、组合覆盖、路径覆盖等等。其中语句覆盖最弱,路径覆盖最强。我们在选择覆盖测试时首先要对系统模块的重要性做一个分析,因为都选择路径覆盖,成本太高,耗费时间太长,不具备可操作性。所以我们根据重要性的不同采用不同级别的覆盖测试方式,比如,数据接入模块是系统的核心,我们在进行动态测试时就要采用路径覆盖,确保流程没有任何问题,避免造成严重的故障。又比如,消息通知模块不在主流程中,它的执行过程对主流程影响不大,并且消息保存再数据库中,也可以重新发送,所以在测试时就采用条件覆盖,降低测试级别,保障测试进度。当动态测试进行完成后,测试人员需要生成测试报告,该报告详细描述测试的全部信息,以便其他人员查看,通过发现的问题,要给对应的负责人提bug,让其在规定时间内完成。

三、回归测试

回归测试是每次迭代的一种重点,当进行一个迭代时,测试人员首先要分析这次迭代对现在系统业务的影响,并把影响模块和范围标注出来,形成回归测试范围,然后根据回归范围进行回归测试用例的挑选,形成回归测试用例。当本次迭代完成后,测试人员通过自动化脚本的方式执行回归测试用例,并生成回归测试报告。通过回归测试,可以保证现有改动不会影响老的业务,可以让业务的持久性和稳定性得到保证。

总结

通过采用了多种单元测试方法,我们保证了系统的开发进度和质量。最终在2023年12月,该项目正式投产并对外提供服务,至今稳定运行,各项功能和性能指标均远远超过了客户的预期,得到了客户工厂和公司领导的一致赞扬。虽然项目取得了成功,但是也遇到过一些问题,在项目初期,由于产品经理对纱线业务的不熟悉,导致很多功能的调整和返工,这打击了开发人员的士气,基于此,我提出两个解决方式:1、派产品进入工厂一线,与工人交流,熟悉操作流程,彻底摸清纱线业务,保证需求质量;2、开发人员也要学习纱线业务,遇到问题反馈给产品,同时在做设计时,采用灵活的设计模式,为需求的变动留下可操作的空间。我们通过这两个方法解决了这个问题,保证了项目的进展。通过这次实践,我不仅学习到了测试相关技术,也锻炼了自己的架构和管理能力,我意识到只有不断地学习和实践才能让知识融汇于自己的技术体系之中,才能在未来的工作中游刃有余、勇担大任,为祖国的信息化建设贡献自己的力量。

相关文章:

  • SolidWorks 镜像实体操作指南:解决镜像失败的常见问题
  • Oracle/PostgreSQL/MSSQL/MySQL函数实现对照表
  • SQL Server for Linux 如何实现高可用架构
  • 多模态融合相机L3CAM
  • 腾讯云TSE注册中心实战:Nacos高可用集群搭建与流量治理避坑指南
  • 如何给程序员用户画像?
  • MySQL 第十一讲---进阶篇 索引(上)
  • 【前端】⭐️通过vite构建项目
  • SQL学习笔记4
  • android zego拉插件到本地
  • MySQL之事务原理深度解析
  • Imbalanced-learn 5. Ensemble of samplers
  • Springboot整合Elasticsearch及常用方法大全
  • 鸿蒙图片相似性对比
  • dp进阶,树形背包(dfs+01)
  • 临床项目范围管理:确保项目聚焦与成功交付
  • go写前端打包的自动化工具
  • [特殊字符] Python 批量合并 Word 表格中重复单元格教程(收货记录案例实战)
  • 概率密度基本概念
  • 金蝶云星空客户端自定义控件插件-WPF实现自定义控件