程序的成长过程

http://blog.csdn.net/yihui823/article/details/6737757程序如何才叫做好了

我们总是在加班,在加班。总是在提交测试后发现自己的程序是那么多BUG,总是在交货前一天发现好多问题。在领导问我们,程序做的怎么样的时候,我们是怎么回答的?做好了。是的,做好了。可是结果呢。

从程序员的角度,程序做好了的定义,和测试人员的角度定义的“做好了”,还是有很大差距了。那么,我们的程序,到底如何才能算“做好了”呢?我觉得,这里是有一个流程的:

1        开发人员做好了。

这个阶段,只是程序员自己把程序调通了。一般的项目,都会有框架,都会有与其他系统的接口,都会有一些硬件模拟器。开发人员只是在自己的一小块功能里实现好了。例如,A程序员只是开发一个登录功能,B程序员开发的只是对话功能。那么B程序员说的做好了,一定是模拟登录成功的情况,或者是他的程序不需要登录就能用,或者是他已经把登录信息写死了,或者其他的什么。

这个阶段的代码,精简有效,基本没什么错误处理。

2        小组联调。

联调是一个很重要的步骤。任何多人开发的工程,联调的时候都会出这样那样的问题。联调通过,那么系统的功能才算是流畅了,业务的流程才算是可以走通了。例如,B程序员开发的对话功能,一定是登录过后才能使用。、

在联调的时候,需要各个程序员耐心细致的找问题。这个阶段,最考验团队合作能力。一个到处推卸责任的人,会影响大家的士气;到处都是推卸责任的人,则这个团队会陷入扯皮的境地。

这个阶段的代码,一不小心会就陷入高耦合的杯具中。所以要及时调整代码架构。

3        与硬件环境调试。

系统多多少少都会与外界有接口,一些是与硬件的接口,一些是与环境的接口。例如登录需要指纹验证,那么刚开始调试的时候,可能只是模拟了一个指纹验证设备,我们按照协议发送一定格式的数据给一个软件模拟器,然后软件模拟器再返回一个结果。但是一旦真正把设备接入到程序,总会出现各种各样的问额。

这个阶段,是项目攻坚阶段,需要有精兵强将,人海战术是不行的。

这个阶段的代码,开始加入许多接口。一定要注意保持良好架构,不要让程序的耦合度越来越高。

4        可以展示

与硬件环境调试成功后,这个程序就可以拿去展示了。但是在展示前的预演示过程中,会发现各种异常情况,各种没考虑到的情况。展示可能是给领导看,可能是放在展览会上,也可能是给客户演示。不管怎样,展示之前是需要演示的,那么展示的内容是可控的。这个时候,可以根据展示的具体情况,做一些应急措施去解决棘手的问题。例如,对话的时候,如果有人发送了”stop”字样,程序就会退出。这是个BUG,但是不是必须修改的,因为展示的时候记住不要输入”stop”就行了。

这个版本的代码,应该是充满了TODO,到处都是写死和注释掉的代码。

5        测试人员测试。

用来展示的版本,只能作为主线版本的一个分支,大量充斥了临时方案,这个对系统的进化是有害的。这就像周芷若练九阴真经,以速成的方式,总是会有问题的。主线版本里,还是需要提交测试人员,经过精心安排的测试case,把程序的各个功能,各个路径都验证好。

测试是个反复的过程,需要几轮的沉淀。测试出的BUG,也是以一个曲线方式消减下来。也就是说,每天发现的BUG数,是慢慢降下来的过程。你无法用一轮测试就找出所有的问题,有些问题是有相互依赖的,A问题不解决,B问题就根本发现不了。

几轮测试之后,系统趋于稳定,各个功能都能正常工作,各个业务流程都能走通。这样系统就算是可以使用了。

经过测试的代码,有了大量的错误处理和容错机制。一般来说,之前写的if,在这个阶段都会加上写else之类的。

6        客户现场调通。

永远不要指望,测试完美的程序能在客户现场一遍就安装成功。客户现场与开发环境总是有这样那样的不同。把我们自认为测试完好的系统,在客户现场部署、安装,这是一个曲折的过程。你可能发现,客户的网络根本不足以承受我们系统的流量,客户的服务器不足以运行我们的系统,还有其他各式各样的问题。

客户现场调通,需要有很强的交流沟通能力,因为有时候客户答应做一点点改动,就能节省我们几个通宵。

代码开始有坏味道。为了赶快调通,达到客户想要的结果,代码开始不遵守编码规范。架构开始倾斜。所以这个时候一定要注意保持清醒的头脑,不能越改越乱。

7        客户验收

客户现场调通之后,就交付客户使用了。不要指望交付使用就大功告成,就可以催着客户验收了。客户验收之前,在客户的使用过程中,你会发现我们的系统是多么脆弱。为什么客户会这么操作,为什么客户不按照我们的提示来,为什么客户会用这么不可思议的方式折磨我们的系统?不要问为什么,是他们花钱让我们做东西,那么我们就得让人家用的舒服,不是么?

这里同样需要注意,不能完全按照客户说的来做,我们要挖掘客户深层次的需求,有时候我们可以给点提议,稍微改动一点他们的想法,可以节省我们很多的工作。例如,客户需要在对话的过程中,加入一些可以自行配置的图标。我们就需要跟客户仔细沟通,是否真的需要做到“自行配置”,能不能我们在程序里给他们配好一些图标,然后告诉他们配置图标的方式。这里的差别是,“自行配置”就需要做一个配置页面,而手工配置可能就是告诉他们如何改一个xml文件而已。

这个时候,看上去系统已经稳定了,但是代码已经开始走向衰减。除非下定决心重构,否则代码开始慢慢的臃肿,开始到处都是补丁,开始越改越难改。但是重构一定要在回归测试的基础上,否则很可能带来新的问题,让客户咆哮。

8        成为产品

以上说的,是针对一个客户的情况。很多时候,跟客户搞好关系,会让你减少很多工作量。并且,客户的需求是单一的,可控的。但是作为产品,那就没这么好的事情了。

产品是针对大量客户的情况。单一客户,我们还可以引导客户的使用习惯,但是大量客户的话,只能产品去凑合客户的习惯。当然,拥有大量粘性高的用户,可以去引导客户的习惯,例如QQ和360。但是成为这种产品之前,最好还是老老实实的去迎合各种客户的使用习惯。

并且,客户的操作会更让你崩溃。知道手机出厂前会做一个什么测试么?就是随机乱操作上万次,要保证手机不会死机。这就是说,你根本无法预测客户会怎么操作的。不是产品的系统,你可以跟你的客户说,你这么操作是不对的,我有操作手册在此。但是产品呢?如果约束太多,人家就不用你的产品了啊。

时间: 2024-08-25 22:45:44

程序的成长过程的相关文章

程序员成长过程

源自:伯乐在线/PleaseCallMeCoder 每个人都在成为大神的路上,只不过有的人在走,而有的人在跑. 写在前面的话 在开始正文之前我先跟大家分享一个我身边的例子.我有两个朋友,A和B.B从高一开始打dota,A从高二开始,到高中毕业的时候,A已经是一个 2100分的大神级别的人物,而B只有1200分而已.为什么A打的时间比B短,而水平却比B高呢?是天赋?是智商?似乎都不是. 我对两个人还是比较了解的,虽然同样是打dota,但是A和B之间有着很大差别的.A除了像B一样打dota之外,会看

android程序员成长路径的思考

我之前就想过要写这个话题,不过之前没有什么认识,我只是在阅读别人的见解,看法.昨天晚上,我阅读了这篇文章<产品经理罗永浩:用户体验探索,没有尽头>,这篇文章描述了罗永浩对锤子手机设计细节的阐述,及罗永浩对产品经理的看法,认识.恰巧阅读了这篇文章,我从中想到了android程序员的成长路径. 成长路径之一,可以做出产品经理要求的各种界面效果. android程序员,是做android系统上的应用的,一个应用就是一个产品.我是这样认为的,你可以做出好的产品,那么,你就是优秀的android程序员.

Java异常处理机制就是程序代码执行过程

我也是通过各种方式在进行验证是否可以满足我们的需求,今天我就发现了一个问题.现在我们来一起说明一下,这个可能不算是bug,而应该需要我们记住就可以了. 对于一副灰度图像I,她的每一个像素点I(x,y)都有一个灰度值,一般情况下可能的灰度取值有2^8=256个(0,1,...,255).如果我们统计出灰度值r在I中出现的次数n,并对其进行归一化(n/N,N是所有灰度值出现次数的总和),这样我们就可以得到像素r在I中出现的概率p(r).如果对每一个可能的灰度取值r都做同样的处理,我们可以得到如图1左

一个JAVA程序员成长之路分享

我搞JAVA也有些日子了, 因为我比较贪玩,上进心不那么强, 总是逼不得已为了高薪跳槽才去学习, 所以也没混成什么大牛, 但好在现在也已经成家立业, 小日子过的还算滋润, 起码顶得住一月近万元的吃喝拉撒玩各种贷款信用卡 不为金钱过于发愁了. 我特别感谢当初贴吧遇见的那位大神, 虽然每个月也就聊那么几句, 但是他总能在我不知道该学啥, 该怎么走的时候, 给我方向, 毫不夸张的说,我现在的衣食无忧, 技术马马虎虎, 都是拜他所赐. 所以 我也想分享一些自己的成长过程 以及技术路线 希望一些迷茫的新人

ASP.NET 程序发布详细过程

前言 ASP.NET网站的发布,无论是初学者还是高手,在程序的发布过程中或多或少会存在一些问题,譬如VS发布ASP.NET程序失败.IIS安装失败.IIS发布失败.局域网内不能访问 配置文件错误.权限不足等一系列问题,结合我带领的500技术团队反应的各种问题,我今天花点时间总结一下,方便大家,共同学习,共同进步 为了后文的深入详细分析,我写了一个小Demo,代码附上.本次基于VS2013,OS为WIN10,IIS7等环境讲解.(其他操作系统如WIN7原理也类似,但有细微差别) 1.解决方案整体概

1014 C语言文法定义与C程序的推导过程 程序:冒泡算法C程序(语法树)

1014 C语言文法定义与C程序的推导过程  程序:冒泡算法C程序(语法树)1 阅读并理解提供给大家的C语言文法文件. 2 参考该文件写出一个自己好理解版的现实版的完整版的C语言文法. 3 给出一段C程序,画出用上述文法产生这段C程序的完整语法树. 程序:冒泡算法C程序 点此文字查看原图(完整图片) 1 #include <stdio.h> 2 3 main() 4 { 5 int i,j,temp; 6 int a[10]; 7 8 for(i=0;i<10;i++) 9 scanf

黑马程序员----整个程序的运行过程

程序的运行过程: 1.编写代码: 2.编译:把C语言代码翻译成0和1 *工具:clang编译器,(Xcode 3 gcc Xcode 4 llvm clang) *指令:cc -c 文件名.c *编译成功会自动生成一个.o目标文件 3.连接:把我们的.o目标文件和系统自带的函数库合并在一起,生成一个可执行文件 *指令:cc 文件名.o *链接成功后会自动生成一个.out可执行文件 4.运行 *指令:./a.out(./代表在当前文件夹下,a.out为生成的可执行文件) 注意: 1.cc 文件名.

读书笔记——程序员成长的烦恼(吴亮等)

最近在读一些技术领域相关的书籍,以了解那些传说中的技术牛人是怎样在日常生活中一点一滴积累自己的工作经验的,从而更好地让自己明白以后自己要走的这条路会遇到什么挫折,让自己更加勇敢的有准备的迎难而上. 昨天开始读程序员成长的烦恼,才明白原来现在的技术牛人在成为牛人之前都曾经经历了那么多的不如意和挫折,也为刚入IT不久的小鲜肉我坚定了从事技术开发的信念.今天读这本著作我摘抄了以下学习的几个方法供大家参考. 1:以前自己做过的项目一定要经常拿出来看,总结和改善--这一点我需要加强和改善 2:通过论坛博客

C程序编译执行过程

C程序编译执行过程 认识C编译执行过程,是C学习的开端. 简单说C语言从编码编译到执行要经历一下过程: C源代码 编译---->形成目标代码,目标代码是在目标机器上运行的代码. 连接---->将目标代码与C函数库相连接,并将源程序所用的库代码与目标代码合并,并形成最终可执行的二进制机器代码(程序). 执行----->在特定的机器环境下运行C程序. 如果用一个图 来表示: 以上过程仅仅是个大概,详细的过程相当复杂,下面这篇文章写得很详细,从中受益很多: 原文来自:http://www.vc