程序编写中的细节问题

“千里之堤,毁于蚁穴”。非常多软件问题并非由重大的缺陷引起的,反而是一些非常细小的问题造成的。以下罗列最近软件开发过程中,我遇到的几个程序编写的细节问题案例。

        案例一:

某软件版本号要实现从本地配置的文件夹中扫描出文件并进行处理的功能,仅仅有满足特定前缀的文件才干被扫描出来。文件的前缀在配置文件里进行手动配置。在測试的过程中。我们发如今文件夹中有非常多满足配置前缀的文件,但一个都没有被扫描出来。

问题究竟出在哪里呢?为了查找问题原因,我们在代码中加入了非常多的调试日志,最后发现读入的前缀配置值后面多了一个“*”。

我们又查看了配置文件,发如今手动加入配置值的时候,在前缀的后面加了一个“*”,当作通配符使用。但程序并不须要加通配符,仅仅要将前缀写上就行了。

如果配置项Prefix表示前缀,那么改动之前的示比例如以下:

Prefix=prefix*

改动之后的示比例如以下:

Prefix=prefix

一个小小的“*”,就使得整个程序的功能异常,能说细节不重要吗?

        案例二:

某软件版本号要从配置文件里读取路径值来拼装文件的存放位置。在測试的过程中,程序出现异常。打印出的日志显示文件路径不存在。我们查看了本地的磁盘,该路径是存在的。

那为什么程序找不到这个路径呢?

程序中的路径来源于两个部分,一部分是配置文件里某个配置项(如果为FilePath)的值。还有一部分是程序自身生成的。为了查找问题原因。我们相同在代码中加入了具体的调试日志,发现最后拼装出的路径多了一条斜杠,形如“D:\zhou\mail\\wang”。

查看相关代码和配置项。原来在配置项的后面已经加入了一条斜杠。而在程序最后拼装路径的时候,又在中间加入了一条斜杠。

即在“D:\zhou\mail\”和“wang”之间加入了“\”。

如此处理,程序可以找到这个“奇怪”的路径才怪了!

        案例三:

在查看某软件版本号生成的日志的过程中,发现有一条日志打印出的变量值非常的奇怪。查找该条日志相应的代码,形式例如以下:

WriteLog(Log_Info, "Name=%d, Age=%d", Name, Age);

该条日志要打印出变量Name和Age的值,但在定义变量的时候,Name是字符型数组,而Age是整型。但代码“Name=%d, Age=%d”所看到的。两个变量都以整型(%d)的形式来打印,可以正常吗?正确的形式是“Name=%s, Age=%d”。

这个问题基本不会影响程序的正常流程,由于它是出如今日志其中的。但我们也不能置之不理,细节问题不处理好,积累起来就会出现大的问题。

        案例四:

在执行某软件版本号数据库脚本(sql文件)的时候,老是报语法错误。

查看相应的SQL语句,发如今初始化某一字符型变量的时候。使用了例如以下语句:

select @namestr = "Zhou"

大家或许注意到了,在SQL语法中,字符串是用单引號来标志的。而不是双引號。这个语法是与C语言有差别的。但非常多开发者熟悉了C语言的那一套语法规则。于是在数据库脚本中,也用双引號在初始化字符型变量。

正确的SQL语句例如以下:

select @namestr = ‘Zhou‘

以上四个案例。相信可能非常多人都遇到过。那么,我们怎样避免以上细节问题的出现呢?

第一。在编敲代码的时候,我们一定要目不转睛。

我看非常多人喜欢把手机放在手边,时不时地低头看一下,也不知道每天为什么总有那么多消息。

这样做会导致精力的分散,写出来的程序自然不会让人非常放心。出现bug也是非常正常的了。

第二。在写完程序之后。我们一定要多检查几遍,不要觉得功能正常就没问题了。

大家不要嫌麻烦。尽量把每一行代码都看一下。以发现一些easy被忽略的问题。

“小心驶得万年船”,仅仅有我们认真对待每一行程序。程序才会“对得起”我们。

第三,在写好程序之后,不要急着提交,让同事对代码进行走查。

代码走查也是同行评审的一种。其目的是提高代码的质量。

一个人的视野有限,非常多问题都发现不了。或许你没有发现的问题,同事一眼就看到了。

软件的质量是要靠大家共同努力来提高的。

细节决定成败。这个道理在软件开发中也是成立的。仅仅有不断地实践、不断地总结。我们才可以提高代码的质量。让细节问题无处藏身。

(本人微博:http://weibo.com/zhouzxi?topnav=1&wvr=5,微信号:245924426,欢迎关注!

)

时间: 2024-11-03 21:12:40

程序编写中的细节问题的相关文章

C语言程序编写中犯的错误的记录(一)

今天学习用到了<C程序设计(第四版)>的求两个数的最大值的程序devcpp程序:#include <stdio.h>int main(){int max(int x,int y);int a,b,c;scanf("%d,%d",&a,&b);c=max(a,b);printf("max=%d\n",c);system("pause");return 0;}int max(int x,int y){int z

C语言程序编写涉及内存的问题

在平常的C语言程序编写中往往都会涉及内存的问题,下面分享一些常见的问题范例及相关解答,可以学习IT500强面试官谈算法面试题. void GetMemory(char *p) { p = (char *)malloc(100); } void Test(void) { char *str = NULL; GetMemory(str); strcpy(str, “hello world”); printf(str); } 请问运行Test 函数会有什么样的结果? 答:程序崩溃. 因为GetMemo

xcode6中导航栏 控制view用程序编写

1.新建个视图控制器用来管理视图 2.新建个按钮 通过按钮把新的view压入栈中 爽歪歪是个按钮  一点击它  直接进入第二界面   在第二界面自动生成个返回按钮 xcode6中导航栏 控制view用程序编写,布布扣,bubuko.com

程序猿之---C语言细节17(求time_t的最大值、strlen求的是长度、malloc分配字符内存细节、switch的中default细节)

主要内容:求time_t的最大值.strlen求的是长度.malloc分配字符内存细节.switch的中default细节 #include <stdio.h> #include <time.h> int main() {     /*****************************************************************         time_t最大值测试     ************************************

基于DCMTK的DICOM相关程序编写攻略

2008年09月10日 星期三 15:35 前言: 由于现在的医学影像设备的图像存储和传输正在逐渐向DICOM标准靠拢,在我们进行医学图像处理的过程中,经常需要自己编写和DICOM格式的图像相关的各种程序模块,以完成自己处理功能.如果从头开始理解DICOM的协议,然后完全自己编写这些代码来实现这些协议,是一件工程浩大的事情.德国offis公司开发的DCMTK,为我们提供了实现DICOM协议的一个平台,使得我们可以在它的基础上轻松的完成自己的主要工作,而不必把太多的精力放在实现DICOM协议的细节

为Hadoop的MapReduce程序编写makefile

最近需要把基于hadoop的MapReduce程序集成到一个大的用C/C++编写的框架中,需要在make的时候自动将MapReduce应用进行编译和打包.这里以简单的WordCount1为例说明具体的实现细节,注意:hadoop版本为2.4.0. 源代码包含两个文件,一个是WordCount1.java是具体的对单词计数实现的逻辑:第二个是CounterThread.java,其中简单的当前处理的行数做一个统计和打印.代码分别见附1. 编写makefile的关键是将hadoop提供的jar包的路

20151009 C# 第一篇 程序编写规范

20151009 程序编写规范 1. 代码书写规则: 1).尽量使用接口,然后使用类实现接口. 2).关键语句写注释 3).避免写超过5个参数的方法,如果要传递多个参数,则使用结构 4).避免代码量过大的try…catch…模块 5).避免在同一个文件中放置多个类 6).switch 语句一定要有default语句处理意外情况 7).生成和构建一个长字符串时,一定要使用StringBuilder类型(可变字符序列),而不使用string 8).if 语句应该使用{}包含起来. 2. 命名规范 1

【141029】VC游戏编写中的求解最短路径算法源码

VC游戏编写中的求解最短路径算法源码,本示例是自动寻径演示,篮点是起点,红点是终点,按确定键开始.源码爱好者注:编译后运行的时候请把EXE文件从Debug目录中拷贝到项目根目录中,若不然会出错. 编著.程序设计:唐明理 程序顺序: 初始化队列.待处理节点入队列, 依靠对目的地估价距离插入排序,将离目的地估计最近的方案出队列,释放栈顶节点,释放申请过的所有节点,估价函数,估价 x,y 到目的地的距离,估计值必须保证比实际值小, 尝试下一步移动到 x,y 可行否,如果曾经有更好的方案移动到 (x,y

非计算机专业的码农C#学习笔记 二、C#程序编写规范

二.C#程序编写规范 1.代码书写规则: 代码书写规则呢,是相对初学者来说需要了解一下的东西.因为我们还嫩,暂时不追求什么代码审美.规范.专业还有逻辑审美这类的,不会乱成一套就好了.所以,我也不全死记烂背规则,就注意一下代码整洁这个问题.有时候,经理或者需求发布人需要我们解说一下,代码不整洁,连我们自己都找不到那可怎么办.还是记住几个: (1)记住ctrl+K+F这个快捷键,自动帮你整理选中的代码,看起来整洁吧: (2)项目时间长,分阶段写的代码最好还是#region一下,能够很好帮你回忆: (