09 2019 档案
摘要:基本原则 格式化的基本原理 格式化的借本原理指出,好的布局凸显程序的逻辑结构。 任何计算机对程序的解读 布局是关于程序结构的有用暗示。 好布局有什么用 以某种风格来写程序并不仅仅是处于美观考虑。用习惯的方式写程序有着心理因素——程序员有着强烈的意识,觉得其他程序员都会遵循这些论述规矩。 把布局当作一
阅读全文
摘要:设计工具 目前的设计工具主要就是那些能创建设计图表的图形化工具。 源代码工具 编辑 集成开发环境(IDE); 在编辑器中进行编译和错误检测; 与源代码控制工具、build工具、测试工具、除错工具集成; 显示程序的扼要视图或大纲视图; 跳转到类的定义、子程序定义、变量定义处; 跳转到使用某个类、子程序
阅读全文
摘要:集成是指一种软件开发行为:将一些独立的软件组合为一个完整系统。 集成方式的重要性 从周到的继承中,你能预期获得某些下列的益处: 更容易诊断缺陷; 缺陷更少; 脚手架更少; 花费更少的时间获得第一个能工作的产品; 更短的整体开发进度表; 更好的顾客关系; 增强士气; 增加项目完成的机会; 更可靠地估计
阅读全文
摘要:鼓励良好的编码实践 给项目的每一部分分派两个人; 逐行复查代码; 要求代码签名; 安排一些好的代码示例工人参考; 强调代码是共有财产; 奖励好的代码; 所给与的奖励应该是程序员想要的; 只有非常出色的代码才应得到奖励; 一份简单的标准。 配置管理 什么是配置管理 配置管理是“系统化地定义项目工作和处
阅读全文
摘要:本章讨论程序性能调整问题,性能问题可以从两个层面上考虑:策略上和技术上。本章要解决的是策略层面上的性能问题: 性能概述 性能和代码调整 请从以下方面来思考效率问题: 程序需求; 程序的设计; 类和子程序的设计; 程序同操作系统的交互; 代码编译; 硬件; 代码调整。 代码调整简介 Pareto法则
阅读全文
摘要:本章重点讲述提高代码运行速度的方法,同时也对如何减少代码的资源占用给出了一些建议。程序性能通常同代码的速度和资源占用相关,但减小代码资源占用更主要的是通过对类的数据结构的重新设计来实现,而非代码调整。 逻辑 在知道答案后停止判断; 按照出现频率来调整判断顺序; 相似逻辑结构之间的性能比较; 用查询表
阅读全文
摘要:交流和规模 改善交流效率的常用方法是采用正式的文档。 项目规模的范围 项目规模对错误的影响 项目的规模既会影响错误的数量,也会影响错误的类型。 项目规模对生产率的影响 对小项目(2000行代码或者更少),影响生产率的最大因素莫过于单个程序员的技巧。随着项目规模和团队规模的增大,组织方式对生产率的影响
阅读全文
摘要:重构简介 重构定义: 1. 在不改变软件外部行为的前提下,对其内部结构进行改变,使之更容易理解以便于修改; 2. 尽可能地将一个程序分解为多个组成部分。 重构的理由 代码重复; 冗长的子程序; 循环过长或嵌套过深; 类的接口未能提供层次一致的抽象; 拥有太多参数的参数列表; 类的内部修改往往被局限于
阅读全文
摘要:调试时确定错误根本原因并纠正此错误的过程。 调试概述 让你有所收获的软件缺陷 理解你正在编写的程序; 明确你犯了哪种类型的错误; 从代码的阅读者的角度分析代码质量; 审视自己解决问题的方法; 审视自己修正缺陷的方法; 寻找缺陷 科学的调试方法在运用经典的科学调试方法时,你会经历如下步骤: 1. 通过
阅读全文
摘要:单元测试是将一个程序员或者一个开发团队所编写的,一个完整的类、子程序或者小程序,从完整的系统中隔离出来进行测试; 组件测试是将一个类、包、小程序或者其他编程元素,熊一个更加完整的系统中隔离出来进行测试,这些测试代码涉及到多个程序员或者多个团队; 集成测试是对两个或更多的类、包、组件或者子系统进行的联
阅读全文
摘要:协同开发实践概要 协同构建包括结对编程、正式检查、非正式技术复查、文档阅读,以及让其他开发人员共同承担创建代码及其他工作产品责任的技术。 协同构建是其他质量保证技术的补充; 协同构建有利于传授公司文化以及编程专业知识; 集体所有权适用于所有形式的协同构建; 在构建前后都应保持协作。 结对编程 成功运
阅读全文
摘要:本章从构建的角度来审视保障软件质量的技术。 软件质量的特性 正确性; 可用性; 效率; 可靠性; 完整性; 适应性; 精确性; 健壮性; 可维护性; 灵活性; 可以执行; 可重用性; 可读性; 可测试性; 可理解性 改善软件质量的技术 软件质量目标; 明确定义质量保证工作; 测试策略; 软件工程指南
阅读全文
摘要:布尔表达式 用 和`false`做布尔判断; 隐式地比较布尔值与 和`false`; 简化复杂的表达式; 拆分复杂的判断并引入新的布尔变量; 把复杂的表达式做成布尔函数; 用决策代替复杂的条件; 编写肯定性质的布尔表达式; 在 语句中,把判断条件从否定形式转换为肯定形式,并且互换 和`else`子句
阅读全文
摘要:表驱动法是一种编程模式——从表里面查找信息而不使用逻辑语句( 和`case`)。 表驱动法使用总则 在适当的环境下,采用表驱动法,所生成的代码会比复杂的逻辑代码更简单、更容易修改,而且效率更高。 使用表驱动法的两个问题 使用表驱动法必须先解决两个问题。首先,你必须要回答怎样从表中查询条目的问题。其次
阅读全文
摘要:子程序中的多处返回 程序可以通过 和`exit`这类控制结构,在任何需要的时候退出子程序。 如果能增强可读性,那么就使用 ; 用防卫子句(早返回或早退出)来简化复杂的错误处理; 减少每个子程序中 的数量。 递归 在递归里面,一个子程序自己负责解决某个问题的一小部分,它还把问题分解成许多的小块,然后调
阅读全文
摘要:选择循环的种类 在大多数语言中,你只能用到少数几个循环: 计数循环执行的次数是一定的,可能是针对每位雇员执行一次; 连续求值的循环预先并不知道将要执行多少次,它会在每次迭代时检查是否应该结束; 无限循环一旦启动就会一直执行下去; 迭代器循环对容器内的每个元素执行一次操作。 什么时候使用while循环
阅读全文
摘要:条件语句用于控制其它语句是否执行 if语句 简单if then语句 在写if语句的时候请遵循下述指导原则: 1. 首先写正常代码路径,再处理不常见情况; 2. 确保对于等量的分支是正确的; 3. 把正常情况的处理凡在if后面而不要放在else后面; 4. 让if子句后面跟随一个有意义的语句; 5.
阅读全文
摘要:必须有明确顺序的语句 如果语句之间存在依赖关系,并且这些关系要求你把语句按照一定的顺序加以排列,那么请设法使得这些关系变得明显。 设法组织代码,使依赖关系变得非常明显; 使子程序名能凸显依赖关系; 利用子程序参数明确显示依赖关系; 用注释对不清晰的依赖关系进行说明; 用断言或者错误处理代码来检查依赖
阅读全文
摘要:结构体 使用结构体的理由: 用结构体来明确数据关系; 用结构体简化对数据块的操作; 用结构体来简化参数列表; 用结构体来减少维护。 指针 使用指针的一般技巧 正确地使用指针要求程序员采用一种双向策略。第一,要首先避免造成指针错误;第二,在编写代码之后尽快检测出指针错误。 把指针操作限制在子程序或类里
阅读全文
摘要:数值概论 下面一些建议能够使你在使用数的时候少犯错误。 避免使用神秘数值 修改会变得更可靠; 修改会变得更容易; 你的代码变得更可读。 如果需要可以使用硬编码的0和1; 预防除零错误; 使类型转换变得明显; 避免混合类型的比较; 注意编译器的警告。 整数 在用整数的时候,要注意下面的注意事项。 检查
阅读全文
摘要:选择好变量名的注意事项 一个好的变量名是可读的、易记得得和恰如其分的。 最重要的命名注意事项 最重要的考虑事项是,该名字要完全、准确地描述出该变量所代表的事物。通常,对变量的描述就是最佳的变量名。 以问题为导向 一个好记的名字反映的通常是问题,而不是解决方案。 最适当的名字长度 当变量名的平均长度在
阅读全文
摘要:本章中用“变量”一词同时指代对象和内置数据类型,如整数和数组等。“数据类型”一词通常指内置数据类型,而“数据”一词则可能代表对象,也可能代表内置数据类型。 数据认知 创建有效数据的第一步是了解所要创建的数据种类。积累大量的数据类型对于程序员来说至关重要。 有关数据类型的更多资源 Cormen《Int
阅读全文
摘要:本章从微观上关注编程过程——也就是关注创建单独的类及其子程序的特定步骤。本章还将讲述伪代码编程过程,这种编程有助于减少设计和编写文档所需的工作量,同时提高这两项的工作质量。 创建类和子程序的步骤概述 先对一个类做总体设计,列出这个类内部的特定子程序,创建这些子程序,然后从整体上复查这个类的创建结果。
阅读全文
摘要:防御式编程的主要思想是:子程序应该不因传入错误数据而被破坏,哪怕是由其他子程序产生的错误数据。更一般地说,其核心思想是要承认程序会有问题,都需要被修改,聪明的程序员应该根据这一点来编程序。 保护程序免遭非法输入数据的破坏 通常有三种方法来处理进来垃圾数据: 1. 检查所有来源于外部数据的值; 2.
阅读全文
摘要:JMeter是Apache组织开发的基于Java的压力测试工具。它可以用于测试静态和动态资源,可以用于对服务器、网络或对象模拟巨大的负载,来自不同压力类别下测试它们的强度和分析整体性能。 JMeter下载地址https://jmeter.apache.org/download_jmeter.cgi
阅读全文
摘要:子程序是为实现一个特定的目的而编写的一个可被调用的方法(method)或过程(procedure)。 创建子程序的正当理由 这里列出一些创建子程序的正当理由: 降低复杂度 引入中间、易懂的抽象 避免代码重复 支持子类化 隐藏顺序 隐藏指针操作 提高可移植性 简化复杂的布尔判断 改善性能 除此之外,创
阅读全文
摘要:类是由一组数据和子程序构成的集合,这些数据和子程序共同拥有一组内聚的、明确定义的职责。 类的基础:抽象数据类型(ADT) 抽象数据类型是指一些数据以及对这些数据所进行的操作的集合。 使用ADT的益处:可以隐藏实现细节、改动不会影响到整个程序、让接口提供更多信息、更容易提高性能、让程序的正确性更显而易
阅读全文
摘要:设计中的挑战 软件设计意味着去构思、创造或发明一套方案,把一份计算机软件的规格说明书转变为可实际运行的软件。设计就是把需求分析和编码调试连在一起的活动。 设计是一个险恶的问题:只有通过解决或部分解决才能被明确的问题。 设计是个了无章法的过程(即使他能得出清爽的成果)。 设计就是确定取舍和调整顺序的过
阅读全文
摘要:选择编程语言 使用熟悉的语言,生产率比使用不熟悉的语言高。 使用高级语言比使用低级语言生产率高。 编程约定 在高质量软件中,可以看到“架构的概念完整性”与“其底层实现”之间的关系。实现必须与架构保持一致,并且这种一致性是内在的、固有的。 成功编程的关键就在于避免随意的变化,这样你的大脑就可以专注于那
阅读全文
摘要:前期准备的重要性 使用高质量的实践方法是那些能创造高质量软件的程序员的共性。这些高质量的实践方法在项目初期、中期、末期都强调质量。 如果你在项目末期强调质量,那么你会强调系统测试。如果你在项目中期强调质量,那么你会强调构建实践。如果你在项目开始阶段强调质量,那么你会计划、要求并且设计一个高质量的产品
阅读全文
摘要:隐喻的重要性 重要的研发成果常常产自类比(analog)。通过把你不太理解的事物和一些你较为理解、且十分类似的事物做比较,你可以对这些不太理解的东西产生更加深刻的理解。这种使用隐喻的方法叫做“建模(modeling)”。 常见的软件隐喻 写作代码、软件的耕作法:培植系统、软件的牡蛎养殖观点:系统生长
阅读全文

浙公网安备 33010602011771号