软件工程建议

在空白的文本编辑器里打开一个崭新的文本,没有一行代码,出现在眼前的是一个充满了无限可能和希望的项目。可是,当数千行的代码写完之后,整个项目因为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-11-06 16:48:51

软件工程建议的相关文章

对软件工程概论课程的总结

软件工程建议 总体而言,感觉上王老师这门课收获还是很大的,最最起码不看了三本书吗? 就这学期14周的课,根据我的心路历程来写对这门课的建议把. 刚开始上这门课是害怕的,当听到老师说当堂做东西的时候,我的心是哇凉哇凉的啊,学沫伤不起啊,根本啥也不会做有木有啊,思路都没有怎么办啊?不行,老师转下来了,写个框架装装样子把,完了,框架是什么样子的?#include<iostream.h>,开头是这样写吗?真的是这样写吗?应该是这样的,纠结着纠结着老师就问有没有人有思路,写出来了,然后就让几位同学去上面

软件工程概论课总结及意见建议

本学期的软件工程概论课到此就上完了,总体上来说在这门课上学到的东西是非常多的并且对我是非常有帮助的.整个学期王老师带领我们将软件工程的具体流程走了一遍,讲到了入门.过程.流程.注意事项.方式方法.关键点.关键问题等等.虽然我们没有真正接触到实际的开发项目,但已经对软件行业在脑子中有了成型的框架,不在一说到软件就是编程代码,而是软件工程行业的接近核心的知识理论.我们有的也不只是理论,王老师配合每次的讲课内容为我们准备了相应的课堂练习,以便我们能够亲身体验项目的流程. 对于软件工程概论课的教授,王老

软件工程课程的建议

软件工程经过一个学期的疯狂的学习今天终于迎来了结束的这一天,回顾整个课程的学习过程,感觉收益良多.不过经过深思熟虑还是有很多话要对王老师和未来的学弟学妹们说: 1.课上的教学互动还是太少,我认为可以在课堂上公布下一节课要讲的相关内容,然后留给学生去查找资料,随机抽取 一名同学或者一组同学进行演讲,既锻炼了自己的能力,又可以对相关的知识进行加强学习吸收.并计入平时成绩. 2.课堂技术讨论的太少,我认为可以在课堂上进行技术比赛,组和组之间进行pk,并将pk结果记入平时成绩.pk的内容包括,技术的可行

软件工程课总结与建议

软件工程课终于结课了,在这里做一个小的总结: 在这门课上,我了解了整个软件开发的流程,以及用到的一些测试软件性能以及衡量工作效率的工具.认识到一些在软件编程工作中容易忽略的问题,体会到团队合作的总要性. 最后,建议老师把"你提想法,我来编程"活动加载到项目实践中,征求广大校友意见.这样我们也可以练习一把与客户交流的方式方法了,模拟一下现实. 软件工程课总结与建议,布布扣,bubuko.com

软件工程课程建议

软件工程课程建议           这学期的软件工程课程的教学是结合的平时的理论学习和后期的具体理论实践,更加重视具体的编程,总体来说收获颇多,既学习了知识又将其用于具体的开发过程中,但确实在具体的学习过程中还存在问题. 以下是我关于软件课程的建议: 1.软件后期的开发时间太紧,没有完全按照软件规范开发过程开发 就我们小组来说,虽然在确定小组过后就提出了我们的软件构思,但根本没事时间实施,本想作为一个团队进行开发,但苦于平时大家都有自己的事情,没能聚在一起.所以导致最后拿出很多时间进行软件的开

关于软件工程的建议----我内心最真实的声音(2)

软件工程结束了,这是一门很不同的课程,它的教学方式可以是多种多样的,既可以丰富理论知识,也可以加强动手能力,但是我认为仍要有一些改进的地方. 我建议在课上老师多为我们指导一些编程方面的东西,虽然编程能力是需要自己慢慢锻炼提高的,但是仍要有人为我们指定前进的方向,我感觉老师在这方面做的不够多,所以我认为需要改进.还有就是,在这门课上,我想老师多给我们讲些师哥师姐们的就业经验,关于他们找工作面试的经验,让我们能提前做好准备,同时能够培养出我们的那种危机意识,从而加强我们学习的动力,大学是一个很开方的

软件工程之建议

时光荏苒,一学期的时间很快就过去了,这是我第一次接触到软件工程的概念,这也是第一次让我知道了,软件并不是简简单单的开发,而是要经过一个漫长的过程,分析,设计,编码,测试等等,这也是为什么我们专业名字叫软件工程,而我们的李老师同时教了我们三门课程,几乎包含了整个软件工程,下面我就简单说下我对软件工程这门课的一些建议: 1.同学们在学习这些偏理论的课程还是提不起兴趣,在之前的操作系统之类的都有这样的问题,我觉得这是很多老师苦恼的问题,我自己有个小建议,就是可以让同学们更多的动手,亲身去经历,比抱着书

5.“软件工程”课程的建议

经过一个学期的学习,我觉得“软件工程”课程的学习主要目的是: 熟悉软件从设计到开发的整个过程.学会团队合作. 其中夹杂着“软件测试”的学习,其主要目的是学习软件测试知识和技能. 对课程的建议: 1.可以把课堂教学时间缩短,快速过完课堂学习后,通过组队合作开发来体会软件工程的开发工程.实践体会为主. 2.学习“软件工程”就是为了与接下来的实习工作接轨,有能力的话可以通过学校和一些公司合作,做一个入门级的小项目.

关于软件工程的体会及建议

学习心得及课程建议                  说实话这学期的软件工程课让我学到了很多东西,不仅在课堂上,更是在课下的时候. 上这门课之前,我以为只是教我们如何完成一个软件用到了什么知识,它会讲很多编程的知识,例如讲多种语言的高级性能,或者讲很多数学知识.上了几节课之后,我发现并不是这样的.                     才发现我仅仅是一个片面的认识,我之前只是把它理解成一门“高级”编程课.                    学完这门课之后,我觉得软件工程是一门关于“合作”与