- ISBN:9787121419973
- 装帧:一般纯质纸
- 册数:暂无
- 重量:暂无
- 开本:其他
- 页数:288
- 出版时间:2021-10-01
- 条形码:9787121419973 ; 978-7-121-41997-3
本书特色
1.一部英文原著亚马逊4.5高分,畅销全球26年的领域经典——首次落地中国。 2.用【简单原则】讲透软件研发重要思想——从需求分析到产品演进,覆盖产品研发全流程。 3.首本实现【轻阅读】的研发字典书——201个原则独立成文,简练深刻,轻松阅读。 4.百度技术学院【指定用书】——掌握科学的方法,效率提高不止100%。 5.原则1:质量**。原则7:尽早把产品交给客户。原则39:先确定问题,再写需求。原则64:没有文档的设计不是设计。原则66:不要重复造轮子。 6.原则92:程序首先是写给人看的。原则104:编程语言的知识没那么重要。原则123:不要在单元测试之前集成。原则127:好的管理比好的技术更重要。原则185:软件会持续变化。
内容简介
本书汇总了软件工程原则。原则是关于软件工程的基本原理、规则或结论,不管所选的技术、工具或语言是什么,这些原则都有效。全书共9章,章为引言,后面8章将201个软件工程的原则划分为8个大的类别:一般原则、需求工程原则、设计原则、编码原则、测试原则、管理原则、产品保证原则和演变原则。
目录
★第1章 引言★
★第2章 一般原则★
原则1 质量**
原则2 质量在每个人眼中都不同
原则3 开发效率和质量密不可分
原则4 高质量软件是可以实现的
原则5 不要试图通过改进软件实现高质量
原则6 低可靠性比低效率更糟糕
原则7 尽早把产品交给客户
原则8 与客户/用户沟通
原则9 促使开发者与客户的目标一致
原则10 做好抛弃的准备
原则11 开发正确的原型
原则12 构建合适功能的原型
原则13 要快速地开发一次性原型
原则14 渐进地扩展系统
原则15 看到越多,需要越多
原则16 开发过程中的变化是不可避免的
原则17 只要可能,购买而非开发
原则18 让软件只需简短的用户手册
原则19 每个复杂问题都有一个解决方案
原则20 记录你的假设
原则21 不同的阶段,使用不同的语言
原则22 技术优先于工具
原则23 使用工具,但要务实
原则24 把工具交给优秀的工程师
原则25 CASE工具是昂贵的
原则26 “知道何时”和“知道如何”同样重要
原则27 实现目标就停止
原则28 了解形式化方法
原则29 和组织荣辱与共
原则30 跟风要小心
原则31 不要忽视技术
原则32 使用文档标准
原则33 文档要有术语表
原则34 软件文档都要有索引
原则35 对相同的概念用相同的名字
原则36 研究再转化,不可行
原则37 要承担责任
★第3章 需求工程原则★
原则38 低质量的需求分析,导致低质量的成本估算
原则39 先确定问题,再写需求
原则40 立即确定需求
原则41 立即修复需求规格说明中的错误
原则42 原型可降低选择用户界面的风险
原则43 记录需求为什么被引入
原则44 确定子集
原则45 评审需求
原则46 避免在需求分析时进行系统设计
原则47 使用正确的方法
原则48 使用多角度的需求视图
原则49 合理地组织需求
原则50 给需求排列优先级
原则51 书写要简洁
原则52 给每个需求单独编号
原则53 减少需求中的歧义
原则54 对自然语言辅助增强,而非替换
原则55 在更形式化的模型前,先写自然语言
原则56 保持需求规格说明的可读性
原则57 明确规定可靠性
原则58 应明确环境超出预期时的系统行为
原则59 自毁的待定项
原则60 将需求保存到数据库
★第4章 设计原则★
原则61 从需求到设计的转换并不容易
原则62 将设计追溯至需求
原则63 评估备选方案
原则64 没有文档的设计不是设计
原则65 封装
原则66 不要重复造轮子
原则67 保持简单
原则68 避免大量的特殊案例
原则69 缩小智力距离
原则70 将设计置于知识控制之下
原则71 保持概念一致
原则72 概念性错误比语法错误更严重
原则73 使用耦合和内聚
原则74 为变化而设计
原则75 为维护而设计
原则76 为防备出现错误而设计
原则77 在软件中植入通用性
原则78 在软件中植入灵活性
原则79 使用高效的算法
原则80 模块规格说明只提供用户需要的所有信息
原则81 设计是多维的
原则82 优秀的设计出自优秀的设计师
原则83 理解你的应用场景
原则84 无须太多投资,即可实现复用
原则85 “错进错出”是不正确的
原则86 软件可靠性可以通过冗余来实现
★第5章 编码原则★
原则87 避免使用特殊技巧
原则88 避免使用全局变量
原则89 编写可自上而下阅读的程序
原则90 避免副作用
原则91 使用有意义的命名
原则92 程序首先是写给人看的
原则93 使用*优的数据结构
原则94 先确保正确,再提升性能
原则95 在写完代码之前写注释
原则96 先写文档后写代码
原则97 手动运行每个组件
原则98 代码审查
原则99 你可以使用非结构化的语言
原则100 结构化的代码未必是好的代码
原则101 不要嵌套太深
原则102 使用合适的语言
原则103 编程语言不是借口
原则104 编程语言的知识没那么重要
原则105 格式化你的代码
原则106 不要太早编码
★第6章 测试原则★
原则107 依据需求跟踪测试
原则108 在测试之前早做测试计划
原则109 不要测试自己开发的软件
原则110 不要为自己的软件做测试计划
原则111 测试只能揭示缺陷的存在
原则112 虽然大量的错误可证明软件毫无价值,但是零错误并不能说明软件的价值
原则113 成功的测试应发现错误
原则114 半数的错误出现在15%的模块中
原则115 使用黑盒测试和白盒测试
原则116 测试用例应包含期望的结果
原则117 测试不正确的输入
原则118 压力测试必不可少
原则119 大爆炸理论不适用
原则120 使用 McCabe 复杂度指标
原则121 使用有效的测试完成度标准
原则122 达成有效的测试覆盖
原则123 不要在单元测试之前集成
原则124 测量你的软件
原则125 分析错误的原因
原则126 对“错”不对人
★第7章 管理原则★
原则127 好的管理比好的技术更重要
原则128 使用恰当的方法
原则129 不要相信你读到的一切
原则130 理解客户的优先级
原则131 人是成功的关键
原则132 几个好手要强过很多生手
原则133 倾听你的员工
原则134 信任你的员工
原则135 期望优秀
原则136 沟通技巧是必要的
原则137 端茶送水
原则138 人们的动机是不同的
原则139 让办公室保持安静
原则140 人和时间是不可互换的
原则141 软件工程师之间存在巨大的差异
原则142 你可以优化任何你想要优化的
原则143 隐蔽地收集数据
原则144 每行代码的成本是没用的
原则145 衡量开发效率没有完美的方法
原则146 剪裁成本估算方法
原则147 不要设定不切实际的截止时间
原则148 避免不可能
原则149 评估之前先要了解
原则150 收集生产力数据
原则151 不要忘记团队效率
原则152 LOC/PM与语言无关
原则153 相信排期
原则154 精确的成本估算并不是万无一失的
原则155 定期重新评估排期
原则156 轻微的低估不总是坏事
原则157 分配合适的资源
原则158 制订详细的项目计划
原则159 及时更新你的计划
原则160 避免驻波
原则161 知晓十大风险
原则162 预先了解风险
原则163 使用适当的流程模型
原则164 方法无法挽救你
原则165 没有奇迹般提升效率的秘密
原则166 了解进度的含义
原则167 按差异管理
原则168 不要过度使用你的硬件
原则169 对硬件的演化要乐观
原则170 对软件的进化要悲观
原则171 认为灾难是不可能的想法往往导致灾难
原则172 做项目总结
★第8章 产品保证原则★
原则173 产品保证并不是奢侈品
原则174 尽早建立软件配置管理过程
原则175 使软件配置管理适应软件过程
原则176 组织SCM独立于项目管理
原则177 轮换人员到产品保证组织
原则178 给所有中间产品一个名称和版本
原则179 控制基准
原则180 保存所有内容
原则181 跟踪每一个变更
原则182 不要绕过变更控制
原则183 对变更请求进行分级和排期
原则184 在大型开发项目中使用确认和验证(V&V)
★第9章 演变原则★
原则185 软件会持续变化
原则186 软件的熵增加
原则187 如果没有坏,就不要修理它
原则188 解决问题,而不是症状
原则189 先变更需求
原则190 发布之前的错误也会在发布之后出现
原则191 一个程序越老,维护起来越困难
原则192 语言影响可维护性
原则193 有时重新开始会更好
原则194 首先翻新*差的
原则195 维护阶段比开发阶段产生的错误更多
原则196 每次变更后都要进行回归测试
原则197 “变更很容易”的想法,会使变更更容易出错
原则198 对非结构化代码进行结构化改造,并不一定会使它更好
原则199 在优化前先进行性能分析
原则200 保持熟悉
原则201 系统的存在促进了演变
★参考资料索引★
★术语索引★
节选
★原则1 质量**★ 无论如何定义质量,客户都不会容忍低质量的产品。质量必须被量化,并建立可落地实施的机制,以促进和激励质量目标的达成。即使质量没达到要求,也要按时交付产品,这似乎是政治正确的行为,但这是短视的。从中长期来看,这样做是自杀。质量必须被放在首位,没有可商量的余地。Edward Yourdon建议,当你被要求加快测试、忽视剩余的少量bug、在设计或需求达成一致前就开始编码时,要直接说“不”。 ★原则7 尽早把产品交给客户★ 在需求阶段,无论你多么努力地试图去了解客户的需求,都不如给他们一个产品,让他们使用它,这是确定他们真实需求的*有效方法。如果遵循传统的瀑布式开发模型,那么在99% 的开发资源已经耗尽之后,才会**次向客户交付产品。如此一来,大部分的客户需求反馈将发生在资源耗尽之后。 和以上方法相反,可在开发过程的早期构建一个快速而粗糙的原型。将这个原型交付给客户,收集反馈,然后编写需求规格说明并进行正规的开发。使用这种方法,当客户体验到产品的**个版本时,只消耗了 5%~20% 的开发资源。如果原型包含合适的功能,就可以更好地理解和把握*有风险的客户需求,*终产品也就更有可能让客户满意。这有助于确保将剩余的资源用于开发正确的系统。 ★原则39 先确定问题,再写需求★ 当面对他们认定的问题时,大多数工程师都会匆忙提供解决方案。如果工程师对这个问题的看法是正确的,那么解决方案可能奏效。然而,问题往往是难以捉摸的。例如,唐纳德·高斯(Donald Gause)和杰拉尔德·温伯格(Gerald Weinberg)描述了高层办公楼中的一个“问题”,里面的住户抱怨电梯等待时间太长。这真的是一个问题吗?这是谁的问题?从居住者的角度来看,问题可能是浪费了他们太多时间。从房主的角度来看,问题可能是入住率(及租金)可能会下降。 显而易见的解决办法是提高电梯的速度。但其他解决方法可能包括(1)增加新电梯,(2)错峰安排上班时间,(3)给快递保留一些电梯,(4)提高租金(这样业主可以接受降低后的入住率),(5)改进电梯使用的“归位算法”(homing algorithm),以便在闲置时移动到高需求楼层。这些解决方案的成本、风险和时间延迟差别巨大。而任何一个方案生效,都取决于特定的场景。在试图解决问题前,针对面临问题的人及问题的本质,要确保深入分析了所有的可能选择。在解决问题时,不要被*初方案带来的潜在兴奋所蒙蔽。方案的变化总是比构建系统的成本低。 ★原则64 没有文档的设计不是设计★ 我经常听到软件工程师说,“我已经完成了设计,剩下的工作就是写文档了”。这种做法毫无道理。你能想象一个建筑设计师说, “我已经完成了你新家的设计,剩下的工作就是把它画出来”,或者一个小说家说,“我已经完成了这部小说,剩下的工作就是把它写下来”? 设计,是在纸或其他媒介上,对恰当的体系结构和算法的选择、抽象和记录。 ★原则66 不要重复造轮子★ 当电子工程师设计新的印刷电路板时,他们会查阅可用集成电路的目录,以选择*合适的组件。当电子工程师设计新的集成电路时,他们会查阅标准单元的目录。当建筑师设计新房屋时,他们会查阅预制门窗、饰条和其他组件的目录。所有这些都被称为“工程”。 软件工程师经常一次又一次地重新发明组件。他们很少修补已有的软件组件。有趣的是,软件业称这种罕见的实践为“复用”,而不是“工程”。 ★原则92 程序首先是写给人看的★ 在计算机时代早期,计算机处理速度相对较慢,任何能够减少一些指令操作的事情都值得去做。在非常昂贵的计算机系统上,*有效地利用资源是主要目标。如今形势发生了变化。现在*有价值的资源是人力:开发软件的人力、维护软件的人力和提高软件能力的人力。除了非常少数的例外场景,程序员应该首先考虑的是,后续需要尝试理解和适配软件的人员。任何能够帮助他们的事情都应该去做(原则 87 到 91 会提供一些帮助)。执行效率也很重要(见原则63、79、94),但它们并不是互斥的。如果你需要执行效率,这没问题,但要提升程序的可读性,以免在这个过程中对相关人员造成负面影响。 ★原则104 编程语言的知识没那么重要★ 不管使用哪种语言,优秀的程序员都是优秀的。不管使用哪种语言,糟糕的程序员仍然是糟糕的。不可能有一个人是“优秀的C程序员”,同时是“糟糕的Ada程序员”。如果他确实在Ada语言上表现得很糟糕,那大概率在C语言上也不会表现得很好!除此之外,一个真正优秀的程序员应该可以很容易地学会一种新语言。这是因为一个真正优秀的程序员很好地理解和赞赏高质量编程的概念,而不只是了解某些编程语言的语法和语义特性。 所以,为一个项目选择语言的首要驱动力应该是什么语言更合适(见原则102),而不是程序员都在抱怨“我们只知道C语言”。如果由于项目选择了其他语言而导致一些人退出,那么这个项目很可能会更好!
作者简介
★作者介绍★ Alan M. Davis是一名计算机科学家,他的职业生涯大约有一半在工业界,一半在学术界。 他在工业界的经历包括: Offtoa公司的联合创始人兼首席执行官,这是一家帮助企业家制定商业战略的互联网公司(2012年至今)。 Omni-Vista公司的联合创始人、董事长兼首席执行官,这是一家位于科罗拉多斯普林斯的软件公司(1998—2002)。 他在学术界的经历包括: 位于丹佛的科罗拉多大学行政MBA创业教授,前任学术主席(2006—2018)。 科罗拉多大学斯普林斯分校的商业策略与企业家精神专业的教授,前El Pomar软件工程教授(1991—2015)。 Davis博士在1994年至1998年担任《IEEE 软件》的主编;在全球28个国家或地区演讲2000余次,并撰写了9本图书;他自1994年起成为IEEE会士;曾多次访问中国,其中包括领导EMBA学生小组三度赴上海、北京出访。 ★译者介绍★ 本书译者均为百度内部培训项目“代码的艺术训练营”的学员。出于对本书的热爱和推广优秀软件工程理念的使命,大家自发组织起来,利用业务时间完成了本书的翻译。翻译小组的成员包括:叶王,马学翔,吴斌,王冰清,杨光,曾浩浩,李殿斌,甘璐,李子昂,肖远昊,贾儒,王莹,张苗,李双婕,荣文升。 大家很高兴能够在百度完成这件非常有意义的工作。
-
全图解零基础word excel ppt 应用教程
¥16.3¥48.0 -
C Primer Plus 第6版 中文版
¥62.6¥108.0 -
零信任网络:在不可信网络中构建安全系统
¥34.2¥59.0 -
有限与无限的游戏:一个哲学家眼中的竞技世界
¥37.4¥68.0 -
硅谷之火-人与计算机的未来
¥12.7¥39.8 -
情感计算
¥71.2¥89.0 -
大模型RAG实战 RAG原理、应用与系统构建
¥74.3¥99.0 -
大学计算机基础实验教程(MS Office版)——面向数据分析能力培养
¥29.1¥39.8 -
LINUX企业运维实战(REDIS+ZABBIX+NGINX+PROMETHEUS+GRAFANA+LNMP)
¥51.8¥69.0 -
AI虚拟数字人:商业模式+形象创建+视频直播+案例应用
¥65.6¥89.8 -
LINUX实战——从入门到精通
¥49.0¥69.0 -
剪映AI
¥52.8¥88.0 -
快速部署大模型:LLM策略与实践(基于ChatGPT等大语言模型)
¥56.9¥79.0 -
数据驱动的工业人工智能:建模方法与应用
¥68.3¥99.0 -
数据存储架构与技术(第2版)
¥62.9¥89.8 -
纹样之美:中国传统经典纹样速查手册
¥81.8¥109.0 -
Java面向对象程序设计基础教程
¥35.9¥59.8 -
UG NX 12.0数控编程
¥24.8¥45.0 -
MATLAB计算机视觉与深度学习实战(第2版)
¥90.9¥128.0 -
UN NX 12.0多轴数控编程案例教程
¥24.3¥38.0