《JavaScript专家编程》——第9章 代码质量 9.1 定义代码质量

第9章 代码质量

质量不是一种行为,而是一种习惯。

——Aristotle

写高质量的JavaScript是什么意思?质量能度量吗?还是说它是一个主观感受,类似于美和艺术的柏拉图式的理想?程序员往往会在质量的主观和客观理解之间摇摆不定。他们提出了诸如软件工艺的概念,这是一种用类似手工艺的方法来编写软件的方式。软件工匠常被这样描述:他们拥有超群的技术,总是能将工作提炼为基本的、本质的部件。这样一个工匠在电气上被称为摇滚明星程序员。这基于两个标准,一是这个人具有如同艺术家一样的独特天赋,二是他工作的产出并不是各个组件的单纯结合。然而,很多编程是围绕度量、重构,以及通过程序性的可重复的流程来改进代码。这表明,质量可以被提取为一系列独立的和可度量的步骤。

如果质量可以度量,那么对于JavaScript开发者来说,有哪些机制可以确保他们写出高质量的代码呢?本章将深入探讨编写高质量JavaScript的概念,因为涉及到编程,我们首先给质量下一个定义,然后提供一个用于评估和改进代码质量的框架。

9.1 定义代码质量
正如许多复杂的学科往往会吸引具有不同背景的人一样,对于编程质量的定义往往会跨越艺术与科学之间的栅栏。编程行为往往是创造性地解决问题和运用工程师的严谨来完善解决方案的融合。编程是一种博弈,它存在于编写可重复步骤的客观观察和借由经验和洞察而爆发出的主观评判之间。事实上,“质量”这个词同时包含这两个方面。Barbara W. Tuchman解释了质量的两面性:

当然,“质量”这个词有两方面的含义:首先它是指一个物质的性质或本质特征,比如“他的声音有命令的性质(His voice has the quality of command)”;其次它是意味着卓越品质的条件,作为与低劣品质的区分(Tuchman,1980)。

Tuchman接着将质量描述为“自我滋养”,这是一个非常生动的描述。质量也被描述为一种追求,这表明它不是一个目标,而是一个过程。这可能是因为它的定义并不是固定的,它属于时代精神。为了证明这一点,你可以看看艺术的发展史,它也在不断排斥或拥抱不同的艺术表现形式。在法国印象派的发展历程中,它从最初被鄙视的艺术,经过几年的发展后成为艺术世界的顶峰。他们的画并没有改变,只是对于质量的定义发生了变化。

在本章中,我认为,对于JavaScript源代码的评估,主观和客观的评价都是需要的。事实上,我认为,你不能将两者完全分离。但是,在证实这个断言之前,我有必要正确地呈现这两种形式。

9.1.1 主观质量
主观质量往往描述有启发性或必要的代码,或者Truchman所说的“天资”。在他的产品质量的文章中,David Garvin定义了一种形式的质量,他将其描述为卓越。他将卓越品质定义为:

……从绝对和普遍认识来说,卓越品质是不妥协的标准和高成就的标志。然而,主张这种观点的支持者认为质量不能被精确定义;相反,它是一种我们只能通过经验来辨识的简单的无法分析的属性。这个定义在很大程度上借鉴了柏拉图对于美的讨论。在研讨会上他认为,美是“柏拉图式”的一种形式,所以它并不能被定义。其他的哲学家称其为“原始的逻辑”,也就是说,只有当一个人接触到显示其特性的对象的时候,美(也许质量也一样)才可以被理解(Garvin,1984)。

这个定义清楚地表达出,主观质量依赖于个人的经验或对技能很熟练的人的指导,这些人会在他们的领域认识到质量并实现卓越。因此,主观质量基本上是普遍的真理,并不多是由于发现而创造的。

9.1.2 客观质量
客观质量认为,如果天才可以被度量,那么它就可以被量化,被复制。蛋糕的质量不依赖于面包师的天资,反而是成分的准确选择和计量,以及严格遵循配方的​​结果。客观质量会在一个反馈回路中以制造、应用、提炼的形式不断向主体经验逼近。这种形式的质量适合于算法、测试套件和软件工具。在本章的其余部分,我将介绍一种通过客观质量提高代码质量的方法。

时间: 2024-10-04 03:23:48

《JavaScript专家编程》——第9章 代码质量 9.1 定义代码质量的相关文章

《JavaScript专家编程》——导读

**前言**在我看来,好的技术书籍是磁带.藏宝图和现场札记内容的混合体.本书就是我灌注了很多心血而将这些不同形式融为一体的一本书. 老一辈的人还记得,磁带内容是由很多歌曲组成的.这些磁带经常被作为礼物送给朋友.恋人.人们会挑选一些个人喜欢的歌,或者围绕某个主题组织在一起的歌,录入这盘磁带中.通常,当听磁带的人听到这些歌时,这些歌就会勾起人们对录制者的记忆.这本书就是一盘我录给你们的JavaScript方面的磁带.这些章节包括JavaScript中我喜欢的一些方面,也包括不容易被理解的主题,因为这

《JavaScript专家编程》——9.4 度量JavaScript代码质量

9.4 度量JavaScript代码质量 为了让计算精度上升到最高,客观质量分析以程序化的方式对代码进行分析.这项任务可以使用编程工具完成,这些工具能够在多种情况下评估代码,根据各项指标得到最终的质量得分.本节介绍了静态代码分析,这种方法非常适合评估JavaScript的质量. 静态代码分析 静态代码分析就是不通过运行代码来分析代码的过程.静态分析看起来非常像一个文本编辑器的拼写检查器.拼写检查器扫描文档的正文来寻找错误和含糊之处,而并不需要了解文本的意义.同时,静态代码分析从功能上分析源代码的

《JavaScript专家编程》——9.3 为什么要度量代码质量

9.3 为什么要度量代码质量 "我不能为代码质量而索价."这是我问我的朋友关于这个问题的想法时,他的原话.他的意思是,代码质量主要是对程序员有利,而对客户来说是一种无形的税收.我能理解他的观点:我有几次经验,其中一个潜在客户将目光投向了我引以为傲的有关测试的方法论上.我的朋友接着说,"客户支付的是结果,而不是过程.当我买票到西南部,我付的钱是为了到达我的目的地,而不是为了乘坐飞机."这句话听起来好像有点道理,但我会在这一节讨论度量代码质量并不会让你失去竞争优势, 而

《JavaScript专家编程》——9.5 小结

9.5 小结 本章介绍了JavaScript代码质量的必要性及其原因.一个程序的质量往往会影响程序员维护.改进甚至是否有能力完全了解源代码.质量差的代码通常被称为技术债,剥夺了项目的时间和资源,而这些时间和资源用在其他地方能更好地发挥作用.然而,编程往往是一门跨越了艺术和科学之间的学科,这使得对质量的定义变的更为复杂.而且,质量又是从主观和客观上的双重度量. 有这样一种观点认为,一个人所在时代的文化,以及他们的个人经历都会对质量产生影响.这种观点将质量描述为具有"内在卓越"的东西,只有

《JavaScript专家编程》——第1章 对象和原型 1.1鸟瞰JavaScript

第1章 对象和原型 练习不会造就完美,只有使用最佳的方法来练习才能造就完美. --Vince Lombardi 对专家来说,把JavaScript的核心概念讲上3章似乎有点多,毕竟这些是语言最基本的组成部分.我的主张是,有的人虽然不能读写,但可以说话.就像有的开发人员对JavaScript的基本功能很熟悉,但对里面那些复杂的东西可能就没那么了解了. 本书的目标是像明灯一样照亮语言中那些晦涩的角落.里面包含的很多概念你可能已经试着学习过了,甚至可以假设你已经理解了.这里可以想象一下:你正降落到你大

《JavaScript专家编程》——9.2 如何度量质量

9.2 如何度量质量 你正在为质量寻找一个可用的定义,但因为它们涉及到编程,所以需要首先考虑它的各个方面.通常会将这些方面表示为软件度量: 软件度量是一个软件在某些属性或其规格上的度量.由于定量度量在所有科学中都是必不可少的,因此计算机科学从业者和理论家通过不断努力,将类似的方法引入软件开发中.我们的目标是获得客观的.可重复的和可量化的度量,这可能包含很多有价值的实践,包括进度规划.预算规划.成本估算.质量保证测试.软件调试.软件性能优化以及人员任务分配优化. 我已经努力总结出六个指标,来度量代

《JavaScript专家编程》——1.2 对象概述

1.2 对象概述 JavaScript是由Brendan Eich创建的一种面向对象编程(OOP)语言,当时他还在Netscape公司工作,花了几周的开发时间就发布了.虽然JavaScript的名字中有个"Java",但它实际上跟Java语言没什么关系.在InfoWorld的一篇对Eich的采访稿中,他解释了JavaScript命名的由来: InfoWorld:据我所知,JavaScript开始的时候叫Mocha,后来改名叫LiveScript,在 Netscape和Sun合并以后才叫

《JavaScript专家编程》——1.3 小结

1.3 小结 对象是持有零个或多个属性的包. 对象的属性要么是基本类型,要么是复杂类型.对象可以持有它们自己的基本类型的拷贝,但仅能持有复杂类型的引用.出于这个原因,JavaScript的属性要么传引用,要么传值. 对象的属性可以有标记符,可以在修改对象时,控制对象的行为和能力. 对象可以通过以下三种方式之一创建. 使用字面量语法'{}'. 联合使用new运算符和构造函数,例如'new Foo()'. 使用内置的Object.create()函数. JavaScript是一种基于原型的语言,对象

《JavaScript机器人编程指南》——第1章 开始学习JS机器人技术

第1章 开始学习JS机器人技术 JavaScript机器人编程指南 欢迎来到JavaScript机器人的世界!让我们探索一下用Arduino和Johnny-Five来编写机器人程序有多么简单吧. 在这一章中,我们会做如下事情: 探索JS机器人技术.NodeBots和Johnny-Five: 搭建开发环境: 使板载LED灯闪烁.