第八章 注重实效的项目

随着你的项目开动,我们需要从个体的哲学和编码问题转向讨论更大的、项目级的问题。我们将不深入项目管理的具体细节,而是要讨论能使项目成功或失败的几个关键区域。

1. 注重实效的团队

书中前面的内容都是帮助个体成为更好的程序员,这些方法在对团队来说仍然有效。

a) 不要留破窗户。质量是一个团队的问题。最勤勉的开发者如果被派到不在乎质量的团队里,也会发现自己很难保持修正琐碎问题所需的热情。团队作为一个整体,不应该容忍破窗户——那些小小的、无人修正的不完美。

b) 煮青蛙。在项目开发高涨的热度里,很难再用一只眼睛注意周围的环境,所以作为整体的团队甚至更容易被煮熟。即使是目的最明确的团队对项目中的重大改动可能也会很健忘。团队每个人都应该主动监视环境的变化,也可以指定专人负责检查范围的扩大、时间标度的缩减、新增特性、新环境之类任何不在最初约定中的东西。

c) 交流。对外界而言,沉闷寡言、文档混乱的团队是糟糕的团队。而杰出的团队有着截然不同的个性,他们制作的文档准确、一致,团队用一个声音说话,甚至还可能有幽默感。可以使用一个营销的诀窍,来帮助团队作为整体与外界交流:创立品牌。在启动项目时,给它取一个不寻常的名字,这会给团队一个用于建设的身份标识。

d) DRY。交流有助于消除团队间的重复,此外可以安排项目成员分工担任项目不同部分的资料管理员(比如数据库schema、日期处理等)。

e) 正交性。要围绕功能、而不是工作职务组织小团队,这些小团队分别负责最终系统的特定方面的功能,每个团队都按照他们约定的承诺,对项目中的其他团队负有责任。这种分组方式能够极大地减少各个开发者的工作之间的相互影响。但是这种方法只有在项目拥有负责的开发者、以及强有力的项目管理时才会有效。

f) 自动化。自动化可以确保团队所做的每件事情一致、准确。编辑器为代码自动布局、夜间自动构建测试,这些都是很好地方式。自动化是每个项目团队的必要组成部分。

g) 知道何时停止绘画。团队由个体组成,要给他们足够的能够闪亮的空间,以支持他们,同时要把握足够好的软件,抵抗不断画下去的诱惑,确保项目的交付能够符合需求。


2. 无情的测试

a) 早测试、常测试,自动测试。寻找bug有点像是用网捕鱼。我们用纤小的网(单元测试)捕捉小鱼,用粗大的网(集成测试)来捕捉大鱼。有时鱼会设法逃跑,所以为了抓住在我们项目池塘里游动的、越来越狡猾的缺陷,要补上我们发现的任何漏洞。

与手动执行的测试计划相比,随每次构建运行的测试要有效的多。

Bug发现得越早,进行修补的成本就越低。要“编一点,测一点”,在编写产品代码的同时编写测试代码。

只有通过全部测试,编码才算完成。好的项目拥有的测试代码可能比产品代码还要多。但编写这些测试代码所花的时间是值得的。长远来看,它最后会便宜得多,而你有希望制作出接近零缺陷的产品。此外,通过了所有测试将给你高度的自信:一段代码已经“完成”了。

项目范围测试的三个方面:测试什么、怎样测试、何时测试

b) 测试什么

单元测试,这是所有其它形式测试的基础。所有模块都必须通过单元测试,才能继续前进。

集成测试,用来验证项目的主要子系统能否工作,并很好地协同。是单元测试的一种扩展,测试整个子系统是否遵守其合约。

验证和校验。就算没有bug,但回答的问题本身是错误的,这样的系统也不会有用。需要校验回答一个重要的问题是:这是用户需要的吗?要注意用户的访问模式与开发者所用测试数据的不同。

资源耗尽、错误及恢复。虽然在理想的条件下软件会正常运行,但在现实运行环境下,还有内存、磁盘空间、CPU带宽、网络带宽、屏幕分辨率等种种限制。

性能测试、压力测试或负载测试有时也很有必要,要测试软件能够满足现实条件下的性能需求,如预期的用户数、连接数、每秒事务数、可伸缩性。有时需要用专门模拟现实环境进行测试。

可用性测试。可用性测试是由真正的用户、在真实的环境条件下进行的。软件最好能像是手的延伸一样顺手。可用性测试也要尽早进行,以保证有时间更正,否则没能满足可用性标准就像是除零错误,是重大bug。

c) 怎样测试

回归测试,把当前测试的输出与先前或已知的值进行对比,以确定今天对bug的修复没有破坏昨天可以工作的代码。性能、合约、有效性能等都可以进行回归测试。

测试数据。数据分为两种,现实世界的数据和合成的数据。

现实世界的数据代表典型的用户数据,有助于揭示出需求分析中的缺陷和误解。

合成数据在需要大量数据、需要测试边界条件、展示特定统计属性时很有用。

演练GUI系统。对于涉及到GUI的部分,你的设计应该足够地解耦,以使你无需使用GUI就能对应用逻辑进行测试。从这一点来看,Winform那种界面与代码的组合方式是不好的。

彻底测试。衡量测试的覆盖率不能单单只从代码行的覆盖情况,尤其是对于循环、迭代之类的代码。重要的是程序可能具有的状态数。而且即使具有良好的代码覆盖,测试数据、遍历代码的次序对结果也有重大影响。

d) 何时进行测试。任何产品代码一旦存在,就需要进行测试。大多数测试应该自动完成,并尽可能地频繁测试,

e) 一个bug只抓一次。bug一旦被发现,就应该是最后一次被发现,应该对自动化测试进行修改,从此每次都检查那个特定的bug,不存在例外,不要觉得它不会再次发生。

转载于:https://www.cnblogs.com/zhixin9001/p/6822409.html

《程序员修炼之道》笔记(八)相关推荐

  1. 程序员修炼之道-笔记

    写在前面的话 最近突然非常看重对事情的反思与总结,以前看书有做笔记但太少,没有把当时的第一感受记录下来,所以要开始补笔记了. 第一章 注重实效的哲学 1.我的源码让猫给吃了 半年前总是因为在出现需求与 ...

  2. 《程序员修炼之道:从小工到专家》阅读笔记03

    <程序员修炼之道:从小工到专家>阅读笔记03 第六章 当你编码时 靠巧合编程应该避免靠巧合编程,避免依靠运气和偶然的成功.而要深思熟虑的编程. 怎样深思熟虑的编程:1)总是意识到你在做什么 ...

  3. 《程序员修炼之道》读书笔记(二)--第三周

    <!doctype html> The pragmatic programmer(2).md 程序员修炼之道(二) 读书笔记--第三周 第二章 注重实效的途径 DRY原则:系统中的每一项只 ...

  4. 《程序员修炼之道–从小工到专家》读书笔记

    <程序员修炼之道–从小工到专家>的读书笔记 <程序员修炼之道–从小工到专家>[美]Andrew Hunt / David Thomas 著 马维达 译 看这本书主要使用了检视阅 ...

  5. [转载+电子书下载]《程序员修炼之道》 笔记与感想

    [转载]<程序员修炼之道 >笔记与感想 1 我的源码让猫给吃了 不要寻找借口,从自身找原因 2 软件的熵  一句话:不以善小而不为,勿以恶小而为之. 从初期就要做好规范,不要因为是poc这 ...

  6. 读书笔记-程序员修炼之道-序

    前言 我们应该成为什么样的程序员 注重实效的程序员具备的特征 注重实效的个体大型的团队 它是一个持续的过程 前言 程序员修炼之道这本书已经通读了一遍,获益良多,但还是不甚理解,所以在重读一遍,顺便做一 ...

  7. 程序员修炼之道:从小工到专家阅读笔记01

    个人感受部分: 01.总是想要塑造一种自己全能的形象,害怕承认自己的无知和错误. 02.好的程序员对他或自己的职业生涯负责,并且不害怕承认无知和错误,直视我们的缺点--我们必须诚实.责任是我们要主动承 ...

  8. 《程序员修炼之道》笔记(一)

    这几天开始看<程序员修炼之道>,也许不少人看了书的标题,第一时间会觉得这是鸡汤一类的书.但至少以我自己的感受来看,这是很棒的书,现代人文主义不是提倡自我意识嘛,自己感觉好的就是好的.况且人 ...

  9. 程序员修炼之道阅读笔记02

    本周阅读了程序员修炼之道(从小工到专家)的第四章<注重实效的偏执>.第五章<弯曲,或折断>.第六章<当你编码时>的相关内容,对其中一些值得我们学习的地方进行了摘录. ...

  10. 第三周读书笔记《程序员修炼之道》

    这周我阅读的书目是<程序员修炼之道>,重点看了几个章节,但是可能是因为我还没有经历过大的项目,所以不太能对里面的一些观点产生共鸣,不过里面还是有些较为简单的观点让我收获了许多. 1.&qu ...

最新文章

  1. pandas使用groupby函数和count函数返回的是分组下每一列的统计值(不统计NaN缺失值)、如果多于一列返回dataframe、size函数返回分组下的行数结果为Series(缺失值不敏感)
  2. 阅读笔记: 凸包的例子(一)
  3. 25、Java Swing文本编辑器的实现
  4. java filter 注解_Spring常用注解及自定义Filter的实现
  5. CI持续集成系列之(九)代码发布脚本模板书写
  6. python单元测试mock_Mock 在 Python 单元测试中的使用
  7. android+引用非+android+工程,[非原创]编译android C++工程找不到exception handle的解决办法...
  8. 来自intlsy‘s省选debug方法
  9. 通达信标记符号_通达信49个图标,高手指教,通达信软件里的股票标记符号,能增加吗...
  10. 工程测量(地形图测量)
  11. HIKSDK/大华SDK协议视频融合平台EasyCVR移动侦测录像功能无法在后台显示优化过程
  12. mysql mpm_Zabbix和MPM监控MySQL
  13. IDEA中HTML文档快速制作table表格快捷键方法
  14. HTML,CSS 三角形制作案例(等边三角形 直角三角形)
  15. 【解决方案 十二】一文彻底解决文件格式判别问题
  16. 均匀分布 卡方分布_指数分布和卡方分布转换以及初试专业课试题拆封视频
  17. 技术分享:应用于厚型气体电子倍增器的高耐压PCB研究
  18. 当电摇家族进入C++(二)
  19. 如何选择球积分光源LED光源
  20. 玩游戏并支付游戏币_您会为免费游戏支付什么?

热门文章

  1. php tp 支付宝 支付,php实现的支付宝网页支付功能示例【基于TP5框架】
  2. linux 实验 ps,Linux实验室:监控命令iostat与ps_服务器x86服务器-中关村在线
  3. JDBC查询Oracle全部表名称,如何使用JDBC API从Oracle数据库中的现有表中检索记录?...
  4. mysql锁表问题的解决方法_MYSQL锁表问题的解决方法
  5. python cnn识别图像_笨方法学习CNN图像识别(一)—— 图片预处理
  6. c语言程序源代码_程序的编译、链接和执行
  7. java timezone_Java TimeZone getDSTSavings()方法与示例
  8. 博客上一些项目相关源码链接
  9. 独立看门狗---STM32----HAL
  10. mysql 插入中文 ERROR 1366 (HY000): Incorrect string value: '\xE7\x8E\x9E\x97' for column