如何开发高质量软件?及软件测试观点

标签: tech | 发表时间:2012-01-09 20:41 | 作者:admin
出处:http://sunxiunan.com

也许是因为我经常在twitter上鼓吹“代码质量来自code review和单元测试”,老赵的这篇文字 http://blog.zhaojie.me/2012/01/a-case-requirement-to-practice-unit-testing-or-tdd.html 也at我一下,抱歉的是最近欠债太多,正在着手完成答应侯伯薇的那篇关于appengine的文字。

趁着兴头和最近的一些工作简单谈谈我的软件测试观点。

上周五小组对前一阵的一个项目做了整体的代码review,然后对单元测试代码也简单review了一下,大概二十几个测试用例完全通过,mstest中一条条绿杠杠让人很开心。

今天英语加技术学习,看了这篇 http://net.tutsplus.com/tutorials/ruby/the-intro-to-rails-screencast-i-wish-i-had/ 其中正好讲解了如何使用TDD开发rails程序,酷毙了,其中guard,rspec,capybara这些Ruby的好玩意让我等DotNet程序员羡慕不已。

如何进行高质量软件开发?是我这大半年一直在思考和研究的问题。对于我们大部分项目的流程,简单总结起来就是,前期需求review,设计review,风险评估,开发中期review,代码结束review,维护阶段。

前期review主要是保证项目不要过早的投入编码,设计上不够成熟或者没有考虑的很清晰。我发现不少人是以编码代替设计,或者说还没有想好怎么设计,代码就号称写完百分之八十了,很无语。前期review以主力程序员担当设计和主要技术攻关,并且反复确认设计中不清晰的地方。在前期设计阶段也会对任务进行分派,其中有程序实现,单元测试实现,手动测试实现,代码review等不同角色。理论上说单元测试应该由程序实现者完成,但是由于项目特点决定,我们对于某些项目的单元测试是有另外的程序员实现,稍大一些的项目(或者说story)就需要有三个人熟悉设计和代码实现,大致是一到两个实现者,一到两个代码review人员,这样有些人担心的“对项目不熟悉代码不熟悉,怎么进行code review?“的问题就不存在了,而且也很好的保证了万一有人请假有事,其他人也可以很快完成任务。

开发中期review,主要是对整体思路再次检查一遍,另外确保项目整体质量是OK的,上个月就在中期review的时候,果断叫停某个质量很低的项目,调入一个主力程序员重新设计,虽然浪费了一些时间,但是代码质量比前一个版本要好很多。

代码结束review,是整个小组对项目实现进行逐行的分析解读,貌似这样会比较浪费时间。但是我们现在团队初建,很多技术甚至是常识都需要反复强调,这种小组review很有必要,也是很好的学习过程。

再着重谈谈单元测试。通过比较NUnit和MSTest后选择MSTest作为测试框架,另外也会选择集成测试或者是接口测试等不同测试级别,主要是看项目需要,并不拘泥于非要单元测试。现在的问题是单元测试本身设计的还不够,基本上只考虑”正常、异常、上临界、下临界、空值、复杂值“这些情况,没法做到很好的代码覆盖率,希望这个在以后能慢慢提高。MSTest的使用很简单,基本上跟Nunit没啥区别,好处是可以直接集成在VS2010高级版中,另外也可以通过mstest命令行调用,持续集成也很容易。

我们基本上会在项目设计阶段就对测试用例同时进行设计考虑,然后会留出大约百分之三十到四十的时间给单元测试或者自动测试。这个比例根据项目重要程度或者复杂程度也会相应地调整。

另外一个很关键的问题是”如何测试GUI?”对于asp.net mvc,我们基本上只会自动测试controller,对于view部分,是准备使用自动的browser测试框架来做,现在还是以手动测试为主;对于wpf程序,主要是测试viewmodel部分,但是现在也主要以手动测试为主。对于需求倾向于前端的应用,基本上不会考虑单元测试。但是为了很好地保证质量,我们会把关键的需求点作为测试用例,然后有人专门做手动测试。也开发了一个自动记录回放的小软件,但是效果一般,基本没用。

团队初建,我个人经验不足,所以很多也是在摸索调整,希望以后能有更完整高效的开发流程可以分享给各位。

相关 [开发 质量 软件] 推荐:

如何开发高质量软件?及软件测试观点

- - 我的宝贝孙秀楠 ﹣C++, Lua, 大连,程序员
也许是因为我经常在twitter上鼓吹“代码质量来自code review和单元测试”,老赵的这篇文字 http://blog.zhaojie.me/2012/01/a-case-requirement-to-practice-unit-testing-or-tdd.html 也at我一下,抱歉的是最近欠债太多,正在着手完成答应侯伯薇的那篇关于appengine的文字.

软件质量之道

- - CSDN博客系统运维推荐文章
        我曾与一些资历非常高但毫无实际经验的人共事过,也曾与一些只有很少或根本没有资历但才华横溢的工程师一起工作过,我也曾经不得已跟一些并不想用心做事、也对学习新东西丝毫不感兴趣的人共事过. 如果说我们这个职业是一张纸,那么这些人就好比纸上的污点. 软件开发业的低劣性不能完全怪罪于那些无知的经理、狡猾的市场营销人员以及总是急不可耐的用户,实际上很大程度上要归咎于这个行业的某些从业人员,他们应该去从事一些即使玩忽职守也不会造成像软件业里这样大的危害的行当,而不应该混迹于这个聚集着人类想象力的最复杂的创造性的行业.

提高软件质量实践―― Facebook 篇

- - 博客 - 伯乐在线
来源: Bill Liu 的博客. Facebook从04年的哈佛校园的学生项目在短短的7-8年的时间中快速增长为拥有10亿用户的世界上最大的社交网络,又一次见证了互联网创业成功的奇迹. 同时它的产品研发流程也成为了众多互联网产品公司的追逐对象. 今天我们来看一下facebook在产品质量控制方面的实践.

提高软件质量实践――Amazon篇

- - 博客 - 伯乐在线
来源: Bill Liu 的博客( @billliu_seattle). 前几天回国转了一圈,做了两家企业质量管理培训,一次上海测试沙龙,和chinatest两次演讲. 回来后发现我的软件质量实践系列文章距离上一次发表已经有很长一段时间了. 我想还是先把它写完,再写别的文章吧. 那么今天我们看看互联网公司的另外一个大哥大是如何做质量控制的――Amazon..

软件构架设计--质量属性

- - 研发管理 - ITeye博客
软件质量属性是影响软件架构设计的重要因素,常见的软件质量属性有:. 性能(Performance):指的是系统的响应能力,即要经过多长时间才能对某个事件做出响应,或者在某段时间内系统所能处理事件的个数. 可用性(Avaliability):是系统能够正常运行的时间比例 . 可靠性(Reliability):可靠性是指软件系统在应用或错误面前,在意外或错误使用的情况下维护软件系统功能特性的基本能力.

谈开发质量和过程管控

- - 人月神话的BLOG
这里站在甲方信息化部门的角度谈下对开发厂商质量和过程的管控话题. 在构建企业私有云paas平台的时候,里面有一个重要的内容就是应用开发框架,这个应用开发框架可以理解为包含了应用技术架构(分层架构,开源组件选择等)和各种规范约束(编码规范,接口调用规范,UI规范)的一个空框架. 各个开发厂商都必须遵循同样的一套技术架构来开发应用,这个不仅仅是解决开发的应用能够部署到paas平台的问题,更多的是解决后期的运维和管理问题,也进一步加强了各个开发厂商之间的可替代性.

软件吞噬软件开发

- - PingWest中文网
软件蚕食世界,自互联网特别是移动互联网连接线上线下服务后,已成为不可逆的趋势. 每一项实用的服务可以由小团队来完成. 以WhatsApp为例,这款被高调收购的IM应用,拥有4.5亿月活跃用户,70%的日活跃率,至今还保持每天新增用户1000万的速度. 但这些服务居然由32名工程师支撑下来了,所以有了业界八卦“每位员工价值20亿”的说法.

低质量软件编程成本价格表

- - ITeye资讯频道
注意:下面这个清单里描述的事情并不是你绝对不能做的,它只是用量化的方法来让你知道编程上的这些做法将会产生的负面代价. 这些费用是在代码审查时你将要付出的. 代码库中的程序编码风格一致虽然不是很重要,但值得你去遵守. 在提交代码的说明信息上偷懒. 请细读这篇 代码提交说明信息指导(英文). 大多数的局部变量都最好使用方法代替.

软件开发的核心

- - 博客园_知识库
  「我们一直这样做开发,时间做久了,便忘了当初的本意.   有关软件系统开发,我们谈些什么.   我们谈过程,编码规范、开发流程、同行评审、结对编程、持续集成,从瀑布到敏捷再到极限编程.   我们谈架构,企业级、J2EE、容器化、SOA(面向服务架构)、Microservices(微服务化).   我们谈规模,大容量、高并发、大数据.

开发软件有多贵

- - 透明思考
有个朋友的朋友想做一个公益的事. 因为出资的都是教育水平较高的精英人士,所以对项目的监控透明度要求比较高. 于是这个朋友的朋友就想了,信息时代嘛,IT工具不是可以促进交流提升效率么. 于是他对我说:我们想做个app,可以干这个这个这个……. 我打断他说,别着急,做软件很贵的,你不一定玩得起. 市场上定制开发软件的人工成本按一人月20,000人民币来算,平均每人天1,000人民币.