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

单线程测试模块

SFP/QSFP光模块终测软件 3天吃透分步学习计划(新人友好,可落地,3天后能给同事讲清整套逻辑)

整体目标:搞懂程序启动→界面交互→初/终测双流程→I2C模块读写+仪表SCPI通信→结果判定+日志完整链路,能回答同事提问、简单改bug、看懂现有业务逻辑。
前置准备:打开VS加载QSFP模块终测检查软件.sln,只聚焦SFP模块终测检查软件项目文件夹,Backup、.vs、升级日志全部忽略。

第1天:搞懂项目整体结构 + 程序执行入口(半天就能完成,建立全局认知)

上午任务:梳理所有文件分工(30分钟)

对照之前的文件说明,逐个标注每个cs文件定位,自己在记事本简单填表:

文件名定位(界面/全局变量/业务/驱动/工具)核心作用一句话
Program.cs程序入口软件最先启动,控制打开登录窗体
Login_Form.cs界面层账号登录校验,登录成功跳转主测试页
Main_Form.cs主界面(核心)测试按钮、进度条、日志、初测/终测总流程入口
SetUp_Form.cs配置界面仪表IP、串口、上下限阈值配置页面
GlobalVarFun.cs全局变量全局模式、模块类型、报错信息、跨窗体共享数据
SFPTest.cs / TestQSFP.cs业务逻辑层封装所有单项测试步骤、参数判定OK/NG逻辑
I2C_xxx.cs底层驱动读写光模块寄存器,读取电压、电流、温度、DDM信息
KeysightB86120CS.cs仪表驱动SCPI指令控制是德仪表,收发测试数据
SimpleLogger.cs工具类界面打印日志、本地写入日志文件、异常收集
Common.cs / Bit.cs通用工具字节、16进制、字符串转换、校验计算

中午任务:跑通完整软件,肉眼看懂运行流程(30分钟)

  1. 点击VS启动按钮运行程序,记录全过程:
    ① 登录弹窗 → ② 进入主界面选择SFP/QSFP型号 → ③ 选择初测/终测模式 → ④ 点击开始测试按钮
    ⑤ 观察进度条、计时、日志文本框变化,看程序自动跑完所有步骤,最后出OK/NG结果
  2. 重点标记2个关键分支:
    • firstTest:初测流程入口函数FirstTestProcess()
    • finalTest:终测流程入口函数FinalTestProcess()

下午任务:顺着代码入口溯源,理清执行顺序(1.5小时)

  1. 打开Program.cs,看懂Application.Run(new Login_Form()),理解程序启动顺序
  2. 打开Login_Form.cs,找到登录按钮点击事件,看懂:账号校验通过后,关闭登录页、打开Main_Form主窗体
  3. 进入重中之重 Main_Form.cs
    • 找到【开始测试按钮】的Click点击事件(就是你截图里这段代码所在方法)
    • 逐行梳理这段逻辑:
      清空报错→修改按钮颜色文字→进度条初始化→判断testType分支→调用对应测试函数→测试结束统计耗时、停止计时器
    • VS小技巧:右键函数名 →转到定义,一键跳进FirstTestProcess()内部,不用手动翻找文件
  4. 今日收尾总结(写3行即可,方便对接同事)
    1. 软件是C# WinForms上位机,用于SFP/QSFP光模块产线单机终测
    2. 程序启动:登录页→主测试页,点击启动自动区分初测、终测两套测试流程
    3. 整体三层架构:界面交互层、测试业务逻辑层、硬件通信驱动层

第2天:深挖两大测试流程 + 全局变量逻辑(核心攻坚日,吃透业务)

上午:吃透全局变量GlobalVarFun.cs(40分钟)

把所有核心静态变量逐个弄懂用途,这是看懂分支判断的关键:

  1. GlobalVarFun.testType:字符串,firstTest=初测、finalTest=终测,决定走哪套流程
  2. GlobalVarFun.moduleType:区分当前被测模块是SFP还是QSFP,适配不同寄存器、测试阈值
  3. GlobalVarFun.errorMessage:字符串,收集所有测试不良原因,最终汇总展示不良信息
  4. 各类阈值变量:测试上下限,用来对比实测值,判断合格/不合格

中午:拆解初测 FirstTestProcess() 完整步骤(1小时)

  1. 进入函数内部,按顺序记录每一步动作:
    • 界面进度条赋值刷新
    • 第一步:仪表、I2C通信初始化(连接工装硬件,自检通信是否正常)
    • 第二步:读取光模块基础信息、SN序列号、厂商信息
    • 第三步:逐项执行TX发射参数测试、RX接收参数测试、DDM监控参数读取
    • 第四步:每一项测试完成自动和阈值对比,异常就拼接内容到errorMessage
    • 第五步:单步修改进度条,打印实时日志
  2. 遇到调用SFPTest/TestQSFP里的方法,用「转到定义」跳过去,看懂这个单项测试测什么指标

下午:拆解终测 FinalTestProcess() + 对比两个流程差异(1.5小时)

  1. 用完全相同方式梳理终测完整步骤
  2. 重点整理表格(你给同事讲解的核心素材)
    | 项目 | 初测 firstTest | 终测 finalTest |
    | ---- | ---- | ---- |
    | 测试定位 | 半成品来料初步检测 | 成品出厂最终全项检测 |
    | 测试项数量 | 少,部分关键项快速筛查 | 项目最全,完整合规检测 |
    | 判定严格度 | 宽松,排查明显坏品 | 严苛,所有指标必须落在阈值内 |
  3. 弄懂日志机制SimpleLogger:测试过程实时往文本框打印、同时本地存日志文件,方便追溯不良品
  4. 小实操验证(检验自己有没有看懂)
    在某一个测试步骤末尾加一行日志打印代码,运行软件,确认日志能按你的预想顺序输出,验证流程理解无误

第3天:吃透底层硬件通信 + 排坑 + 整理汇报文档(出师日,能独立接活、回复同事)

上午:两大底层驱动通信逻辑拆解(1.5小时)

1)I2C读写类(光模块内部寄存器交互)
  • 作用:光模块内部参数都存在I2C寄存器地址里,软件读寄存器拿到电压、电流、温度、偏置电流、告警状态
  • 看懂两个核心方法:读寄存器ReadI2C()、写寄存器WriteI2C()
  • 业务意义:所有DDM监控数据、模块基础信息全部来源于I2C读取
2)Keysight是德仪表SCPI驱动类
  • 通信方式:TCP Socket网络通信
  • 原理:软件发送标准SCPI字符串指令,控制光功率计、BERT误码仪、电源等仪表下发激励、采集实测数据
  • 举例:发送一条读取光功率指令,仪表返回数值,软件再做合格判定
  • 分清:I2C是和光模块本身通信;SCPI是和外部测试仪表通信

中午:梳理配置页面 SetUp_Form.cs(40分钟)

  1. 看懂配置项:仪表IP地址、端口、串口选择、各项测试上下限阈值
  2. 理解逻辑:配置参数保存后,全局变量读取配置,后续测试流程统一调用参数,不用硬编码写死数值

下午:整理整体总结文档 + 准备对接同事话术(1小时)

一、自己整理极简整体流程图(文字版即可)
程序启动→账号登录→主界面选择模块型号+测试模式(初/终测)→点击启动测试 ↓ 初始化I2C通信 + 是德仪表SCPI通信,连通硬件工装 ↓ 分支1(初测):逐项关键指标测试→数据对比阈值→收集不良信息→刷新进度+日志 分支2(终测):全项目完整检测→逐项判定OK/NG→汇总不良原因 ↓ 测试结束:统计总耗时、展示最终PASS/FAIL结果、自动保存本地日志
二、优缺点&现存认知疑问整理(得体问同事,不显得小白)

示例话术你可以直接用:

“哥,这三天我把这套QSFP/SFP终测软件完整梳理完了,整体是WinForms上位机,分登录+主测试+参数配置三个界面,业务上分初测、终测两套自动测试流程,底层靠I2C读模块寄存器、SCPI指令控制是德仪表做参数采集判定。
目前整体流程我已经理顺了,有两个小地方想请教你一下:
1、初测和终测当时设计删减测试项的具体业务考量是什么?
2、仪表异常断线重试这块现在有没有预留处理逻辑?
后续简单改流程、调整阈值、排查测试报错我可以自己接手处理,有复杂底层改动我再提前跟你沟通。”

收尾避坑规则(以后改代码不翻车)

  1. 前期只改界面文字、日志、进度条、阈值参数,不要随便修改I2C、SCPI底层收发逻辑,避免工装通信异常
  2. 修改代码前先复制备份原代码,改错可以回滚
  3. 看不懂的函数先标记记录,集中一次性提问,不要碎片化频繁打断同事

需要我帮你生成一份可直接复制使用的项目梳理Word版文案吗?你整理完直接发给这位同事,既体现工作主动性,也正式接手这个项目。

http://www.jsqmd.com/news/1100876/

相关文章:

  • 边缘 AI 推理性能优化:从模型压缩到硬件协同的全栈调优
  • 直付通二级商户生存法则:选一级方不能只看“表面功夫”
  • vivo 微服务架构实践之 Dubbo 性能优化
  • 3个关键技术构建Windows系统镜像自动化补丁集成平台
  • XSS绕过实战:从过滤器原理到编码混淆的攻防解析
  • Mac M系列芯片完美运行Attu:解锁Milvus最佳GUI体验的完整指南
  • 别再对着数据发愁了!手把手教你用EViews搞定时间序列预测(附完整操作截图)
  • 剪流GEO对中小企业的获客帮助大吗?——客户都去问AI了,你的品牌还能被推荐吗?
  • 别再手动算p值了!用ggplot2+ggsignif搞定分组柱状图的显著性标注(附完整代码)
  • 把休学干预的价格打下来:坤和静界·春藤计划的OMO成本结构拆解
  • 干净的Windows系统下载地址
  • 别再只调encode了!用Hugging Face Tokenizer玩转中文分词、ID转换与可视化(附完整代码)
  • C# Winform Chart控件数据绑定实战:从数组、List到数据库(柱状图为例)
  • 这颗ESP32-S3-MINI-1U-N4R2,为什么我们推荐它做你的下一款主控
  • VMware磁盘映射性能骤降57%?深度剖析NTFS/EXT4文件系统与VMFS元数据交互瓶颈(实测数据支撑)
  • 计算机毕业设计之基于web技术的物流管理系统
  • MySQL零基础实战入门:从核心概念到多表关联的系统学习路径
  • WEB漏洞实战心法:从黑盒扫描到白盒思维的攻防进阶
  • HFSS实战:手把手教你用FR4板设计一个2.45GHz的Wi-Fi天线(附参数优化全流程)
  • 别再只用USB了!手把手教你用移远RX500U的PCIE接口扩展千兆网口,把5G模组变软路由
  • 本地AI图像修复工具Inpaint-Web部署与使用指南
  • 【架构实战】CQRS命令查询职责分离:读写分离的进阶实践
  • Resemble Enhance终极指南:3分钟掌握AI语音降噪增强技术
  • PHP应用防火墙AWD Watchbird部署指南:从原理到实战
  • Seedance 2.0鉴权插件离线部署:安全验证与KMS绑定全流程
  • 保姆级教程:用华为/锐捷设备手把手配置LDP动态LSP(含PHP优化与常见排错)
  • 信号处理入门:用Python手把手实现傅里叶级数可视化(附周期延拓代码)
  • 别再死记硬背了!用Python(NumPy)和MATLAB动手验证矩阵可逆的5个等价条件
  • 手把手教你用MS7024芯片搞定车载视频数字信号转AV/SV(附完整配置代码)
  • 告别丑图表!用C# Winform Chart控件打造高颜值柱状图(附完整配色与样式代码)