防御式编程是提高软件质量技术的有益辅助手段。防御式编程的主要思想是:子程序应该不因传入错误数据而被破坏,哪怕是由其他子程序产生的错误数据。这种思想是将可能出现的错误造成的影响控制在有限的范围内。
主要内容如下:
1.保护程序免遭非法输入数据的破坏
1.检查所有来源于外部的数据的值
2.检查子程序所有输入参数的值
3.决定如何处理错误的输入数据
使用迭代设计、编码前先写伪代码、写代码前先写测试用例、低层设计检查等等
2.断言
建立自己的断言机制
使用断言的指导建议
1.用错误处理代码来处理预期会发生的状况,用断言来处理绝不应该发生的状况
2.避免把需要执行的代码放到断言中
3.用断言来注释并验证前条件和后条件
4.对于高健壮性的代码,应该先使用断言再处理错误
3.错误处理技术
1.返回中立值
2.换用下一个正确的数据
3.返回与前次相同的数据
4.换用最接近的合法值
5.把警告信息记录到日志文件中
6.返回一个错误码
7.调用错误处理子程序或对象(错误处理职责集中到一点)
8.当错误发生时显示出错信息(处理开销少,但散步信息)
9.用最妥当的方式在局部处理错误(灵活度,高风险:正确性,可靠性,散步信息)
10.关闭程序(医疗)
4.异常
1.用异常同志程序的其他部分,发生了不可忽略的错误(提供无法被忽略的错误通知机制)
2.只在真正例外的情况下才抛出异常(处理罕见或者不该发生的情况)
3.不能用异常来推卸责任(能在局部处理则在局部处理)
4.避免在构造函数和析构函数中抛出异常,除非你在同一地方把他们捕获
5.在恰当的抽象层次抛出异常
6.在异常消息中加入关于导致异常发生的全部信息
7.避免使用空的catch语句
8.了解所有函数库可能抛出的异常
9考虑创建一个集中的异常报告机制(处理一致性:异常种类,如何处理)
10.考虑异常的替换方案
*5.隔离程序,使之包容由错误造成的损害
在输入数据时将其转换为恰当的类型
6.辅助调试的代码
尽早引入辅助调试的代码(越早愈好)
采用进攻式编程
计划移除调试辅助的代码
7.确定在产品代码中该保留多少防御使代码
1.保留检查错误的代码
2.去掉检查细微错误的代码
3.去掉可以导致程序硬性崩溃的代码
4.保留可以让程序稳妥的崩溃的代码
5.为你的技术支持人员记录错误消息信息
6.确认留在代码中的错误消息是友好的
8.对防御式编程采取防御的姿态
现在公司有代码大全2这本书,不忙时阅读一下,之前就有前辈强烈推荐这本书,最近有点小体会。
项目刚上线,还在不断的完善过程中,有些问题是很简单,但没有做,就可能会造成严重的问题,比如:
添加会员的时候,对手机号没有去除前后空格或其他的字符串信息,就直接保存到数据库,这样查询的时候输入不带空格的正确信息也不会查询到相关信息。。。因为是以接口的方式提供,要求调用方必须去除空格,但别人怎么调用自己是不知道的,这就想到防御式编程的思想了。 之后这段时间里,对项目不断的完善,慢慢总结吧。 像字符串信息,必须验证非空、取空格等吧。。
分享到:
相关推荐
防御式编程 Defensive Programming.PPT完整版(精品课件) 大纲: 保护程序免遭非法输入数据的破坏 断言 错误处理技术 异常 隔离程序 辅助调试代码
防御性编程是一种软件开发策略,旨在提前预测并防止潜在错误,从而提高软件的稳定性和可靠性。在本主题“防御性编程之三”中,我们将会深入探讨如何在C++编程中利用源码和工具来实现有效的防御性编程。这篇博客文章...
这些技术覆盖了代码的组织与布局、基本编程习惯以及防御式编程等核心主题。通过深入理解这些知识点,可以帮助开发者编写出更稳定、更易于维护的代码。 #### 核心知识点详解 ##### 一、防御式编程(Defensive ...
- **防御式编程**:重点讲解了防御式编程的概念,包括如何在设计子系统时考虑各种可能的异常情况。 - **安全策略**:探讨了如何通过合理的输入验证和边界检查等手段来防止外部攻击或数据损坏。 4. **第4章 对程序...
【描述】:本章专注于提升MapReduce应用的可靠性,通过MRUnit创建单元测试,进行本地实例测试,理解和调试MapReduce,以及采用防御式编程策略处理可能出现的问题。 【标签】:技术方案 【正文】: 在开发...
实验报告的标题是“哈工大hit软件构造lab4实验报告”,主要涵盖了异常与错误处理、防御式编程以及测试和调试三个核心主题。这是一份针对2020年春季学期计算机学院《软件构造》课程的实验内容,旨在让学生深入理解...
- **第3章:为子系统设防** - 探讨了如何通过防御式编程来提高系统的健壮性和可靠性。 - **第4章:对程序进行逐条跟踪** - 指导读者如何进行详细的代码审查和调试过程。 - **第5章:糖果机界面** - 通过一个具体...
6. 安全编程模式:书中的源码会展示如何使用一些安全编程模式,如防御式编程、最小权限原则和编码规范,以减少安全风险。 7. 输入验证:有效的输入验证是防止攻击的第一道防线。书中可能详细阐述如何对用户输入进行...
实验报告“Lab-4 1160300314 朱明彦 report 1”涵盖了软件构造课程中的重要主题,包括异常与错误处理、防御式编程、测试和调试。以下是这些知识点的详细说明: **异常与错误处理** 异常处理是软件开发中的关键部分...
这种防御式编程方法能够显著提高软件的整体稳定性。 #### 第4章 对程序进行逐条跟踪 这一章节聚焦于程序调试技巧,特别是如何通过逐行分析代码来定位和修复错误。它涵盖了使用调试工具、设置断点和单步执行等技术...
7. 防御式编程不被提倡:在LeetCode题解中,为代码简短而忽略了防御式编程的一些原则,如不检查malloc/new返回指针是否为nullptr,不检查函数入口参数的有效性等。 8. 编程学习:本书假定读者已经学习过《数据结构...
- **流行性**:示例代码应体现当前最佳编程实践,如使用Unicode、错误处理、防御式编程等。 - **可靠性**:代码示例必须符合法律、隐私和政策标准,不得包含侵入性或低质量的编程实践,且所有安装和执行步骤应可逆。...
此外,文档也提到了防御式编程,这是一种在代码编写过程中加入额外检查以防止潜在错误的编程习惯,比如检查指针是否为空,验证函数输入参数的有效性等。然而,文档指出,在LeetCode的解题环境中,为了编写更简洁的...
本书详细阐述了防御式编程的原则和实践方法,包括预条件检查、断言使用等。这些技巧对于提高软件的质量和可靠性至关重要。 #### 三、标准C++库 **3. 深入字符串** 字符串是编程中最常用的数据类型之一。本章重点...
防御式编程是一种预防性的编程策略,旨在尽早发现并处理潜在错误,以避免程序在运行时出错。在未来的工作中,我需要更加注重编写健壮的代码,以防止可能的问题发生。 另外,我在项目架构设计方面还有待提升。在项目...
但是,这一点对于实际的软件开发而言,防御式编程是非常重要的,因为它可以提高代码的健壮性和可维护性。 在如何使用LeetCode的问题上,作者建议根据不同的情况采取不同的策略。对于即将参加面试的人来说,他建议...
防御式编程和契约式编程则是提高代码质量的方法,前者要求对所有输入数据保持警惕并处理异常,后者则规定模块间应遵循统一的通讯协议,违反协议则抛出异常。 【团队合作】 技术团队的成功很大程度上取决于团队合作...
《浅谈C语言中影响程序安全性的几点因素》 C语言作为一门强大的编程语言,其灵活性和高效性深受程序员喜爱,然而,这也...理解并掌握这些知识点,结合防御式编程,可以帮助程序员编写出更安全、更稳定的C语言程序。