
简介这份《可靠性测试培训讲义》PPT面向硬件研发、测试工程师及质量管理人员系统梳理可靠性测试从概念到落地的完整思路帮助读者建立可操作的测试框架、识别产品潜在隐患。压缩包内含1个PPT文件约3.12MB以讲义幻灯片形式呈现配目录与逐页要点便于课堂培训或自学翻阅。内容覆盖测试概述、测试项目选择与测试用例设计、可测试性设计、测试仪器选型与工装设计、测评过程管理及规避方法、测试参考标准等模块并重点列举按键粘连、显示屏静电打坏、数据接口错误、接插件松动等潜在失效点以及环境应力、机械应力、电气应力对应的失效类型。同时给出研发、中试、批量生产、鉴定各阶段的测试目的、应力强度与判定要求说明确定产品耐环境应力工作极限与破坏极限、验证纠正措施有效性的思路。目前已有329人学习适合需要搭建可靠性测试知识体系并查找典型失效案例的工程人员参考。1. 从一页被退回的可靠性测试培训讲义.ppt说起新同事交上来的可靠性测试培训讲义.ppt评审十分钟就被退回来了。问题不在配色而在他把标准条款原样搬了进来HTOL、THB、TC、HAST 各占一页试验条件写按相关标准执行样本量写按标准要求判据写满足规格书。台下听完回去还是不知道自己手上这颗芯片、这块单板该做哪几项、做多久、失效了怎么判。可靠性的培训讲义本质上是一份翻译件把 JESD、IEC、GB/T 里的应力条件翻译成本厂可执行的试验矩阵、判据和失效处理动作。它同时服务三拨人——刚接手试验的测试工程师、需要签字放行的项目负责人、写报告的品质同事。翻译得好不好不看页数看台下的人能不能照着它排出一份能跑的试验计划。下面按内容骨架、关键参数、图表自动化、成稿校验的顺序把这份讲义从头搭一遍。2. 可靠性测试讲义的内容骨架先排失效机理再排试验项目2.1 从失效机理反推试验项目而不是从标准目录抄讲义前三分之一最容易写废的地方是把术语表当成开头。加湿、偏压、温循、电迁移这几个词摆上去听众记不住也用不上。更有效的组织方式是先问一句这个产品可能怎么坏。潮气进到塑封体内配合偏压会让金属离子迁移表现为绝缘电阻下降、漏电流爬升对应的应力是高温高湿加偏压焊点在温度反复升降中因热膨胀系数不匹配而疲劳开裂对应的是温变循环结温长期偏高会加速金属互连的电迁移和栅氧退化对应高温工作寿命试验。把机理讲清楚后面每一项试验的存在理由就自然成立。失效机理主要应力典型试验常用标准族讲义里要给的判据离子迁移、腐蚀高温高湿 偏压THB、HASTJESD22-A101、A110绝缘电阻下限、漏电流漂移量焊点与互连疲劳温变循环TC、TSTJESD22-A104裂纹级别、连通电阻变化率电迁移、栅氧退化高温工作HTOLJESD22-A108关键参数超规格的比例结构开裂、焊球脱落机械冲击与振动Drop、VibrationJESD22-B104、B103功能失效、结构目检静电损伤静电放电HBM、CDMJS-001 等 ESD 系列漏电增大、开门电压漂移用法上不是把表铺满页而是拿 BOM 和工艺流程过一遍圈出风险最高的三到五项剩下放进附录备用。一颗带 BGA 的电源模块和一颗塑封的传感器风险排序完全不同讲义不该长得一样。2.2 用一份试验矩阵把讲什么钉死讲义页数是结果不是目标。真正决定页数和顺序的是试验矩阵行是试验项目列是样品批次、样本量、应力条件、时长或循环数、中间读点、判据、责任人、对应的讲义页码。矩阵定了目录自然就出来了而且评审时可以直接对着矩阵问这一项为什么不做。我一般把矩阵写成 YAML 放在工程仓库里跟讲义一起版本化。理由很实际PPT 是二进制diff 不出改了什么而条件、样本量这类数字改一次就是一次评审。# test_matrix.yaml —— 讲义与试验计划共用同一份数据源 - item: HTOL # 试验项目代号讲义页标题直接取这个字段 condition: Ta125C, Vcc1.1xVnom sample_size: 77 # 三批每批 25 只加 2 只备用 duration_h: 1000 read_points: [0, 168, 500, 1000] # 中间读点讲义里要单独画一条表 criteria: 关键参数漂移 10%无功能失效 owner: 测试组-李工 - item: TC condition: -55C~125C, 15min dwell, ramp 10C/min sample_size: 30 duration_cycles: 1000 read_points: [250, 500, 1000] criteria: 连通电阻变化 20%无开路 owner: 可靠性组-王工这份配置里的字段都有明确用途condition必须写成可复现的字符串温度和偏压倍数都要给数值不能只写高温read_points决定讲义上是否需要一张参数漂移趋势图criteria是评审最关心的一列写满足规格等于没写必须落到具体数值。后面第 5 章会用同一份 YAML 直接生成表格页避免手工誊抄出错。2.3 每页讲义的三行结构结论、条件、判据试过很多版式之后最稳的还是三行结构。第一行给结论一句话说明这一项测什么、拦什么风险第二行给试验条件和样本量数字全部来自矩阵第三行给判据以及不通过时谁来做失效分析、走什么流程。三行之外的内容比如试验箱型号、夹具照片、历史数据放进备注或者附录页。按这个结构排下来一份半天的培训讲义通常在 40 到 60 页之间开头六到八页讲失效机理与矩阵主体二十多页逐项讲试验中间留四页讲参数换算和样本量最后八到十页讲失效处理流程和常见误用。超过 60 页基本讲不完宁可把细节压进附录也不要在正课里赶进度。提示不要给常见误用单独开一章。把每项试验里最容易做错的一点做成页脚小字紧贴对应内容比集中罗列十几条有用得多。3. 讲义里最容易讲错的四个参数MTBF、FIT、加速因子与样本量3.1 MTBF 与 FIT 的换算以及为什么不能只报点估计FIT 和 MTBF 是同一件事的两种说法FIT 表示每十亿小时期望失效数数值上等于 1e9 除以 MTBF。讲义里必须把这两个单位写在同一页的相邻位置否则一定有人把 100 FIT 念成MTBF 100 小时。更常见的错误是只报一个点估计值不做区间。试验样本少、失效数少的时候点估计的置信区间宽得吓人只报点估计等于把风险藏起来了。工程上常用卡方分布给单侧置信下限失效数 r 已知时总试验时间 T 的 MTBF 下限为 2T 除以卡方分位数。下面的代码把点估计和置信下限一起算出来讲义上直接放两行数字。import math from scipy.stats import chi2 def mtbf_fit(total_hours, failures, confidence0.60): 由总试验时间与失效数给出 MTBF 点估计、FIT 与单侧置信下限 total_hours: 所有样品试验小时数之和注意是器件小时不是台数 failures: 试验期间确认的失效数0 也要传 0不要传 1 confidence: 置信度可靠性验收常用 60% 或 90% mtbf total_hours / failures if failures 0 else math.inf fit 1e9 / mtbf if math.isfinite(mtbf) else 0.0 if failures 0: # 零失效时用 2T / chi2(1-c, 2) 给下限这是最常见的验收写法 lower 2 * total_hours / chi2.ppf(confidence, 2) else: lower 2 * total_hours / chi2.ppf(confidence, 2 * failures 2) return {mtbf_point: mtbf, fit: fit, mtbf_lower: lower} print(mtbf_fit(77 * 1000, 2, 0.60))total_hours是器件小时77 只样品各跑 1000 小时就是 77000 器件小时这一点讲错的人特别多写成77 台会让结果差两个数量级。failures传 0 时会走另一条分支得到的是零失效方案下的下限不能沿用 r 大于 0 的公式否则下限偏乐观。3.2 Arrhenius 与 Coffin-Manson 加速因子的计算代码加速因子是讲义里最容易被质疑的一页因为它决定了1000 小时高温试验等价于现场多少年。高温类应力用 Arrhenius 模型温循类用 Coffin-Manson 模型两者不能互换。写讲义时把活化能 Ea 的来源标清楚是来自器件手册、厂商报告还是行业默认值这比结果本身更重要。import math K_B 8.617e-5 # 玻尔兹曼常数单位 eV/K def af_arrhenius(T_use_c, T_stress_c, ea_ev): Arrhenius 加速因子适用高温存储、HTOL、THB 等温度主导的应力 t_use T_use_c 273.15 t_stress T_stress_c 273.15 return math.exp(ea_ev / K_B * (1 / t_use - 1 / t_stress)) def af_coffin_manson(dT_use, dT_stress, m2.0): Coffin-Manson 加速因子适用温变循环m 为疲劳指数 return (dT_stress / dT_use) ** m print(round(af_arrhenius(55, 125, 0.7), 1)) # 55C 使用125C 应力Ea0.7eV print(round(af_coffin_manson(40, 150, 2.0), 1))ea_ev取值的经验范围大致是 0.5 到 0.9 eV取值偏大得出的加速因子会明显偏乐观讲义上最好同时给一个敏感性小表说明 Ea 从 0.6 改到 0.8 时等价年限变化多少。Coffin-Manson 的疲劳指数m常取 2但焊点材料不同会有出入讲义上标注来源比给一个孤零零的数字可信。3.3 样本量与零失效方案的取舍样本量不是拍脑袋定的三种算法在讲义里要都提到并说明各自适用场景零失效方案用 ln(1-C) 除以 ln(R)定数截尾按允许失效数用卡方寿命试验按目标寿命和加速因子折算。置信度 C可靠度 R零失效所需样本量 n90%90%2290%95%4590%99%23060%90%960%95%18这张表在讲义里价值很高因为它立刻能解释为什么可靠性验收不能只投三只样品。常见的偷懒写法是先定样本量再反推置信度评审时一问就穿帮。4. 用 Python 把讲义里的 Weibull 图和寿命曲线批量画出来4.1 Weibull 参数估计的最小实现讲义上光有表格不够评审和听众都想看到分布形状。两参数 Weibull 用中位秩加最小二乘就能得到足够用的估计不必一上来就上极大似然。中位秩用 Benard 近似样本量个位数时比简单的 i/n 稳得多这一点在讲义附录里值得单列一页说明。import numpy as np def median_rank(n): 中位秩n 个失效样本的经验失效概率返回长度为 n 的数组 i np.arange(1, n 1) return (i - 0.3) / (n 0.4) # Benard 近似小样本下比 i/n 更稳 def weibull_fit(t_fail): 两参数 Weibull 估计返回形状参数 beta 与特征寿命 eta t np.sort(np.asarray(t_fail, dtypefloat)) F median_rank(len(t)) x np.log(t) # 横轴取对数寿命 y np.log(-np.log(1 - F)) # 纵轴做 Weibull 变换线性化后可直接拟合 beta, b np.polyfit(x, y, 1) # 斜率是 beta eta float(np.exp(-b / beta)) # y0 对应的寿命就是特征寿命 return float(beta), etat_fail必须是失效时间数组不含未失效的截尾样本如果试验有中途撤出的样品中位秩要换成考虑截尾的修正秩直接套这个函数会低估寿命。beta小于 1 表示早期失效为主大于 1 表示磨损失效讲义上把这条判读规则放在图旁边比事后口头解释有效。4.2 讲义图表的硬性规范图表不统一是评审返工的第二大来源。我的做法是在讲义附录里固定一张规范表所有图按同一套参数出不临时调。项目要求原因尺寸与分辨率16:9 版面下宽度 6.4 英寸、300 dpi投影不糊打印进报告也够字体下限图内文字不小于 8 pt正文字体不小于 12 pt会议室后排能看清坐标轴必须带物理量与单位对数轴要标刻度值防止把 ln 值当实际寿命读图注标注样本量、应力条件、拟合参数单独截图放进报告时仍有上下文颜色同一份讲义最多三种主色失效点用同一色减少认知负担4.3 批量导出与命名约定逐张手点保存迟早会漏图、存错版本。批量导出时统一命名文件名里带项目代号和批次讲义生成脚本按命名规则去找图找不到就报错比事后翻目录可靠。import matplotlib matplotlib.use(Agg) # 无界面环境必须指定否则批量脚本会卡在显示后端 import matplotlib.pyplot as plt FIG {figsize: (6.4, 3.6), dpi: 300} def plot_weibull(t_fail, beta, eta, title, out_png): t np.sort(np.asarray(t_fail, float)) F median_rank(len(t)) fig, ax plt.subplots(figsizeFIG[figsize]) ax.plot(np.log(t), np.log(-np.log(1 - F)), o, ms4, label实测失效点) tt np.linspace(t.min() * 0.8, eta * 2, 100) ax.plot(np.log(tt), beta * (np.log(tt) - np.log(eta)), -, lw1.2, labelf拟合 beta{beta:.2f}, eta{eta:.0f}h) ax.set_xlabel(ln(失效时间 / h)) ax.set_ylabel(ln(-ln(1-F))) ax.set_title(title, fontsize10) ax.legend(fontsize8) fig.tight_layout() fig.savefig(out_png, dpiFIG[dpi]) # 统一走同一个 dpi 常量 plt.close(fig) # 命名约定图_项目代号_批次.png讲义生成脚本按此正则取图 plot_weibull([810, 950, 1120, 1400, 1750], 1.8, 1380, HTOL 失效分布, fig_HTOL_B01.png)matplotlib.use(Agg)一定要在导入 pyplot 之前调用放在后面无效。figsize在plt.subplots里传dpi在savefig里传两个地方都要写只写一处会得到尺寸和清晰度不匹配的图。5. 从数据到 PPT用 python-pptx 自动生成讲义页5.1 母版与占位符的约定自动化的前提是母版干净。我会单独做一个只留版式、不留历史内容页的模板文件把常用版式固定几个索引脚本里用常量引用而不是靠第几页这种会变的顺序。模板里所有字体、行距、项目符号都在版式层面定好脚本只填文字不做格式微调。版式索引用途讲义里对应页0封面第 1 页1标题 正文机理、流程类页5标题 表格试验矩阵、样本量表6空白全幅图表页5.2 生成图表页与表格页的代码图表页和矩阵页占了讲义主体也是最不该手工做的两类。下面的写法把第 2 章那份 YAML 直接渲染成表格页条件、样本量、判据三列全部来自数据源。from pptx import Presentation from pptx.util import Inches, Pt TPL 讲义母版.pptx # 只含版式的模板 L_CONTENT, L_TABLE, L_BLANK 1, 5, 6 def add_chart_slide(prs, title, png_path, bullets): slide prs.slides.add_slide(prs.slide_layouts[L_CONTENT]) slide.shapes.title.text title body slide.placeholders[1].text_frame for i, line in enumerate(bullets): p body.paragraphs[0] if i 0 else body.add_paragraph() p.text line p.font.size Pt(14) # 正文不低于 14pt slide.shapes.add_picture(png_path, Inches(6.2), Inches(1.8), widthInches(6.4)) return slide def add_matrix_slide(prs, rows): slide prs.slides.add_slide(prs.slide_layouts[L_TABLE]) slide.shapes.title.text 试验项目矩阵 n_rows, n_cols len(rows) 1, 5 table slide.shapes.add_table(n_rows, n_cols, Inches(0.6), Inches(1.6), Inches(12.0), Inches(0.4) * n_rows).table for c, name in enumerate([项目, 条件, 样本量, 读点, 判据]): table.cell(0, c).text name for r, item in enumerate(rows, start1): table.cell(r, 0).text item[item] table.cell(r, 1).text item[condition] table.cell(r, 2).text str(item.get(sample_size, -)) table.cell(r, 3).text , .join(map(str, item.get(read_points, []))) table.cell(r, 4).text item[criteria] return slideslide_layouts的下标必须对着自己的模板核对换模板后第一件事就是重新确认这几个常量。add_table的行高只给初值实际渲染由文字量撑开所以列宽要自己分配别指望自动均衡否则判据那一列会被挤成竖排。5.3 成稿前的自动校验字号、页数与图片手工翻页找小字很费时间用脚本扫一遍更快。注意从版式继承来的字号run.font.size会是None这时候不能判成不合格要单独列为需人工确认。from pptx import Presentation from pptx.util import Pt MIN_FONT, MAX_SLIDES Pt(12), 60 def audit(path): prs Presentation(path) problems [] for idx, slide in enumerate(prs.slides, start1): for shape in slide.shapes: if not shape.has_text_frame: continue for para in shape.text_frame.paragraphs: for run in para.runs: if run.font.size is None: problems.append((idx, run.text[:12], 继承字号)) elif run.font.size MIN_FONT: problems.append((idx, run.text[:12], run.font.size.pt)) if len(prs.slides) MAX_SLIDES: problems.append((总页数, len(prs.slides), MAX_SLIDES)) return problems6. 定稿前的三遍自检与两个高频返工点讲义排版完成不等于能发。定稿前我会固定跑三遍每遍只看一件事比混在一起看快得多。第一遍看数字把所有条件、样本量、加速因子对着 YAML 数据源核一遍重点查单位器件小时和台数、摄氏度与开尔文、小时与循环数这三组最常串。第二遍看图表把 PPT 转成图片逐页翻命令是soffice --headless --convert-to pdf --outdir ./_check 讲义.pptx再用pdftoppm -r 80 -png ./_check/讲义.pdf ./_check/page出图。转 PDF 这一步能顺带暴露字体替换和图片被压缩的问题比在放映模式下翻页可靠。第三遍看逻辑闭环每一项试验是否都能追到某个失效机理每一个机理是否至少有一项试验覆盖每条判据是否写了不通过之后谁接手。这三问只要有一问答不上来就说明有页是凑数的。两个高频返工点值得单独记住。第一个是把讲义当标准汇编页页写按相关标准执行听众无法落地正确做法是每项试验都给出本厂的具体温度和偏压数值标准号只作为引用脚注。第二个是图和文不同步改了条件忘了改图评审时被抓住一次整份讲义的可信度就没了。把条件和图都从同一份 YAML 和同一批脚本里生成这类错误在流程上就被消掉了。至于版本管理别把 pptx 当唯一源文件。把test_matrix.yaml、绘图脚本和生成脚本一起放进仓库pptx 只作为构建产物重建一次的成本就是一条命令谁改了哪个条件在 diff 里一目了然。本文还有配套的精品资源点击获取