程序员的编程、调试、排错小建议

在空白的文本编辑器里打开一个崭新的文本,没有一行代码,出现在眼前的是一个充满了无限可能和希望的项目。可是,当数千行的代码写完之后,整个项目因为bug的出现而被压垮了,更别说添加什么新功能了...这也许是对程序员的最大打击,在饱满的热情上浇了一盆冷水。其实,最好的软件程序员当然知道怎样去发现并修复这些bug,在刚开始编程的时候就通过软件工程的最好方法来降低bug的出现概率。

几乎没有哪个程序员能够写出一个bug都没有的代码,但是解决方法总是比困难多得多。多实践和坚毅的决心是成功的关键,这样才能够写出清洁代码,保证软件系统的可靠性。

下面一起来看看这些可以镇压bug的工具箱。

1. 输出语句

代码调试的首要工具就是插入可靠地、真实的输出语句。当输出语句数量庞大且不易于管理的时候,在输出语句里恰当使用记录系统,这可以说是一个等效的好方案。许多编程语言里都配备了现成的类库,例如在Python里构建的记录库。

输出语句是程序员检查数据值和变量类型最快、最简单和最直接的方式。高效的输出语句能够帮助程序员通过一段代码来跟踪数据流,并快速识别bug源头。虽然先进的调试工具有很多,但是如果你想调试一段代码的话,这个普通的输出语句的方法应该是程序员最先考虑的方法。

2. 调试器

源代码调试器采用了输出语言方法里的逻辑推理。这样可以让程序员一行一行的单步执行代码,同时监测从变量值到底层虚拟机整个状态的一举一动。另外,大部分的编程语言都具有多个调试器,可以提供不同的功能,包括图形接口、终止程序的断点设置、执行环境内部任意代码的实施。

在许多情况下,调试器可以说是大材小用了,但如果合理利用的话,调试器绝对是一款高效率的工具。更多调试器的功能请看Python调试器:pdb。

3. Bug跟踪系统

在一些比较重大的软件项目里,使用bug跟踪系统是很有必要的。如果没使用bug跟踪器,最典型的状况就是程序员要整理以往的邮件或者是聊天记录来查找bug,更糟糕点儿的就是程序员根本不记得其它东西,印象里只有一点bug的文档。一旦这种情况发生,bug将必然充斥着整个代码编程,更加严重的是,想要识别出这些bug并确定它们的位置是很难的。

一个简单的文本文件在项目里可以作为最初的bug跟踪系统。随着代码库的不断增加,bug衍生出一个文本文件并不需要太长的时间。有很多商业和开源的bug跟踪软件提供的解决方案都是可以考虑的,选择哪一个bug跟踪软件首先要明确的部分就是要确保在编程项目里,那些非程序人员能够快速使用这个bug跟踪系统。

4. Linter

在某些编程语言里,Linter可以执行对代码的静态分析,以便在代码编写和运行之前识别出问题区域;在一些其它编程语言里,Linter工具对于语法检查和增强风格是很有帮助的。编程的时候在编辑器里打开一个Linter程序,或者是在代码编写和运行之前通过Linter传递代码,这些都有利于程序员在使用软件之前发现并纠正更多的错误。因此,使用Linter可以帮你在节省宝贵时间的同时揪出因语法错误、打字错误或数据类型错误而引起的bug源头。

想要知道什么样的Linter最适合你使用,看看Python的Linter工具:Pyflakes。

5. 版本控制

任何一个重大的软件工程项目里都不应该忽略使用版本控制系统。举例而言,像Git,Mercurial和SVN这类的版本控制允许不同的代码库版本在不同的基础上是可以分开的。

不同的控制版本可以被合并到一起,因此,多个程序员可以同一时间运行同一个代码库。版本控制在代码排错里同样有着举足轻重地位,可以让程序员回滚修改较早版本的代码,尽可能在错误出现之前,在代码库里对错误进行修复。

6. 模块化

缺少架构的代码是难以修复bug的主要源头。只要代码易于理解,而且理论上行得通,那么对于程序员来讲,找到并快速修复bug并不是什么棘手的事情。另一方面,越是重要的代码出现错误的几率就越大,找到这个错误相对也就比较困难。

设计软件的组件经常需要考虑一点就是所谓的代码模块化,代码模块化可以帮助程序员更好的用两种方法来理解软件系统。第一,模块化能够创造出一定层次的抽象感,在没有完全理解所有细节的情况下也能想象出系统的模型。比如,程序员正在构建一个商业系统,可能会考虑到信用卡处理模块,然后观察这个模块和其余代码有什么联系,根本不用考虑信用卡处理模块的所有详细内容。第二,模块的详细说明,这个详细说明是不会和别的模块内容混淆的,就像每个卡只有一个卡号是一样的。

7. 自动化测试

单元测试和其它类型的自动化测试跟模块化是有很大关联的,可以说是相辅相承。自动化测试就是一段代码用特殊的输入值来运行软件,以此来检测程序运行是否和预期的相符合。

单元测试主要是用来检测单个功能的功能性,然而功能测试是用来检查特殊的程序性能,并且结合单元测试来检查软件系统的整体部分。有很多测试框架可以用来编写测试程序,而且大部分受欢迎的测试框架都是由Kent Bent编写的JUnit类库衍生而来的,Kent Bent是“测试驱动开发方法”最早的支持者之一。 Python标准类库包括一个JUnit的Python版本,称之为PyUnit或者unittest的单元测试框架。

8. 泰迪熊方法(橡皮鸭调试)

在软件编程界,就不得不提到传奇人物Brain Kernighan和Rob Pike,泰迪熊调试法源于一个大学计算机中心,在这里,学生们遇到神秘bug的时候就可以先把问题解释给这只摆在桌子上的泰迪熊听,然后才能向老师或助教求助。所以,有的时候只跟熊聊天也能解决问题。这一调试方法真的很管用,以至于风靡了整个软件工程行业,就像打印语句这一方,不管那些复杂的工具如何风起云涌,输出语句这一方法仍然在今天很受欢迎。

同泰迪熊调试法相似的一种方法叫做橡皮鸭调试法,当你在向这只始终保持沉默的橡皮鸭子解释的过程中,你会发现你的想法、观点、思路和实际的代码相偏离了,于是你也就找到了代码中的bug。一旦一个问题被充分地描述了它的细节,那么解决方法也是显而易见的。你觉得这个方法太“愚蠢”,太“弱智”了?是的,看上去,会这样做的人脑子好像是有点毛病。不过,我要告诉你的是,这个方法的确有效。因为,这就是“Code Review”的雏形!

9. 编写代码注释

注释的功能就是在更易于理解的层次上解释代码的编写目的,尽可能多写一些:每行代码是干什么的,怎么去完成,这些问题都应该在通读代码之后很容易找到答案才行。另外,给各个功能和变量取合理的名称也有助于简化代码实施的过程。在代码行下面的空白处填写注释来回答为什么要使用特殊的实现功能,或者一段代码怎样和程序的其余部分互动等等。

编写详细的注释可以说是软件工程里一步可靠地检验步骤,即使是在没有bug的代码里也是同样受用。这样,就算bug出现了也不用担心,注释会帮你节省数小时的排错时间。

10. 编写文档

代码注释是程序员以简单的方式和个人的观点编写的,而编写软件文档是用来描述软件系统的功能性,同时用户也可以看到这些软件文档。根据软件类型的不同,文档可以用来详述程序界面、图形界面或者工作流程。

编写文档还有一个好处就是,可以展示你对软件系统的理解程度,指出软件系统不够完善的部分或者有可能是bug源头的部分。

程序员的编程、调试、排错小建议

时间: 2024-10-14 07:24:53

程序员的编程、调试、排错小建议的相关文章

程序员高效编程的14点建议

概述:下面是开发大牛总结的高效编程的 14 点经验. 下面是开发大牛总结的高效编程的 14 点经验.不管你是编程菜鸟还是资深程序员,或许都能从中得到启发. 1. 计划 所谓 plan,其实就是对于编程中的“设计”阶段,当然,这里的 plan 并不像设计那样重量级.它要求我们程序员在正式编程前最少要考虑一下下面的问题: 你这个程序,工具或是项目的目的,究竟是用来干什么的.你只有知道做什么,要达到什么样的目的,你才能做得好,做得对. 需要有什么样的功能.需要你给出来个功能表.这样可以保证我们不会遗漏

结束程序员对编程的恨

用笔者的经历现身说法,编程的确是一件需要极大.极大耐心的活儿.加上使用的是Emacs编辑器(谢谢老顾的建议和他的耐心:D),会犯更多的小错误,解决起来也更加令人烦恼.耐心很重要.对于第五条,也比较赞同,笔者已经习惯了遇到错误去百度一下错误代码,同时会浏览一下相关的错误例子以及原因,学习很快.最后一条同样重要,周围的很多同学,遇到一点小问题就跑到论坛问老师,个人很反感.我想:在现在这个阶段,只要你想,应该没有你不可能独立解决的问题. 每个人刚开始的编程技术都不理想,所以我们决定列出一张清单,写上大

程序员在编程开发中的10个实用技巧

程序员在编程开发中的10个实用技巧,下面是我自己在工作中学到的一些简单的技巧和策略,希望能对各位有用.1.     橡皮鸭调试法不知道各位有没有这样的经历,当你正在给别人描述问题的时候,突然灵机一动想到了解决方案?这种情况的产生是有科学依据的.高谈阔论能让我们的大脑重新有条理地组织问题.在这种情况下,你的聊天对象就是“橡皮鸭”.团队中的每个人都应该积极主动乐意地成为彼此的“橡皮鸭”.有时候,如果你幸运的话,你的“橡皮鸭”搞不好还能给出有效的建议呢.2.     快速信息反馈一旦写好代码就要尽快得

提高程序员项目设计水平的11条建议

1.分析清楚你要面对的项目. 这是进行所有工作的第一步,如果你在这个地方都犯错了,那么后续所做的一切努力都是白费.比如,你要完成图书管理系统,那么你就应该明白这个系统主要是用于解决图书管理的问题. 2.考虑项目设计的方法. 在这个阶段,你要根据这个项目的特点考虑设计的工具和语言.比如,对于图书管理系统,它需要封装性好,这样有利于管理和维护.而这个系统开发周期较短,功能较简单.所以,根据其特点,选择Java作为开发语言会是一个不错的选择. 3.收集完整的需求. 花时间整理清楚你的用户群的基本需求有

Java程序员学习的6个小技巧

Java程序员学习的6个小技巧 知识改变命运,对于Java程序员来说,技术不断更新,只有及时充电,才能不被市场淘汰.北京Java培训机构分享Java程序员学习的6个小技巧兄弟连IT教育作为全国最大的PHP培训机构,迄今已有10年的教育历史,7大特色课程:PHP教程.安卓培训.JAVAEE+大数据.UI设计.HTML5培训.云计算架构师,全栈工程师培训,在目前IT市场特别火,每门课程都由名师牵头,以认认真真的态度做教育,培养的学员过万,在学员心中树立了良好的口碑. 1.一定要看书 现在学习Java

程序员应对中年危机的几条建议

程序员中年危机的焦虑 说到程序员的"中年危机",这四个字承载着太多焦虑,而焦虑的原因主要有以下三点: 1.上有老下有小.左有房贷右有车贷,职业选择经不起任性: 2.自己不断增长的期望和实现之间的差距越来越大: 3.行业从业者更加年轻化,互联网寒冬人才需求缩减,自己却一直停滞不前遭遇瓶颈. 时代成就了我们 很长一段时间,我都在想,这些年程序员收入确实不错,程序员因此一度被特别关注,其实深入思考你会发现,我们也只是运气还行,恰好赶上历史机遇了而已,说直白点,这是智能手机和移动互联网带来的行

黑马程序员 网络编程 UDP与TCP

---------------------- ASP.Net+Unity开发..Net培训.期待与您交流! ----------------------/* 网络编程分为两种模式:TCP和UDP 连接互联网的计算机以亿计,为了唯一的标识出每台电脑,互联网就给每台电脑分配一个 唯一独立的ip地址,通过这个ip地址就可以进行计算机之间的数据交换 我们计算机交换的数据功能我们在java中把它封住成一个叫Socket的类, 简称套接字, 端口号:计算机数据的交换一般都是电脑上的程序来维护的,而电脑上又运

为什么开源可以提高程序员的编程技能?

为什么开源可以提高程序员的编程技能? 记住开放源代码在你参与进去的时候效果最佳.代码更改在大多数项目中都是受欢迎的,但是有很多出力的方法.测试开源代码和文件错误报告:帮助完成文档集:写教程和如何做的例子:参加对话--或者仅仅只是帮助传播.每一件事都能带来改变,并且越多的人参与进来越好! 我已经写了很多年的软件.最近我意识到,我越涉及(致力于,结合于等)开源技术,我写出来的代码就更好.这不由地让我疑惑起来:难道里面有什么相关性或因果关系吗? 阅读代码能让你变得更优秀 我在编程生涯的早期就明白我阅读

好程序员分享Vue的一些小技巧

好程序员分享Vue的一些小技巧,前言:用Vue开发一个网页并不难,但是也经常会遇到一些问题,其实大部分的问题都在文档中有所提及,再不然我们通过谷歌也能成功搜索到问题的答案,为了帮助小伙伴们提前踩坑,在遇到问题的时候,心里大概有个谱知道该如何去解决问题.这篇文章是将自己知道的一些小技巧分享给大家,希望看完本文可以有所收获. 文章内容总结: 组件style的scoped Vue 数组/对象更新 视图不更新 vue filters 过滤器的使用 列表渲染相关 深度watch与watch立即触发回调 这