如何保证功能代码质量?

上周项目上线,生产上又出了不少bug,领导为此大发雷霆。但我写的功能又"幸免于难",领导不由感叹"还好你的功能没出问题,我们项目组的这个核心功能一直也都保持稳定,挺让人欣慰的!"

在受到表扬的同时,我也不禁开始思考,我是否可以趁着这股"高兴劲头"来做一个工作总结,经验的巩固。

于是我理出对于如何保证功能的质量,大概有以下几个要点。

1.注重设计

我们都知道接到一个需求,要先做设计再动手写代码。

然而,实际工作中,很多时候我们并不能很好地去执行"设计"。甚至有时候会觉得边写边想也是一个不错的工作方法。

我们也一定有过不少写到中途发现预想的实现方式不对的经历,有过一开始设计不周全导致后期的优化过需求变更时无比痛苦的教训。

其实这都是一开始设计工作做的不充分或设计经验不足造成的。

所以我认为不管一个功能有多复杂,我们都要尽可能先做好设计,养成好习惯,有一个"注重设计"的意识,这对于长期的进步十分有帮助。

注重设计意味着我们要花足够的时间去思考如何编码,不要怕浪费时间。

那么如何去做好设计呢?

首先仔细分析需求,并结合整个项目,站在产品经理的角度去彻底的理解需求,然后再对功能实现方式做整体设计,比如表结构怎么设计,数据权限的控制方式,是否有现成的轮子可以使用,如何封装公共接口等。

实际上当我们在脑子里做好了设计,这个功能也就实现了一大半,剩下的工作就是把思考出来的设计用代码表达出来罢了。

如果不重视设计,很可能会出现后期返工、bug频发,需求变更适应力不强等问题,这样不仅浪费时间,还不利于最后的代码质量。

2.提版工作要仔细

设计好了代码噼里啪啦一顿敲,三下五除二就把功能写完了。结果让测试一测,bug一大堆。在修复bug过程中,少不了多次提交代码到git或svn代码库。甚至,对于采用敏捷模式的项目,可能还会有很多次的用户需求优化(变更)等着我们,所以实际工作中,代码提交是十分高频的动作。

我们时常有发现很多bug不是什么代码逻辑问题,而仅仅是因为调试过程中的"工作代码"或者"打字失误",又或者是本地测试与生产测试环境某些参数设置的差异造成的,等等。

不要小看了这些小错误,细节里出魔鬼,常常一些诡异的bug正是这些意想不到的小错误造成的,但他们也经常耽误了工作进度甚至给我们带来了重大问题。

其实,我们本可以通过一个简单的小习惯就能避免的,这个小习惯就是在代码提交时快速的浏览一遍代码差异,从而达到检查代码的作用。

3.上线脚本"时刻写"

对于上线依赖的sql脚本或shell脚本一定要一边开发一边记录收集,然后最后统一整理与测试。如果完全等到最后回过头来编写很可能会遗漏。

这不仅个人的经验之谈,也是来自于同事的血的教训!

4.测试驱动开发

如果项目组有要求TDD(测试驱动开发)那最好,简单说就是在编码前先思考测试场景写测试案例,再根据测试案例来编写功能代码。

如果做不到,作为开发,也要尽可能站在测试的角度去思考问题,深刻全面的去测试自己写的功能,甚至有时候测试也有"不靠谱"的时候,我们作为开发去思考测试角度,能很好的保证测试周全。

总之,就是要培养多角度多方位反省自己代码的能力。

5.注重演练测试

与功能测试不同,演练环境的测试更接近生产环境,并且也更容易检验出上线脚本的问题。并且很多可能在sit环境不会出现的bug却可能在演练测试时发现,所以重视演练测试这一关,对于保证最终项目质量非常关键。

6.细节上严格要求自己

这一条也可以作为本文的一个总结。实际上,程序员的工作成果就是由无数行代码无数个细节最后累加起来的,一个有些良好用户体验的产品绝不仅仅是因为它用到了一个很高大上的算法,使用了多么时髦的技术,而是在整个系统的稳定与可靠的基础上不断迭代出来的。

很多程序员技术也并不差,但"产出"就是提不上来,做出的功能质量也总是无法让用户满意(休息,用户体验不好不全是产品经理的锅),实际上就在于那无数个我们原本可以轻易做到却由于一次次的"没注意到"的细节里。

提升工作能力的不二法门,关键在于长期坚持,多多总结。

多年以后,我们一定能看到那些事事严格要求自己的同事有着惊人的成长力!

共勉。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,002评论 6 509
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,777评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,341评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,085评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,110评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,868评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,528评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,422评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,938评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,067评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,199评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,877评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,540评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,079评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,192评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,514评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,190评论 2 357

推荐阅读更多精彩内容

  • 一、 软件测试基本概念 1 bug的概念 bug类型:defect、fault、problem、error… pr...
    三口一个瓜阅读 3,692评论 0 12
  • 1、问:你在测试中发现了一个bug,但是开发经理认为这不是一个bug,你应该怎样解决? 首先,将问题提交到缺陷管理...
    小灰辉先生阅读 1,336评论 0 3
  • -----转载----- 1、问:你在测试中发现了一个bug,但是开发经理认为这不是一个bug,你应该怎样解决? ...
    花开沉浮阅读 7,394评论 4 88
  • 61、简述负载测试与压力测试的区别。 参考答案: 压力测试(Stress Testing) 压力测试的主要任务就是...
    天宇逍遥heart阅读 749评论 0 3
  • 第 2 章 SHELL 基础知识2.1 shell脚本我们在上面简单介绍了一下什么是shell脚本,现在我们来进一...
    LiWei_9e4b阅读 1,574评论 0 0