ARTICLE · 1111784
第九章_软件可靠性_综合题库_v2.0
软件可靠性基础知识├── 9.1 基本概念│ ├── 可靠性定义:规定条件+规定时间+不引起失效的概率│ ├── 定量描述:可靠度R(t)/失效概率P(t)/失效率λ(t)/MTTF/MTBF/MTTR│ ├── 可靠性目标:安全攸关/企业核心/消费级│ └── 测试意义:验证目标/发现缺陷/提供数据├── 9.2 可靠性建模│ ├── 影响因素:软件自身/运行环境/人为/过程│ ├── 建模方法:失效数据统计/缺陷过程/运行剖面│ └── 模型分类:指数/威布尔/对数正态/泊松├── 9.3 可靠性管理:需求→设计→编码→测试→运维├── 9.4 可靠性设计│ ├── 容错设计:N版本/恢复块/防卫式│ ├── 检错技术:返回码/异常捕获/心跳检测│ ├── 降低复杂度:模块化/圈复杂度/避免重复│ └── 系统配置技术:配置分离/校验/灰度├── 9.5 可靠性测试│ ├── 运行剖面:操作模式+概率+输入分布│ └── 测试实施:环境→执行→失效记录→数据收集└── 9.6 可靠性评价├── 模型选择:软件类型/数据特征/评估目标├── 数据收集:失效时间/运行信息/修复信息└── 评估与预测:当前指标/未来预测
填空题(共50题)
第1题:IEEE将软件可靠性定义为:在规定的条件下,规定的______内,软件不引起系统失效的概率。
答案:时间
第2题:可靠度R(t)表示软件在给定时间t内______运行的概率。
答案:正常
第3题:失效概率P(t)与可靠度R(t)的关系为R(t)=______。
答案:1-P(t)
第4题:单位时间内的失效次数称为______。
答案:失效强度(失效率)
第5题:MTTF的中文全称是______。
答案:平均无失效时间
第6题:MTTR的中文全称是______。
答案:平均失效修复时间
第7题:MTBF的中文全称是______。
答案:平均故障间隔时间
第8题:MTBF与MTTF、MTTR的关系为MTBF=______。
答案:MTTF+MTTR
第9题:软件可靠性是软件______特性中重要的固有特性和关键因素。
答案:质量
第10题:安全攸关系统的可靠性目标要求失效概率低于______。
答案:10⁻⁹/小时
第11题:狭义可靠性测试是为了获取软件______量化指标而开展的测试
答案:可靠性
第12题:广义可靠性测试包括功能测试、性能测试、压力测试、容错测试和______测试等。
答案:恢复
第13题:影响软件可靠性的因素包括软件自身因素、运行环境因素、______因素和过程因素。
答案:人为
第14题:软件可靠性建模是通过数学模型描述软件的______过程的定量方法。
答案:失效
第15题:基于失效数据的统计建模中,典型模型包括Jelinski-Moranda模型和______模型。
答案:Goel-Okumoto
第16题:指数类模型假设失效强度随时间呈______变化。
答案:指数
第17题:威布尔类模型可描述可靠性先降后升、持续下降等多种场景,______更强。
答案:灵活性
第18题:NHPP的中文全称是______。
答案:非齐次泊松过程
第19题:容错设计技术包括N版本程序设计、恢复块设计和______。
答案:防卫式程序设计
第20题:N版本程序设计中,多个版本的结果通过______机制输出。
答案:表决
第21题:恢复块设计中,每个恢复块包含主模块和多个______模块。
答案:备用
第22题:防卫式程序设计在代码中加入主动的______检测和参数校验逻辑。
答案:异常
第23题:检错技术包括返回码检错、______检错和心跳检测检错。
答案:异常捕获
第24题:C语言中的错误检测通过______函数返回错误码实现。
答案:errno
第25题:降低复杂度设计的核心原则是______。
答案:简单即可靠
第26题:代码的圈复杂度建议不超过______。
答案:15
第27题:系统配置技术包括配置分离、配置校验和______发布配置。
答案:灰度
第28题:运行剖面是对软件的______场景、输入分布、操作序列的量化描述。
答案:实际使用
第29题:可靠性测试的核心输出是可靠性______指标。
答案:量化
第30题:可靠性的定量描述中,______指软件在给定时间内出现失效的概率。
答案:失效概率
第31题:软件可靠性管理贯穿软件______(需求/设计/编码/测试/运维)
答案:全生命周期
第32题:需求阶段需明确软件的可靠性目标、运行环境约束和______标准。
答案:失效判定
第33题:测试阶段需制定可靠性测试计划,收集______数据。
答案:失效
第34题:减轻设计技术包括______、降额设计和安全裕度设计。
答案:冗余设计
第35题:严格设计技术包括文档规范化、______规范和标准化开发。
答案:编程
第36题:分布式系统中节点间定期发送心跳包,超时未收到则判定节点失效,属于______检错。
答案:心跳检测
第37题:可靠性数据的收集内容包括失效时间、失效信息、运行信息和______信息。
答案:修复
第38题:可靠性评估利用测试或运行中收集的可靠性数据,通过______计算可靠性指标。
答案:可靠性模型
第39题:支持性设计包括______、事件日志和记录外部错误。
答案:软件接口支持
第40题:模块化设计将复杂系统拆分为高内聚、______的独立模块。
答案:低耦合
第41题:避免重复代码通过封装公共函数、______类复用代码。
答案:工具
第42题:测试环境需要搭建与______环境一致的软硬件配置。
答案:实际运行
第43题:失效率λ(t)与可靠度R(t)的关系为λ(t)=-[dR(t)/dt]/______。
答案:R(t)
第44题:对于稳定运行的软件,MTTF=∫₀^∞R(t)______。
答案:dt
第45题:当失效率为常数λ时,可靠度R(t)=______。
答案:e⁻λᵗ
第46题:网银运行剖面中登录、查询、转账的使用频率分布称为______概率。
答案:操作
第47题:JM模型假设软件中初始缺陷个数有限,每发现修复一个缺陷______提升。
答案:可靠性
第48题:NHPP模型描述单位时间内失效次数服从______分布。
答案:泊松
第49题:失效数据少时选择参数少的______模型。
答案:简单
第50题:可靠性评价可预测未来可靠性水平,为______计划提供依据。
答案:运维
简答题(共50题)
第1题:请简述IEEE对软件可靠性的定义。
参考答案:IEEE定义:软件可靠性是在规定的条件下,在规定的时间内,软件不引起系统失效的概率。该概率是系统输入和系统使用的函数,也是软件中存在的缺陷的函数。
第2题:请简述可靠度R(t)与失效概率P(t)的关系。
参考答案:可靠度R(t)是软件在给定时间t内正常运行的概率,失效概率P(t)是软件在给定时间t内出现失效的概率。两者关系为R(t)=1-P(t),即正常运行概率与失效概率互补。
第3题:请简述MTTF、MTBF和MTTR的含义及关系。
参考答案:MTTF(平均无失效时间)是软件从启动到首次失效的平均时间。MTBF(平均故障间隔时间)是相邻两次失效之间的平均时间。MTTR(平均失效修复时间)是软件失效后恢复到正常运行状态的平均时间。关系为MTBF=MTTF+MTTR。
第4题:请简述狭义可靠性测试与广义可靠性测试的区别。
参考答案:狭义可靠性测试指为获取可靠性量化指标而开展的测试,需在统计有效的运行剖面上执行,计算可靠度、MTTF等指标。广义可靠性测试指所有为提升软件可靠性开展的测试活动,包括功能测试、性能测试、压力测试、容错测试等。
第5题:请列举影响软件可靠性的四类因素。
参考答案:①软件自身因素,代码复杂度、缺陷密度、架构设计;②运行环境因素,硬件故障、OS稳定性、网络波动;③人为因素,需求理解偏差、编码错误、运维失误;④过程因素,开发流程规范性、评审充分度、变更控制严格度。
第6题:请简述N版本程序设计的原理。
参考答案:N版本程序设计开发多个功能相同但实现逻辑不同的版本,同时运行后通过表决器对结果进行多数表决,多数一致的结果作为最终输出。避免单版本逻辑缺陷导致系统失效。
第7题:请简述恢复块设计的工作原理。
参考答案:恢复块将软件功能划分为多个恢复块,每个恢复块包含主模块和多个备用模块。主模块执行后验收测试,通过则继续;失败则回滚并调用备用模块,依次尝试直至成功或所有模块都失败。
第8题:请简述防卫式程序设计的思想。
参考答案:防卫式程序设计在代码中加入主动的异常检测和参数校验逻辑,提前拦截错误输入或异常状态。如对输入参数做格式/范围/类型校验,非法输入返回错误提示避免进入后续逻辑导致崩溃。
第9题:请列举三种检错技术。
参考答案:①返回码检错(函数返回错误码调用方判断);②异常捕获检错(try-catch捕获异常处理);③心跳检测检错(分布式节点定期发心跳超时判定失效)。
第10题:请简述降低复杂度设计的核心原则和具体方法。
参考答案:核心原则是"简单即可靠",通过简化软件结构降低缺陷引入概率。具体方法:①模块化设计(高内聚低耦合);②控制代码圈复杂度(<15);③避免重复代码(封装公共函数和工具类复用逻辑)。
第11题:请简述系统配置技术的主要内容。
参考答案:①配置分离(代码和配置分离放配置中心避免硬编码);②配置校验(启动时校验配置合法性防错误配置导致异常);③灰度发布配置(配置变更先灰度部分节点验证再全量)。
第12题:请简述运行剖面的定义。
参考答案:运行剖面是对软件实际使用场景、输入分布、操作序列的量化描述。通过识别操作模式、确定操作概率、定义输入分布生成,确保可靠性测试反映软件实际使用时的可靠性水平。
第13题:请简述可靠性测试用例设计的分类。
参考答案:①正常场景用例,按运行剖面正常输入设计占比较高;②异常场景用例,模拟异常输入和环境验证容错检错能力;③边界场景用例,覆盖输入参数边界值验证边界处理。
第14题:请简述可靠性测试实施的主要步骤。
参考答案:①测试环境准备(搭建与实际运行一致的软硬件环境);②测试执行(按运行剖面和用例执行);③失效记录与分析(记录失效时间/现象/原因);④可靠性数据收集(统计运行时间/失效次数等供评估)。
第15题:请简述选择可靠性模型的依据。
参考答案:①软件类型(安全攸关选保守模型普通软件选统计模型);②失效数据特征(服从指数分布选指数类模型);③评估目标(预测可靠性选NHPP类模型评估缺陷总数选JM模型);④数据量(少时选简单模型多时选灵活模型)。
第16题:请简述可靠性数据收集的主要内容。
参考答案:①失效时间(每次失效绝对时间和间隔时间);②失效信息(现象/日志/环境);③运行信息(总运行时间/累计操作次数/用例覆盖);④修复信息(是否软件缺陷/修复时间/修复后是否重复失效)。
第17题:请简述可靠性的定量描述指标。
参考答案:①可靠度R(t),正常运行概率;②失效概率P(t),失效概率;③失效强度λ(t),单位时间失效次数;④MTTF,启动到首次失效平均时间;⑤MTTR,失效到恢复平均时间;⑥MTBF,相邻失效平均间隔时间。
第18题:请简述可靠性模型的主要分类。
参考答案:①指数类模型(失效强度指数变化如JM模型);②威布尔类模型(灵活描述多种失效趋势);③对数正态类模型(早期失效少中期集中);④泊松类模型(单位时间失效次数服从泊松分布如NHPP模型)。
第19题:请简述N版本程序设计在航天软件中的应用。
参考答案:航天飞船导航控制软件同时运行3个由不同团队开发的版本,输入相同传感器数据,结果由表决器判断。2个及以上版本结果一致才执行,避免单版本缺陷导致导航错误。
第20题:请简述防卫式程序设计中输入校验举例。
参考答案:用户注册接口对输入的手机号做格式和长度校验、密码做复杂度校验、年龄做范围校验,非法输入直接返回错误提示,避免无效数据进入后续逻辑导致系统崩溃。
第21题:请简述心跳检测检错在分布式系统中的应用。
参考答案:Redis集群中主节点定期向从节点发心跳,若超10秒未收到从节点心跳则判定从节点下线触发主从切换。此为分布式系统常用的检错手段保障高可用。
第22题:请简述可靠性管理在需求阶段的工作。
参考答案:需求阶段需明确软件的可靠性目标(如MTTF>1000小时)、运行环境约束(硬件/OS/网络)和失效判定标准(什么情况算失效),写入需求规格说明书。
第23题:请简述可靠性管理在运维阶段的工作。
参考答案:运维阶段监控软件运行状态,通过监控系统/日志收集线上失效数据,快速修复缺陷,迭代优化可靠性。持续改进确保可靠性目标达成。
第24题:请简述模块化设计降低复杂度的原理。
参考答案:模块化设计将复杂系统拆分为多个独立模块,每个模块职责单一。单个模块修改不影响其他模块降低了整体复杂度减少缺陷引入概率提升可靠性。
第25题:请简述圈复杂度控制对可靠性的影响。
参考答案:限制代码圈复杂度<15避免嵌套过深判断逻辑。某订单逻辑重构后圈复杂度从28降到<8缺陷率下降60%证实控制代码复杂度有效提升可靠性。
第26题:请简述广义可靠性测试包含的测试类型。
参考答案:广义可靠性测试包括:功能测试(发现业务逻辑缺陷)、性能测试(发现性能瓶颈)、压力测试(发现高负载下的可靠性问题)、容错测试(验证容错机制)、恢复测试(验证故障恢复能力)。
第27题:请简述运行剖面的4个定义步骤。
参考答案:①识别操作模式,拆解所有使用场景;②确定操作概率,统计各模式使用频率;③定义输入分布,各模式下输入参数分布;④生成运行剖面,整合形成可执行测试输入集合。
第28题:请简述可靠性评价的核心作用。
参考答案:①判断软件是否达发布标准;②对比不同版本/设计可靠性差异支撑发布决策;③预测未来可靠性趋势为运维计划/版本迭代提供依据。
第29题:请简述支持性设计的内容。
参考答案:支持性设计包括软件接口支持(API稳定性和兼容性)、事件日志(记录关键事件便于排查)和记录外部错误(捕获外部系统异常避免影响本系统)。
第30题:请简述严格设计技术的内容。
参考答案:严格设计技术包括文档规范化(统一模板标准)、编程规范化(统一编码风格和规则)和标准化开发(基于成熟框架和标准流程)。
第31题:请简述减轻设计技术的内容。
参考答案:减轻设计技术包括冗余设计(备份关键组件)、降额设计(降低额定值使用保障余量)和安全裕度设计(预留额外安全边界)。
第32题:请简述安全攸关系统的可靠性目标要求。
参考答案:安全攸关系统如航天控制医疗设备可靠性目标极高要求失效概率<10⁻⁹/小时,MTTF>10⁹小时。任何一次失效都可能造成灾难性后果。
第33题:请简述企业核心业务系统的可靠性目标。
参考答案:企业核心业务系统如ERP、支付系统要求年可用率>99.9%,MTBF>876小时。这类系统失效会导致业务中断造成经济损失但可容忍短暂停机。
第34题:请简述NHPP模型的特点。
参考答案:NHPP(非齐次泊松过程)假设单位时间内的失效次数服从泊松分布但失效强度随时间变化(可递减可递增),是可靠性建模中最常用的模型之一。
第35题:请简述边际测试的概念。
参考答案:边际测试是检测系统在极限状态下的工作能力的一种测试。如存储器饱和、计算机满载、操作系统极限等情况下的测试,确保系统在边缘状态下仍能正常或降级工作。
第36题:请简述配置分离对可靠性的提升作用。
参考答案:配置分离将代码和配置分离,配置存储在配置中心(如Nacos)。修改配置可实时下发无需重启服务,避免了硬编码修改后发布带来的停机风险提升系统可用性。
第37题:请简述灰度发布配置的作用。
参考答案:灰度发布配置先灰度到小部分节点验证无问题再全量发布,降低配置错误的影响范围。如限流配置从1000调整到500次/秒先灰度10%流量验证后再全量。
第38题:请简述可靠性评估的流程。
参考答案:①利用测试或运行收集的可靠性数据;②基于选定的可靠性模型计算当前可靠性指标(可靠度/MTTF等);③与可靠性目标对比判断是否满足要求;④输出评估结论和优化建议。
第39题:请简述威布尔类模型的特点。
参考答案:威布尔类模型假设失效强度服从威布尔分布可描述可靠性先降后升、持续下降等多种场景。灵活性更强适合复杂的失效过程特别是早期失效高发后期稳定的场景。
第40题:请简述返回码检错的原理。
参考答案:函数/模块执行后返回错误码(如0成功-1不存在-2权限不足),调用方根据返回码判断执行是否成功并采取相应处理。典型如C语言errno机制。
第41题:请简述可靠性管理的核心思想。
参考答案:可靠性管理通过流程、制度和活动将可靠性要求融入开发每个阶段。核心是将可靠性目标分解到各阶段,通过评审/测试/监控等手段确保目标达成。
第42题:请简述运行剖面中操作概率的定义方式。
参考答案:通过统计各操作模式的实际使用频率确定操作概率。如网银登录10%、查询余额30%、转账40%、理财15%、退出5%。概率总和为100%。
第43题:请简述异常捕获检错的实现方式。
参考答案:使用try-catch(Java/Python)捕获运行时异常记录错误信息再抛。如Java接口将数据库操作放在try块捕获SQLException后返回"数据库操作失败"提示。
第44题:请简述可靠性测试环境的要求。
参考答案:需搭建与实际运行环境一致的测试环境包括硬件配置/操作系统/中间件/网络等,确保测试结果反映实际使用时的可靠性水平。
第45题:请简述失效强度λ(t)与可靠度R(t)的关系公式。
参考答案:失效强度λ(t)是单位时间内的失效次数,与可靠度R(t)的关系为λ(t)=-[dR(t)/dt]/R(t)。当λ(t)为常数λ时R(t)=e⁻λᵗ。
第46题:请简述JM模型的基本假设。
参考答案:Jelinski-Moranda模型的基本假设是软件中初始缺陷个数有限且固定,每发现并修复一个缺陷软件可靠性提升失效强度下降。
第47题:请简述可靠性评价中评估与预测的区别。
参考答案:可靠性评估基于已有数据计算当前可靠性指标判断是否满足目标。可靠性预测基于当前数据和模型预测未来某时间点的可靠性指标或达到目标需修复的缺陷数。
第48题:请简述可靠性测试中失效记录与分析阶段的工作。
参考答案:对测试中每个失效记录详细的环境/输入/错误日志分析失效原因(软件缺陷/环境问题/操作失误)。区分可靠相关失效和非相关失效确保数据准确。
第49题:请简述可靠性管理在编码阶段的关键工作。
参考答案:制定代码规范/开展代码评审/控制代码复杂度/避免引入可靠性缺陷。
第50题:请简述操作模式的识别方法。
参考答案:对软件的所有使用场景进行完整梳理和拆解,如网银APP操作模式包括登录、查询余额、转账、理财购买、退出等。
问答题(共50题)
第1题:请详细阐述软件可靠性的IEEE定义及各要素的含义。
参考答案:IEEE定义:在规定的条件下,在规定的时间内,软件不引起系统失效的概率。①"规定的条件"指软件运行时硬件/OS/网络等外部环境和输入分布。②"规定的时间"可以是日历时间/执行时间/操作次数/事务数。③"不引起系统失效"指软件行为与用户期望一致或错误后果可接受。④"概率"是度量:安全攸关系统失效概率<10⁻⁹/h,消费软件周崩溃<1次。
第2题:请详细阐述MTTF、MTBF、MTTR三者的计算关系及实际应用
参考答案:MTTF(平均无失效时间):启动到首次失效的平均时间。MTTR(平均修复时间):失效后恢复正常平均时间。MTBF(平均故障间隔时间)=MTTF+MTTR。三者关系:MTBF=MTTF+MTTR。应用示例:某系统运行1000小时出现4次故障,总宕机时长20小时→MTBF=1000/4=250小时,MTTR=20/4=5小时,MTTF=245小时。MTTF评估软件自身可靠性,MTTR评估可维护性和运维能力。
第3题:请详细阐述软件可靠性的定量描述指标体系。
参考答案:①失效概率P(t),软件在t时间内出现失效的概率,0≤P(t)≤1。②可靠度R(t)=1-P(t),正常运行的互补概率。当失效率为常数λ时R(t)=e⁻λᵗ。③失效强度λ(t)=-[dR(t)/dt]/R(t),单位时间失效次数,反映当前时刻可靠性的变化趋势。④MTTF=∫₀^∞R(t)dt,对于指数分布MTTF=1/λ。⑤MTBF=MTTF+MTTR。⑥失效率曲线呈"浴盆曲线"——早期高发→稳定期→损耗期。
第4题:请详细阐述N版本程序设计的原理、优缺点及应用场景。
参考答案:原理:开发N个功能相同但实现不同的独立版本同时运行,通过表决器对结果多数表决输出。优点:①可容忍一个或多个版本同时出现相同结果错误的概率极低;②独立团队开发各版本缺陷重叠概率小。缺点:①开发成本高(N倍人力);②不同版本间需协调接口和输入输出格式。应用场景:航天控制系统(3重冗余)、航空飞行控制软件、核电站安全系统。
第5题:请详细阐述恢复块设计的工作原理及与N版本程序设计的区别。
参考答案:恢复块设计:主模块执行后验收测试,通过则继续;失败则回滚并调用备用模块。主模块和备用模块可用多种不同方案。与N版本区别:①N版本同时运行多个版本通过表决输出,恢复块按顺序运行各模块直到成功;②N版本适合对实时性要求高系统(并行运行),恢复块适合对资源要求可控系统。③N版本需保证各版本独立性,恢复块可本地内存保存检查点。④N版本恢复错误粒度粗糙,恢复块回滚粒度精细设计更复杂。
第6题:请详细阐述防卫式程序设计的核心思想及常见实现手段。
参考答案:防卫式程序设计通过在代码中加入主动的异常检测和参数校验机制在错误发生前拦截。核心思想是"防御胜于治疗"——假定外部输入不可靠做好各种检查。常见实现:①参数校验(输入格式等);②断言机制(assert确保前置条件满足);③异常处理(try-catch捕获);④日志记录;⑤常量使用替换魔法数字;⑥循环边界检查。
第7题:请详细阐述可靠性测试中运行剖面的定义方法和步骤。
参考答案:运行剖面准确反映软件实际使用情况。步骤:①识别操作模式——梳理所有使用场景(网银:登录/查询/转账等)。②确定操作概率——统计各模式使用频率(10%/30%/40%/15%/5%)。③定义输入分布——各模式下输入参数分布(转账金额<100元20%/100-1000元50%/等)。④生成运行剖面——整合形成测试输入集合。作用:确保测试能反映实际使用可靠性水平。
第8题:请详细阐述可靠性模型分类及各模型的特点。
参考答案:①指数类模型(Jelinski-Moranda/Goel-Okumoto):假设失效强度呈指数变化,缺陷修复后可靠提升,适合缺陷修复过程稳定的软件。②威布尔类模型(Weibull):失效强度服从威布尔分布,可描述浴盆曲线——早期高发期→稳定期→损耗期,灵活性强。③对数正态类模型(Lognormal):失效时间服从对数正态分布,适合早期失效少中期集中释放型软件。④泊松类模型(NHPP):单位时间失效次数服从泊松分布,描述失效强度变化的过程广泛使用。
第9题:请详细阐述软件可靠性管理在全生命周期各阶段的工作内容。
参考答案:需求阶段:明确可靠性目标/运行环境约束/失效判定标准并写入需求。设计阶段:开展可靠性设计(容错/检错/降复杂度),评估识别风险点。编码阶段:制定规范/代码评审/控制复杂度避免引入缺陷。测试阶段:制定可靠性测试计划,执行测试收集失效数据开展评估。运维阶段:监控运行收集线上失效数据快速修复缺陷迭代优化。
第10题:请详细阐述可靠性测试用例设计的三种类型及设计策略。
参考答案:①正常场景用例:按运行剖面正常输入设计,占比较高(如转账金额500元余额充足验证成功)。②异常场景用例:模拟异常输入和环境验证容错检错能力(转账金额负数/收款人不存在/数据库不可达)。③边界场景用例:覆盖输入边界值(转账0元/1元/限额临界值如5万元和5万元+1元)。策略:按操作概率分配用例数量,高频和高风险操作重点覆盖。
第11题:请详细阐述失效率λ(t)与可靠度R(t)的数学关系并举例计算。
参考答案:失效率λ(t)=-[dR(t)/dt]/R(t)。当λ(t)=λ为常数时R(t)=e⁻λᵗ。举例:某软件λ=0.001次/小时,运行t=100小时→R(100)=e⁻⁰⋅¹≈0.9048。MTTF=1/λ=1000小时。①高危期的失效率→可靠性上升。②稳定期失效率常数→R(t)=e⁻λᵗ。③浴盆曲线包含早期失效期/稳定期/损耗期。
第12题:请详细阐述系统工程中"降低复杂度设计"的方法及其对可靠性的影响。
参考答案:①模块化设计:拆分为高内聚低耦合独立模块降低整体复杂度减少缺陷引入概率。②代码复杂度控制:限制圈复杂度/行数/嵌套层数。③避免重复代码:封装公共函数减少不必要维护和缺陷。影响:直接系统化降低缺陷引入概率提升可靠性。
第13题:请详细阐述可靠性测试实施的关键步骤及注意事项。
参考答案:测试环境需搭建与实际运行一致的软硬件环境。按运行剖面执行测试记录结果。失效记录与分析:对每个失效记录环境/输入/日志分析原因区分可靠相关和非相关失效。数据收集:统计总运行时间/失效次数/间隔/严重程度。
第14题:请详细阐述可靠性评价中选择模型的依据和方法。
参考答案:选择模型依据:①软件类型——安全攸关系统选保守模型,普通消费软件选统计类;②失效数据特征——指数分布选指数类模型,先高后低选威布尔;③评估目标——预测可靠性选NHPP模型,估计缺陷总数选JM模型;④数据量——少时选简单模型,多时选复杂灵活模型。
第15题:请详细阐述可靠性数据的收集内容及在评估中的作用。
参考答案:收集内容:失效时间(发生时间和间隔)、失效信息(现象/日志/输入场景)、运行信息(总运行时间/操作次数/用例覆盖)、修复信息(是否缺陷/修复时间/是否复发)。作用:数据是评估的基础,准确的数据决定评估的可靠性。
第16题:请详细阐述容错设计技术的三种主要方法及其对比。
参考答案:N版本:N个独立版本同时运行表决输出,适合高实时性场景,成本高。恢复块:主模块和备用模块按顺序尝试直至成功,节省资源但回滚开销大。防卫式:代码中校验和检测防御,成本最低但只能防御已知问题,不能覆盖未知缺陷。三种方法可组合使用提升整体可靠性(如在N版本各版本内部用防卫式编程)。
第17题:请详细阐述系统配置技术的三种方法及其对可靠性的保障机制
参考答案:①配置分离将代码和配置分开存储避免硬编码问题。②配置校验系统启动时校验合法性确保关键参数正确。③灰度发布先灰度再到全量,降低配置错误影响范围。
第18题:请详细阐述检错技术的三种方法及各自的适用场景。
参考答案:①返回码检错适用于函数调用层级简单明确错误码定义的场景(传统C/C++/SQLite);②异常捕获检错适用于Java/Python等支持面向对象异常机制的场景(后端Web应用);③心跳检测检错适用于分布式系统中节点间状态监测的场景(Redis集群/服务注册中心)。
第19题:请详细阐述软件可靠性与软件可用性的关系与区别。
参考答案:区别:可靠性指软件持续正确运行的能力(失效率/MTTF)主要关注缺陷导致的失效;可用性指系统正常运行时间的比例(正常运行时间/总时间)主要关注服务可用。关系:可靠性是可用性的基础——只有软件可靠运行才能保障高可用。但可用性除软件可靠性外还依赖运维能力(故障检测/切换速度、备份/冗余设计的合理性)。
第20题:请详细阐述涵盖软件可靠性和安全性的设计原则。
参考答案:两者密切相关——失效可能带来安全隐患。容错防止整系统崩溃;检错技术及早发现问题避免扩散;降低复杂度使关键路径更可控;系统配置技术避免配置错误导致问题。
第21题:请详细阐述影响软件可靠性的四类因素及其作用机理。
参考答案:①软件自身因素——代码复杂度、缺陷密度、架构设计质量直接决定潜在缺陷数量(逻辑分支多、模块耦合高则失效概率高);②运行环境因素——硬件故障、操作系统稳定性、网络波动、并发负载等外部条件超出设计假设时诱发失效(如内存耗尽、连接超时);③人为因素——需求理解偏差、编码错误、测试遗漏、运维误操作等贯穿全生命周期的人为失误;④过程因素——开发流程规范性、评审充分度、变更控制严格度决定缺陷能否被尽早发现(成熟度高的过程可靠性更可控)。作用机理:四类因素相互叠加——软件自身的缺陷是内因,环境与人为因素是外因,过程因素是"放大或抑制"内外因的管理变量。
第22题:请详细阐述失效率"浴盆曲线"的三阶段特征及其对软件可靠性管理的启示。
参考答案:浴盆曲线描述失效率随时间的变化:①早期失效期(调试期)——缺陷集中暴露,失效率快速下降,对应软件刚上线时缺陷密集发现修复的阶段;②稳定期(偶然失效期)——失效率低且近似恒定,对应软件成熟运行阶段,可用指数模型(常数λ)描述;③损耗期(耗损期)——硬件老化、环境变化或业务假设失效导致失效率回升(软件本身不磨损,但依赖的硬件/环境会老化,或需求变化使软件"过时失效")。管理启示:①上线前充分测试+灰度,尽快度过早期失效期;②稳定期按指数模型做可靠性预测与运维监控;③关注环境变化与硬件生命周期,提前规划升级替换避免进入损耗期。
第23题:请详细阐述狭义可靠性测试与广义可靠性测试的区别与联系。
参考答案:区别:①目标不同——狭义测试只为获取可靠性量化指标(可靠度、MTTF、失效强度),广义测试是所有为提升可靠性开展的测试(功能、性能、压力、容错、恢复等)的总和;②方法不同——狭义测试必须在统计有效的运行剖面上执行、记录失效数据并用模型计算指标,广义测试按常规测试设计方法进行;③对运行剖面依赖不同——狭义测试强依赖运行剖面,广义测试不必然使用。联系:广义测试是狭义测试的基础(先通过功能/压力测试消除确定性缺陷,狭义测试才有统计意义);狭义测试是广义测试的深化——在系统基本稳定后用运行剖面做统计性验证,给出可度量的可靠性结论。
第24题:请详细阐述N版本程序设计的局限性及缓解共同失效模式的对策。
参考答案:N版本程序设计的核心假设是"各版本独立失效",但实践中存在共同失效模式削弱该假设:①规范(规格说明)错误——各团队基于同一份错误规范开发,产生相同错误;②算法歧义/边界处理趋同——数学取整、浮点比较等边界问题各版本常犯同样错误;③测试数据与开发人员背景同质化。缓解对策:①多套独立规范——由不同团队分别编写规格或进行交叉评审;②强制多样性——不同开发团队、不同算法路线、不同编程语言/工具链、不同数据结构实现;③表决前增加一致性预处理与合理性检查(表决器不只做多数表决,还可做范围/约束校验);④对共因错误用第三方独立验证(如形式化验证、黄金版本对照)补充;⑤新版本上线前做"背靠背"测试,识别并消除版本间的相关性失效。
第25题:请详细阐述恢复块设计中验收测试(Acceptance Test)的作用与设计要点。
参考答案:作用:验收测试是恢复块的"判决器"——主模块执行后必须通过验收测试才认为结果正确;判定失败则触发回滚并切换到备用模块。它是区分"N版本靠表决、恢复块靠验收"的关键机制。设计要点:①验收条件必须可计算、可判定(如结果范围检查、不变量校验、与业务规则一致性检查),避免模糊标准;②验收测试的覆盖要针对主模块易错点(边界、异常输入),而非重复功能逻辑(否则丧失独立性);③验收测试自身必须可靠——若验收测试漏判错误结果,恢复块机制失效;④需配合检查点(Checkpoint)机制:执行前保存状态,失败回滚到检查点再执行备用模块;⑤超时保护:主模块执行超时视为失败进入备用模块。
第26题:请详细阐述按系统类型划分的可靠性目标(安全攸关/企业核心/消费级)及其设计含义。
参考答案:①安全攸关系统(航天、核电站、医疗设备、飞控)——失效可能造成灾难性后果,目标失效概率<10⁻⁹/小时、MTTF>10⁹小时量级。设计含义:必须采用N版本等强容错+冗余+全生命周期严格管理,成本服从可靠性。②企业核心业务系统(ERP、支付、银行核心)——失效导致业务中断与经济损失,但可容忍短暂停机,目标年可用率>99.9%、MTBF>876小时量级。设计含义:以冗余部署、故障转移、恢复机制为主,兼顾成本(CBAM权衡),重视运维快速恢复(MTTR)。③消费级软件(App、桌面软件)——失效影响有限,目标为周崩溃率<1%、不丢用户数据。设计含义:以测试、崩溃监控、热修复为主,成本优先。三类目标决定可靠性设计投入强度与容错技术选择的差异。
第27题:请详细阐述可靠性管理在需求阶段与设计阶段的具体工作。
参考答案:需求阶段:①明确可靠性目标(MTTF/失效概率/可用率量化值);②界定运行环境约束(硬件、OS、网络、负载范围);③定义失效判定标准(什么情况算失效、严重度分级),将三者写入需求规格说明书作为后续验收依据。设计阶段:①开展可靠性设计——选择容错方案(N版本/恢复块/防卫式)、设计检错机制、降低复杂度、系统配置策略;②可靠性建模与预测——用模型估算设计方案的可靠性水平,判断是否可达标;③可靠性分析——FMEA(失效模式与影响分析)/FTA(故障树分析)识别高风险点并改进设计;④可靠性分配——把系统级目标分解到各模块/组件(按复杂度、风险加权),形成可验证的模块级指标;⑤评审——设计评审把关可靠性设计完整性。
第28题:请详细阐述可靠性管理在测试与运维阶段的具体工作。
参考答案:测试阶段:①制定可靠性测试计划(运行剖面、测试环境、用例与停止准则);②搭建与实际运行一致的测试环境;③按运行剖面执行可靠性测试;④收集失效数据(失效时间/现象/环境/输入);⑤失效分析区分可靠性相关失效与环境/操作失效;⑥利用模型评估当前可靠性指标并与目标比对,未达标则反馈设计改进后回归。运维阶段:①线上可靠性监控(崩溃率、错误率、慢调用、资源水位)与告警;②收集生产环境失效数据(日志、调用链、崩溃堆栈)形成缺陷库;③快速修复与版本发布(含灰度、回滚预案);④定期可靠性评估与趋势预测,驱动持续改进;⑤重大故障复盘(根因分析)沉淀改进项,防止同类失效复发。
第29题:请详细阐述Jelinski-Moranda(JM)模型与Goel-Okumoto(GO)模型的异同。
参考答案:相同点:①两者都属于基于失效数据的统计模型,用于估计软件中残留缺陷与可靠性;②都假设测试中不断发现并修复缺陷、可靠性随之提升。不同点:①失效过程假设——JM模型假设初始缺陷总数N为固定未知数,每修复一个缺陷失效率按常数比例下降(分段恒定),失效间隔时间相互独立;GO模型假设失效过程为非齐次泊松过程(NHPP),失效强度随累积修复缺陷数连续递减。②数学形式——JM是离散步进式的失效率递减;GO是连续函数μ(t)描述累积期望失效数(如 μ(t)=a(1-e^(-bt)) 的指数型增长曲线)。③适用性——JM概念直观、适合缺陷数估计;GO更平滑、更贴近实际连续排错过程,工程上应用更广。
第30题:请详细阐述NHPP模型的基本原理、常见均值函数形式与适用场景。
参考答案:原理:NHPP(非齐次泊松过程)假设软件失效过程是强度随时间变化的泊松过程——单位时间内失效次数服从泊松分布,但期望失效强度λ(t)随时间(或随累积修复缺陷数)变化,克服了普通泊松过程"失效率恒定"的限制。常见均值函数形式:①指数型(Goel-Okumoto)μ(t)=a(1-e^(-bt))——早期失效多、后期收敛于总缺陷数a;②S型(延迟S形)μ(t)=a(1-(1+bt)e^(-bt))——考虑测试学习效应,失效曲线呈S形;③对数泊松执行时间模型等。适用场景:①测试阶段可靠性增长预测(估计还需多少测试时间达到目标失效率);②发布后缺陷趋势预测与运维排期;③失效数据较充分时的拟合评估。工程上常以实测失效数据拟合参数(最大似然估计),用拟合优度选择均值函数形式。
第31题:请详细阐述威布尔分布模型及其形状参数对失效率曲线的影响
参考答案:威布尔分布可靠性函数 R(t)=exp[-(t/η)^β](η为尺度参数、β为形状参数),失效率 λ(t)=(β/η)(t/η)^(β-1)。形状参数β决定失效率形态:①β<1——失效率随时间递减,描述早期失效期(调试期缺陷快速收敛);②β=1——退化为指数分布,失效率恒定,描述稳定期;③β>1——失效率随时间递增,描述耗损期(老化/环境劣化)。优点:一个模型通过β的取值即可统一描述浴盆曲线的三种形态,灵活性最强,适合复杂系统与多种故障模式混合的场景。应用注意:软件可靠性分析中常用β<1或β=1的形态;β>1更多反映硬件老化或业务环境劣化。参数可通过失效数据用图估计(威布尔概率纸)或数值方法(极大似然)拟合。
第32题:请详细阐述软件可靠性评价中选择可靠性模型的四个维度依据
参考答案:①软件类型与安全等级——安全攸关系统(航天/医疗)选择保守、经过充分验证的模型(如JM模型或指数型NHPP),普通消费软件可选统计/灵活模型;②失效数据特征——失效间隔服从指数分布选指数类模型(JM/GO),失效强度先高后低且曲线形态多样选威布尔模型,失效数随时间呈S形选延迟S型NHPP;③评估目标——预测未来可靠性/排期选NHPP类模型(给出趋势),估计残留缺陷总数选JM/GO类(估计总缺陷参数a);④数据量——失效数据少时选参数少、简单的模型(避免过拟合,如单参数指数模型),数据充分时可选多参数灵活模型。工程实践常同时拟合多个候选模型,用拟合优度(似然值/AIC)与预测精度(U-plot/Y-plot)比较后择优。
第33题:请详细阐述可靠性数据收集的内容体系与质量要求。
参考答案:内容体系:①失效时间数据——每次失效发生的日历时间/执行时间及相邻失效间隔,是多数模型的基础输入;②失效信息——失效现象、错误日志、触发环境与输入场景、严重程度;③运行信息——总运行时间、累计操作次数、用例执行覆盖、运行剖面实际分布;④修复信息——失效根因分类(软件缺陷/环境/操作)、修复耗时(MTTR数据)、修复后是否复发。质量要求:①完整性——不遗漏失效记录(自动化监控+日志埋点保障);②准确性——失效时间戳与现象记录准确,避免人为补记误差;③一致性——失效判定标准统一(可靠相关 vs 非可靠相关失效须明确区分);④代表性——数据来自符合运行剖面的测试/运行,否则评估结论失真。
第34题:请详细阐述运行剖面中操作模式识别与操作概率确定的方法。
参考答案:操作模式识别:①收集使用信息——通过日志分析、用户调研、行业经验梳理软件的所有功能使用场景(如网银的登录、查询、转账、理财、退出);②聚类归并——把相似使用场景归并为可统计的操作模式,粒度适中(过细难统计、过粗失真实)。操作概率确定:①数据统计法——从生产日志/埋点统计各模式实际调用次数占比(最准确);②调研估算法——无日志时通过问卷/访谈/专家估计各模式使用频率;③行业基准法——参考同类系统的公开使用分布。输出:各操作模式及发生概率表(概率和=1),再结合每个模式的输入分布形成完整运行剖面。注意:运行剖面应随业务变化定期更新(如网银新增扫码支付后需重测概率分布)。
第35题:请详细阐述可靠性测试的停止准则(何时可以停止测试)及其依据。
参考答案:可靠性测试不能"测到没时间为止",应以数据说话,常用停止准则:①失效强度达标——当前失效强度(每单位执行时间失效数)降至目标值以下并保持稳定(如λ<0.001/h),说明剩余缺陷少且不易触发;②MTTF/可靠度达标——按已收集数据计算的MTTF或R(t)达到或超过合同目标(含统计置信度,如90%置信下MTTF≥目标值);③缺陷收敛曲线平坦——累计失效-时间曲线(如S型)进入平台期,新增失效稀少;④运行剖面覆盖充分——按操作概率完成预定的测试时长(如若干倍MTTF目标时间)无新失效;⑤经济性权衡——继续测试发现缺陷的边际成本大于修复与失效损失时停止。实践中常组合使用(如"目标失效强度+预定时长+置信度"三者同时满足)。
第36题:请详细阐述支持性设计的内容及其对可靠性的作用。
参考答案:支持性设计指为系统运行维护提供支撑、使故障可发现可诊断可恢复的设计,包括:①软件接口支持——对外提供稳定的API、错误码体系与文档,便于监控与外部系统正确对接(接口不稳定会引入集成类失效);②事件日志——记录关键操作与系统事件(用户、时间、操作类型、前后数据、结果),结构化分级存储,为失效复现与根因分析提供依据(日志缺失会使故障"不可诊断",延长MTTR);③记录外部错误——捕获并记录外部系统/依赖返回的异常,隔离外部故障对本系统的污染(避免外部异常直接导致本系统崩溃或数据错乱)。作用:①缩短MTTR(快速定位);②支持失效分类与统计(可靠性数据来源);③为审计与追责提供证据。
第37题:请详细阐述严格设计技术的内容及其对可靠性的作用。
参考答案:严格设计技术通过规范化和标准化降低人为失误引入缺陷的概率,包括:①文档规范化——需求/设计/接口文档采用统一模板与评审标准,保证设计意图无歧义传递(需求理解偏差是重要失效根因);②编程规范化——统一编码风格、命名规则、代码结构(如Google编码规范),禁用危险语法(如goto、易错宏),降低编码错误概率;③标准化开发——基于成熟框架、设计模式与标准流程(代码评审、CI/CD门禁、静态检查工具)开发,不"发明轮子"(自研组件缺陷密度通常高于成熟组件)。作用机理:规范化把"靠个人水平保证质量"变为"靠过程与标准保证质量",从源头抑制缺陷引入,是成本最低的可靠性投入。
第38题:请详细阐述减轻设计技术(冗余/降额/安全裕度)的内容与适用场景。
参考答案:减轻设计技术通过"留余量"降低失效风险:①冗余设计——为关键组件提供备份(双机热备、多副本、备用链路),单点失效时自动切换,直接提升可用性;适用于关键服务、存储、电源等(与容错设计的区别:冗余针对"组件级失效",容错针对"逻辑级错误")。②降额设计——让组件在低于额定能力的条件下工作(如CPU负载不超过额定60%、内存使用限制阈值),留出性能余量应对峰值与老化,降低因过载导致的失效;适用于资源密集型系统。③安全裕度设计——在设计参数上预留安全边界(如结构强度、电压电流、容量上限多留20%),防止边界条件突破设计值引发失效;适用于硬件/嵌入式/工程类系统。软件领域对应实践:容量规划留buffer、限流阈值低于理论峰值、超时与连接池配额留余量。
第39题:请详细阐述检错技术与容错技术的区别及二者在架构中的配合方式。
参考答案:区别:①目标不同——检错技术目标是"发现错误"(让失效可见),容错技术目标是"容忍错误"(错误发生后系统仍正确运行);②时机不同——检错在错误发生后第一时间报告(返回码/异常/心跳),容错在错误已存在时通过冗余/重试/回滚维持服务;③代价不同——检错成本低(代码级检查),容错成本高(需要冗余资源或切换机制)。配合方式(架构中的纵深防御):①第一层检错——输入校验、异常捕获、心跳检测尽早发现异常;②第二层容错——发现异常后触发降级、重试、熔断、回滚、故障转移等容错动作(如异常捕获后调用备用通道=检错触发容错);③第三层恢复——容错失效时靠恢复机制(重启、重建、数据修复)回到正常态;④贯穿全程的日志监控把每层动作记录下来供分析与改进。
第40题:请详细阐述系统配置技术的三种方法,并说明配置中心(如Nacos/Apollo)如何落地。
参考答案:①配置分离——把可变参数(数据库地址、限流阈值、开关)从代码中分离,存入配置文件/配置中心,杜绝硬编码(硬编码修改需发版重启,风险大且易漏改);②配置校验——应用启动或配置变更时校验配置合法性(格式、范围、依赖项齐全性、引用资源可达),错误配置直接拦截,避免"配置错了系统带病运行";③灰度发布配置——配置变更先在小范围节点生效验证,再逐步全量(如先灰度10%流量观察指标),降低错误配置的影响半径。配置中心落地:Nacos/Apollo提供配置存储、变更推送(实时生效无需重启)、版本管理与回滚、权限控制、变更审计、灰度发布(按IP/集群/比例)与配置监听——把三种方法工具化,是分布式系统配置可靠性的标准实践。
第41题:请详细阐述可靠性验证测试与可靠性增长测试的区别与联系。
参考答案:区别:①目的不同——可靠性增长测试目的是"通过测试-修复-再测试循环促使可靠性增长"(发现缺陷就修,失效率应持续下降),可靠性验证测试目的是"在固定条件下客观度量当前可靠性是否达到目标"(测试期间发现缺陷也不立即修复,保证统计口径一致);②修复策略不同——增长测试边测边修,验证测试测期不修(修复会改变失效过程破坏统计有效性);③数据使用不同——增长测试用失效数据拟合增长模型(NHPP等)预测趋势,验证测试用失效率/MTTF点估计与置信区间判定是否达标。联系:实践中先做增长测试(让系统成熟),达到预期后再做验证测试(出具有统计意义的达标结论)——增长是过程、验证是结论。
第42题:请详细阐述冗余设计的分类(结构冗余/信息冗余/时间冗余)及软件系统中的典型实现。
参考答案:①结构冗余(硬件/组件冗余)——通过重复配置组件提高可用性,软件中典型实现:多实例部署(负载均衡+故障转移)、双机热备(主备/主主)、多副本存储(数据库主从、分布式存储副本)、同城双活/异地灾备;②信息冗余(数据冗余)——通过附加校验信息发现/纠正错误,典型实现:数据校验位/校验和(CRC、奇偶校验)、纠错码(海明码)、消息摘要/签名防篡改、数据库冗余字段与幂等键、备份与归档;③时间冗余——通过重复执行克服瞬时错误,典型实现:失败重试(指数退避)、事务重放、定时任务补偿(对账)、看门狗超时重触发。软件可靠性设计中三类冗余常组合使用:结构冗余保障可用性、信息冗余保障正确性、时间冗余应对瞬时故障。
第43题:请详细阐述表决机制在N版本程序设计中的实现方式与设计考量。
参考答案:实现方式:①多数表决——N个版本并行运行,输出相同(或多数一致)的结果作为最终输出,典型为三模冗余TMR(3个版本中≥2个一致即输出),可靠性优于单版本;②比较表决——两版本互为校验(结果不一致则告警并启用备选策略),成本低于三模但无多数判定能力;③加权表决——按版本历史正确率加权,正确率高的版本权重大(需先验数据)。设计考量:①表决粒度——结果级表决(输出数据比较)vs 中间量表决(关键中间结果比较,提高错误定位能力但开销大);②一致性判定——浮点结果需定义误差容限(精确相等会误判),结构化结果需规范比较规则;③表决器自身必须可靠(表决器是单点,需独立设计与测试);④防共因失效——各版本须真正独立(不同团队/算法/语言),否则表决形同虚设。
第44题:请详细阐述恢复块设计中检查点(Checkpoint)与回滚(Rollback)机制的实现要点。
参考答案:检查点机制:①时机——主模块(及各备用模块)执行前保存系统状态到检查点(内存快照/磁盘文件/数据库事务保存点);②内容——必须完整覆盖模块执行会修改的状态(全局变量、文件、数据库事务、外部调用副作用需通过事务/补偿可回滚),否则回滚不干净;③开销控制——高频小状态用内存检查点,低频大状态用持久化检查点,避免检查点本身成为性能瓶颈。回滚机制:①验收测试判定失败后,从检查点恢复状态(数据库回滚事务/内存状态还原/补偿操作撤销外部副作用);②再按顺序执行备用模块,再次验收,循环直至成功或备用模块耗尽;③回滚需幂等安全——重复回滚不产生副作用;④记录回滚日志(原因、次数),若所有模块失败则向调用方报告失效并进入降级/告警流程。典型应用:数据库事务(隐式检查点+回滚日志)、批处理任务断点续跑、服务调用失败的状态补偿。
第45题:请详细阐述软件可靠性分配(目标分解)的原则与方法。
参考答案:原则:①目标一致——各模块分配的可靠性综合后应满足(不低于)系统总目标;②按风险/复杂度加权——逻辑复杂、变更频繁、安全关键的模块分配更严苛的指标(或更多可靠性投入预算);③可验证——分配后的模块指标可测量、可测试(否则无法跟踪)。方法:①等分法——各模块平均分配(仅用于模块同质且无先验信息的简单情形);②加权分配法——按模块规模(代码行/功能点)、复杂度(圈复杂度)、历史缺陷率、运行时间占比(运行剖面权值)加权分配,关键模块分配更高的MTBF或更低的失效率;③工程类比法——参考同类系统的模块级可靠性实测数据分配;④优化分配——以"总成本最小满足系统目标"为目标函数(可靠性投入-收益模型),用数学规划求解。落地:分配结果写入设计文档,作为各模块测试与验收的依据,随设计演进滚动调整。
第46题:请详细阐述软件可靠性工程(Software Reliability Engineering, SRE)的构成及其与一般软件工程的差异。
参考答案:软件可靠性工程是"以可靠性为目标的一整套工程活动",教程体系包含六大构成:①可靠性设计——容错、检错、降复杂度、系统配置、严格/减轻/支持性设计(从源头减少失效);②可靠性分析——建模预测、FMEA/FTA识别风险;③可靠性度量——建立指标(R(t)/MTTF/失效强度/可用率)与数据采集体系;④可靠性管理——全生命周期各阶段的可靠性活动与评审;⑤可靠性测试——运行剖面+统计测试给出量化结论;⑥可靠性评价——模型拟合、评估与预测,支持发布与运维决策。与一般软件工程的差异:①目标维度——一般工程以"功能按时交付"为主线,可靠性工程以"失效概率/MTTF等量化指标"为独立跟踪对象;②方法维度——引入统计与概率模型(运行剖面、随机测试、失效建模),一般工程以确定性测试为主;③数据维度——可靠性工程强制要求失效数据的系统化采集分析,一般工程只记录缺陷。二者互补:一般工程保证"功能正确",可靠性工程保证"正确性可持续、失效可度量可控"。
第47题:请详细阐述从架构层面提升软件可靠性的主要策略(结合第七章质量属性策略联动)。
参考答案架构是可靠性的根基,主要策略:①冗余与高可用架构——多实例部署、故障转移、多副本存储、异地容灾,消除单点(对应可用性策略);②错误隔离——舱壁模式(按业务/租户分池隔离资源)、熔断器(依赖故障快速失败不拖垮主链路)、进程/容器级隔离,防止失效"传染扩散";③事务与一致性保障——本地事务、分布式事务(TCC/Saga)、本地消息表保证数据可靠;④重试与幂等——可恢复异常指数退避重试,写操作幂等键防重复处理;⑤消息可靠性——消息队列的可靠投递(确认机制、死信队列、重试)支撑异步解耦下的不丢不重;⑥可观测性——日志、指标、链路追踪三支柱使失效可发现可定位(缩短MTTR);⑦容量与韧性——限流降级、弹性伸缩、容量规划,避免过载失效;⑧配置与发布可靠性——配置中心、灰度发布、快速回滚(对应系统配置技术)。这些策略与第七章 2.7 可靠性策略(容错设计、重试机制、事务控制)一脉相承,本章提供的是失效度量(MTTF等)与验证方法(运行剖面测试)使策略效果可量化。
第48题:请详细阐述软件可靠性文档体系(可靠性计划/测试报告/失效分析报告)的内容与作用。
参考答案:①软件可靠性计划——项目早期制定,内容包括:可靠性目标(量化指标)、可靠性组织与职责、各阶段可靠性活动安排(设计/分析/测试/评审)、运行剖面定义计划、数据收集方案、工具与环境、里程碑与评审点。作用:把可靠性要求落成可执行、可跟踪的项目活动。②可靠性测试报告——测试完成后输出,内容包括:测试环境与运行剖面说明、测试执行量(时间/用例/覆盖)、失效数据统计(失效次数/强度/间隔)、模型评估结果(MTTF/可靠度及置信区间)、与目标对比结论、未达标项与建议。作用:给出系统可靠性是否达标的"证据"。③失效分析报告——针对重大/典型失效,内容包括:失效现象与影响、复现路径、根因分析(缺陷/环境/操作)、修复措施与验证、预防措施(流程改进)、同类风险排查。作用:防止同类失效复发,沉淀组织可靠性经验库。
第49题:请详细阐述可靠性测试中失效分类(可靠相关失效 vs 非可靠相关失效)的意义与判定方法。
参考答案:意义:可靠性量化评估(MTTF、失效率计算)的分子分母口径必须一致——只有"软件缺陷导致的可靠相关失效"才计入软件失效率;若把环境故障、操作失误、测试脚本错误等非相关失效混入统计,会高估失效率、得出错误的可靠性结论(如把机房断电计入后MTTF严重偏低,误判软件不达标)。判定方法:①失效根因分析——通过日志、堆栈、复现实验定位根因:软件逻辑缺陷→可靠相关;硬件故障/网络中断/第三方服务故障→视定义(若软件未做容错处理导致崩溃则相关,若软件正确降级则通常不计);②操作核对——测试执行是否符合用例设计(脚本错误、数据错误导致的不算);③修复验证——修复该问题后同类失效是否消失,辅助确认归属。实践中在失效记录阶段即打上分类标签,评估时剔除非相关失效并记录剔除依据。
第50题:请综合论述软件可靠性工程的完整闭环:从可靠性需求到持续改进的全过程。
参考答案:完整闭环如下:①可靠性需求——按系统类型(安全攸关/企业核心/消费级)确定量化目标(失效概率/MTTF/可用率)与运行剖面定义;②可靠性设计——以容错、检错、降低复杂度、系统配置、严格/减轻/支持性设计等手段从源头降低失效可能性;③可靠性分析预测——用建模(指数/威布尔/对数正态/NHPP)与FMEA/FTA分析设计方案的可靠性水平,并做目标分配与评审;④可靠性实现——编码规范、代码评审、静态检查落实设计意图;⑤可靠性测试——构建运行剖面→统计测试→收集失效数据(增长测试+验证测试),给出量化指标与达标结论;⑥可靠性评价——基于全量失效数据用模型评估当前水平、预测未来趋势,支持发布/运维决策;⑦运行期可靠性管理——线上监控与数据采集、快速修复、灰度发布、定期评估——发现问题回到①~⑥持续改进,形成"设计→度量→改进"的PDCA闭环。全过程贯穿三条主线:数据(失效数据全程采集分析)、模型(定量描述与预测)、管理(各阶段评审与目标跟踪),最终把可靠性从"口号"变为"可度量、可控制、可持续改进的工程属性"。