软件设计编码 ==========>可靠性
类别 | 项目 | 类型 | 备注 |
原则要求 | 软件系统具有统一的错误处理策略,区分外部异常、软件错误、逻辑错误 | 设计要求 | 外部异常需要保护,采用防御式编程;软件错误需要在开发期尽早暴露,使用ASSERT(C/C++)或RuntimeException(JAVA),逻辑错误使用断言检查前置条件和后置条件 |
确保函数返回值和软件异常得到合理的处理。只处理软件层面能够处理的错误,无法处理的错误失败即停 | 设计要求 | 软件自身无法处理的错误在系统级进行恢复 | |
在数据第一次进入系统的边界进行检查 | 设计要求 | 权衡可靠性与性能,系统内部的数据接口遵循“契约式设计”原则 | |
对所有系统调用、跨模块调用的返回值进行检查 | 设计要求 | ||
所有对外部资源的访问支持超时机制 | 设计要求 | 外部资源包括:内外部网元、数据库、DNS服务器等 | |
捕获中断(Ctrl+C、Kill、Coredump),记录运行状态,并清除中间状态或临时文件 | 设计增强 | ||
正确处理竞态条件,保持操作原子化 | 设计要求 | 例如全局变量支持加锁或原子赋值,大文件修改通过“副本-更名”方式避免读写竞争 | |
遵循可测试性规范的日志要求,所有重要状态变化、关键应用资源的统计信息、接口消息统计、异常分支路径记录日志 | 设计要求 | 用于应用软件的故障定界与定位 | |
内存数据 | 涉及内存访问的API接口参数中必须包含内存长度 | 设计要求 | |
ID溢出 | 检查项 | 长时间运行超出有效数据范围 | |
大数据量处理 | 检查项 | 防止内存占满,需要分批处理 | |
资源池 | 防止资源池占满后,请求资源的线程无限阻塞 | 设计要求 | |
对资源池中资源的有效性有校验或再生机制 | 设计要求 | 反面案例如数据库连接池中连接失效的情况 | |
文件 | 0D0A格式 | 检查项 | |
大小写敏感 | 检查项 | ||
文件名包含空格 | 检查项 | ||
大文件读入 | 检查项 | ||
时间 | 夏时制跳变 | 检查项 | |
跨年度/月度 | 检查项 | ||
润年润月闰秒 | 检查项 | ||
时间跳变 | 检查项 | ||
非法时间输入 | 检查项 | ||
消息接口 | 不可识别的消息报文 | 检查项 | 错误消息恢复正常后要求能自动界定正规字段 |
CRC校验错 | 检查项 | ||
消息包超过最大处理长度 | 检查项 | ||
不可识别的消息字段 | 检查项 | ||
消息字段超过最大处理长度 | 检查项 | ||
消息字段缺失 | 检查项 | ||
消息字段重复 | 检查项 | ||
可选字段未赋值 | 检查项 | ||
字段顺序错误 | 检查项 | ||
字段值类型非法 | 检查项 | ||
字段值超出有效范围 | 检查项 | ||
配置 | 配置文件内容格式错乱 | 检查项 | |
关联配置数据逻辑错误 | 检查项 | ||
配置值非法 | 检查项 | 格式正确但值不符合要求 | |
前后台配置数据不一致 | 检查项 | ||
配置与内存不一致(配置未生效) | 检查项 | ||
配置项不存在 | 检查项 | ||
空字符串(处理出错) | 检查项 | ||
冗余配置中备用地址配置错误或未配置 | 检查项 |