《程序员修炼之道》笔记(八)

第八章 注重实效的项目

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

 

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/392936.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android 网络调试 源代码,Android源代码调试环境搭建

我们在调试Android应用程序的时候,有时候遇到一些莫名其妙的问题,因此我们需要查看Android内部是如何调用的。我们都知道Android是一个伟大的开源项目,因此debug的时候肯定是支持源代码级别调试的。采用源代码调试,一方面有利于发…

如何使用HTTP压缩优化服务器

鉴于互联网上的宽带有限,网络管理人员任何旨在加速接入速度的努力都是有价值的。其中的一个方法就是通过HTTP压缩技术实现接入速度的加速,它通过减少在服务器和客户端之间传输的数据量,显著地提高网站的性能。数据压缩本身并不新鲜。但是&…

leetcode117. 填充每个节点的下一个右侧节点指针 II(dfs)

给定一个二叉树 struct Node { int val; Node *left; Node *right; Node *next; } 填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。 初始状态下,所有 next 指针都被设置为 …

cmd命令大全

遍历当前盘所有文件 dir /ad/s/b ASSOC 显示或修改文件扩展名关联。ATTRIB 显示或更改文件属性。BREAK 设置或清除扩展式 CTRLC 检查。BCDEDIT 设置启动数据库中的属性以控制启动加载。CACLS 显示或修改文件的访问控制列表(ACL)。CALL 从另一个批处理程序调用这一个。CD 显示当…

mac web开发_如何设置Mac进行Web开发

mac web开发While you can build basic websites with nothing more than a text editor and browser, you may want to up your game by adding a JavaScript framework like React or Vue and useful tools like Git to your workflow.虽然可以只使用文本编辑器和浏览器来构建…

OpenGL研究3.0 多边形区域填充

OpenGL研究3.0 多边形区域填充 DionysosLai(906391500qq.com)2014-06-22 所谓多边形区域填充。就是将多边形内部区域,所有已相同色块填充。注意:这里讨论的多边形是简单多边形(即不考虑诸如五角星这样的相交多边形)。简单多边形&a…

[转]Android笔记:ScrollView嵌套ViewPager的滚动冲突解决方法

12345678910111213141516171819202122232425262728293031323334/*** 能够兼容ViewPager的ScrollView * Description: 解决了ViewPager在ScrollView中的滑动反弹问题 */ public class ScrollViewExtend extends ScrollView { // 滑动距离及坐标 private float xDistance, yDista…

android tv 乐视手机,乐视超4系列原生Android TV分享

固件:Official USA Firmware:USA BIN Firmware 5.8.050S_1028://mega.nz/#F!7PhyDI6D!TnwNlMmWXosK1uCUdpyNGg[/url]USA ZIP Firmware 5.8.056S_0420 (OTA ZIP, must be flashed only after flashing the above bin)://drive.google.com/open?id1N9...rNHVB_-VPIad…

ping、网络抖动与丢包

基本概念: ping: PING指一个数据包从用户的设备发送到测速点,然后再立即从测速点返回用户设备的来回时间。也就是俗称的“网络延迟” 一般以毫秒(ms)计算 一般PING在0~100ms都是正常的速度,不会有较为明显的卡顿。 测试…

Webtask后端即服务:无服务器快速教程

查尔斯厄勒(Charles Ouellet) (By Charles Ouellet) The word serverless is buzzing through dozens of dev circles today.如今, 无服务器一词正在数十个开发界中流行。 It has been for a while now.已经有一段时间了。 I’ve been meaning to exit my code ed…

leetcode145. 二叉树的后序遍历(dfs)

给定一个二叉树&#xff0c;返回它的 后序 遍历。示例:输入: [1,null,2,3] 1\2/3 输出: [3,2,1]class Solution {List<Integer> listnew ArrayList<>();public List<Integer> postorderTraversal(TreeNode root) {getPostorderTraversal(root);return list;…

[luoguP2801] 教主的魔法(二分 + 分块)

传送门 以为对于这类问题线段树都能解决&#xff0c;分块比线段树菜&#xff0c;结果培训完才知道线段树是一种特殊的分块方法&#xff0c;有的分块的题线段树不能做&#xff0c;看来分块还是有必要学的。 对于这个题&#xff0c;先分块&#xff0c;然后另开一个数组对于每个块…

鸿蒙系统适配开发,捕获科技拟建立鸿蒙开发组 为区块链钱包客户适配鸿蒙系统做筹备...

遭遇美国“实体清单”封杀的第85天&#xff0c;华为“鸿蒙”横空出世&#xff01;8月9日下午&#xff0c;在华为全球开发者大会上&#xff0c;当余承东正式宣布鸿蒙系统(Harmony OS)发布的时候&#xff0c;全场掌声雷动&#xff01;世界上第一个由中国企业自主研发的全平台微内…

[arm驱动]linux内核中断编程

第一部分获取中断(开启硬件中断)一、中断的申请注销: 1&#xff09;中断的申请 12int request_irq(unsigned int irq, irq_handler_t handler, unsigned long irqflags, const char *devname, void *dev_id) 2)中断的注销 1void free_irq(unsigned int irq, void *dev_id) 3&am…

关于VCP(Virtual Com Port)拓展的调试经历(一)

* The Overview 前日&#xff0c;接到老板部署的任务&#xff0c;将现有的基于STM32L151与L432的LoRaWAN程序中添加USB CDC(Communication Device Class)功能&#xff0c;并枚举为VCP(Virtual Com Port)用以替代以往的串口打印。很疑惑为什么以前架构代码的时候没有添加进去。。…

leetcode701. 二叉搜索树中的插入操作(dfs)

给定二叉搜索树&#xff08;BST&#xff09;的根节点和要插入树中的值&#xff0c;将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据保证&#xff0c;新值和原始二叉搜索树中的任意节点值都不同。注意&#xff0c;可能存在多种有效的插入方式&#xff0c;只要树在…

三星s6 android 8.0,再见Android 8.0,三星s6全系列系统都停止了,第一代国王已经倒下了吗?...

对于Android用户而言&#xff0c;最令人兴奋的事情是系统更新&#xff0c;因为该更新意味着更流畅的体验和更加用户友好的功能. 但是&#xff0c;旧的三星S6并不是那么幸运&#xff0c;并且不再错过Android 8.0.三星s6的全系列指的是三星s6&#xff0c;三星s6 edge&#xff0c;…

devise tree_Devise如何确保您的Rails应用密码安全

devise treeby Tiago Alves由蒂亚戈阿尔维斯(Tiago Alves) Devise如何确保您的Rails应用密码安全 (How Devise keeps your Rails app passwords safe) Devise is an incredible authentication solution for Rails with more than 40 million downloads. However, since it ab…

Exchange 2010无法安装问题解决方法

当你在活动目录(AD)森林中安装多台全局编录服务器(GC)之后,默认情况下你会发现在AD站点里面自动生成二条站点连接,从上面的截图可以看到目前在AD森林的Default-First-Site-Name(默认站点)里面有6台GC。 从上面的截图可以看到目前只有一台叫做Sh-Site1GC(全局编录服务器)是处于运…

android edittext 不滚动,EditText 设置可以垂直滑动但是不可输入

一、前言&#xff1a;android:id"id/edtInput"android:layout_width"match_parent"android:layout_height"60dp"android:background"drawable/round_theme_3_gray"android:gravity"top"android:hint"string/please_inp…