设万维读者为首页 万维读者网 -- 全球华人的精神家园 广告服务 联系我们 关于万维
 
首  页 新  闻 视  频 博  客 论  坛 分类广告 购  物
搜索>> 发表日志 控制面板 个人相册 给我留言
帮助 退出
懒姑娘的博客  
春江水暖鸭先知  
https://blog.creaders.net/u/3495/ > 复制 > 收藏本页
网络日志正文
如何成为一个优秀的程序员三 2010-02-27 03:26:23
                                     稳扎稳打 步步为营    

公司有专门的测试组,有一次,测试组的一个同事笑着恭维我说:你写的东西,我一般都很难挑出错,你大概有什么秘密武器吧!我确实有件武器,但一点都不秘密:那就是测试,测试再测试.程序员最重视的工作应该是测试.

很 多人错误地认为测试是软件编写后期的工作,即软件完工之后,再进行测试.我认为测试不但应该融入编写过程中,即每写完一个函数,都要进行测试,甚至在编写 程序之前,我们就必须考虑如何建立一个方便,快捷准确的测试系统.这就像古时候的军队打仗一样,要兵马未动,粮草先行.

测试的基本原则 是:检验软件是否满足规定的需求,确认运行结果是否符合预期结果.它是软件质量的基本保证( oftware quality assurance ).软件工业界喜欢将测试分成五个循序渐进的层次:单元测试,集成测试,确认测试,系统测试,验收测试( http://en.wikipedia.org/wiki/Software_testing ).很多大软件公司也依据这一理论,建立了严格的测试程序.在这里,我不想过多介绍这些测试理论,大家在互联网上可以找到很多这方面的资料.我只想谈谈我 本人在实际编码过程中是如何进行测试的.

一般来说,我每写完一个模块,我就写一个相应的MAIN程序,来测试该模块中的每一个函数.这样做有两个明显的好处:1 模块中的每一个函数的运行结果都得到验证; 2 如果我们能够很方便地写出MAIN程序,也就证明了模块本身具有很好的独立性,事实上也恰恰证明了模块结构的合理性.如果我在写这个MAIN程序的过 程中,遇到很多困难,比方说,我不得不牵扯到其他模块,那么我就会考虑是否我的软件结构不太合理.模块测试结束后,我会把这些小的MAIN程序都保留起 来.一旦我需要对模块进行修改,我再把这些这些小程序拿出来,对修改过的模块进行新一轮的测试.

将许多经过单独测试的模块融入系统之后, 我再对系统进行整体测试.在这个阶段,我的很多同事喜欢立即把产品放到真实的操作环境中去测试.我不太喜欢这样的做法.我以为真实的操作环境中有太多的不 定因数,比方说测试时间的局限,数据本身千变万化等等.在这种情况下,一旦出现问题很难找出原因.我更喜欢,在进入真实操作环境之前,先建立一个模拟环 境.举个例子,我曾经写过这样一个数据处理软件:我从另一个软件中得到很多数据,然后我对这些数据进行一定的加工处理,然后再将处理后的数据传递给另外一 个图形软件,该图形软件最后将数据显示出来.我们可以看到,整个数据处理流程经历了三个软件环节.我写的程序处在第二个环节.如果我立即将程序放到实际操 作环境中去,通过图形软件显示的数据来进行测试.那么我至少会遇到下面两个问题:
1 数据变化很快,我无法确认图形软件中显示的数据是否符合预期结果.
2 即使我能确认图形软件显示的数据有误,但是我还是无法知道问题出在哪个环节.

这 时候,最好的办法就是编写一个测试软件.建立一个可控制的模拟测试系统.我的具体做法是:编写一个简单的测试软件,它的工作是模拟上述数据处理流程中的环 节一和环节三.这样它将一些可控制的模拟数据注入到数据处理软件中,同时它又将得到处理后的数据.最后它对两组数据进行比较,很快就能发现问题所在.也许 有人就要问了,谁能保证你的测试软件没有问题呢?在我看来,这个问题得从两个方面来考虑:
1 相对于被测试的软件,测试程序通常都比较简单,不太容易出错,即使有错,也很容易修改.
2 我们应该尽量用一些高层语言来编写测试程序.我个人最偏爱的语言是:PYTHON.
PYTHON 是一种面向对象、脚本式计算机程序设计语言.它功能强大而完善.很多任务如果用C或C++来写,会很复杂,但转到PYTHON,就十分简单.我认 为,PYTHON是用底层语言工作的程序员进行测试不可缺少的工具.( http://www.python.org/ ).

程序通过了模拟系统的测试后,我们再把它放到真实的操作环境中去.一般来说,我习惯让程序在真实环境中至少运行两到三天.最后才将软件交给测试组.通过这样一个稳扎稳打, 步步为营的测试过程,软件的质量自然有所保证了.    
浏览(2739) (3) 评论(3)
发表评论
文章评论
作者:多思 留言时间:2010-02-27 09:44:23
lan姑娘, 每个人的经验都是片面的,不可能全面完整。但是,正因为是个体是亲身经验,也就更加值得珍惜与珍视。我没有本事像你那样总结出一、二、三、四,但从我自己朦朦胧胧的工作经验里,同样感觉到编程之后的检测非常重要。而且,正如你所说的那样,应该对每个单一的模块进行检测。其实,假如等到很多模块结合之后再做检测,即使发现问题,也要进行分解检测,具体毛病也还是存在于某一模块之中。与其这样,还不如在单一模块完成之后就立刻检测呢!
回复 | 0
作者:懒姑娘 留言时间:2010-02-27 05:54:51
多思
谢谢鼓励.这都是我本人工作中的一些体会.很多地方难免以偏概全......
回复 | 0
作者:多思 留言时间:2010-02-27 05:04:20
长见识!顶!
回复 | 0
我的名片
懒姑娘
注册日期: 2010-02-23
访问总量: 95,915 次
点击查看我的个人资料
Calendar
最新发布
· 女儿制作的动画片
· 保持沉默保持尊严
· 性.资源.权力
· 你进你的主流,我走我的边缘
· 法国国家图书馆
· 如何成为一个优秀的程序员( 四 )
· 如何成为一个优秀的程序员三
分类目录
【学无止境】
· 如何成为一个优秀的程序员( 四 )
· 如何成为一个优秀的程序员三
· 如何成为一个优秀的程序员二
· 如何成为一个优秀的程序员
【随便说说】
· 保持沉默保持尊严
· 性.资源.权力
· 你进你的主流,我走我的边缘
· 谈谈恐惧
· 办公室政治斗争
· 老虎究竟招惹了谁?
· Alan Turing的命运
· 阿凡达---陈词滥调
【天涯比邻】
· 女儿制作的动画片
· 法国国家图书馆
· 日内瓦湖边小镇
存档目录
2010-08-18 - 2010-08-18
2010-06-05 - 2010-06-05
2010-04-11 - 2010-04-15
2010-03-08 - 2010-03-16
2010-02-23 - 2010-02-27
 
关于本站 | 广告服务 | 联系我们 | 招聘信息 | 网站导航 | 隐私保护
Copyright (C) 1998-2024. Creaders.NET. All Rights Reserved.