摘要:
第七章第五节 测试 认可"测试"的价值,搞清楚"测试优先"的哲理 程序正确确认的基本方法: 形式化推理 代码评审 测试 白盒测试:对程序内部代码结构的测试 黑盒测试:对程序外部表现出来的行为的测试 基本过程: 先写spec 再写符合spec的测试用例 写代码、执行测试、有问题再改、再执行测试用例,直到通过它 黑盒测试: 划分等价类,... 阅读全文
摘要:
第七章第四节 调试 【bug的常见类型】 数学bug:例如 零除法,算术溢出 逻辑bug:例如无线循环和无限递归 源头bug:例如使用了为被定义的变量、资源泄漏,其中有限的系统资源如内存或文件句柄通过重复分配耗尽而不释放。缓冲区溢出,其中程序试图将数据存储在分配存储的末尾。 团队工程bug:例如评论过时或者评论错误、文件与实际产品... 阅读全文
摘要:
第七章第三节 断言和防御性编程 断言:在开发阶段的代码中嵌入,检验某些"假设"是否成立。若成立,表明程序运行正常,否则表明存在错误。 可用于检查: 内部不变量: 表示不变量: 控制流不变量 方法的前置条件 方法的后置条件 断言主要用于开发阶段,避免引入和帮助发现bug 实际运行阶段, 不再使用断言 软件发布阶段,禁用断言避免影响性能。 断言... 阅读全文
摘要:
第七章第二节 错误与异常处理 内部错误:程序员通常无能为力,一旦发生,想办法让程序优雅的结束 异常:你自己程序代码发生的,可以捕获处理 【Error】 Error类描述很少发生的Java运行时系统内部的系统错误和资源耗尽情况(例如,VirtualMachineError,LinkageError)。 对于内部错误:程序员通常无能为力,一旦发生,想办法让程... 阅读全文
摘要:
第七章第一节 健壮性和正确性的区别 健壮性(Robustness)和正确性(correctness) 健壮性 定义:系统在不正常输入或不正常外部环境下仍能够表现正常的程度 面向健壮性编程: 处理未期望的行为和错误终止 即使终止执行,也要准确/无歧义的向用户展示全面的错误信息 错误信息有助于进行debug 健壮性原则: Par... 阅读全文
摘要:
第六章第三节 面向可维护的构造技术 基于状态的构造技术 状态模式(State Pattern) 备忘录模式(Memento Pattern) Grammar-based construction 使用grammar判断字符串是否合法,并解析成程序里使用的数据结构 。 正则表达式 通常是递归的数据结构 。 term... 阅读全文
摘要:
第六章第二节 可维护的设计模式 创造性模式:Creational patterns Factory Method pattern 使用非静态工厂: 静态方法: 符合了原则:Open-Closed Principle (OCP) Abstract Factory 方法:提供接口以创建一组相关/相互依赖的对象,但不需要指明其具体类 ... 阅读全文
摘要:
第六章第一节 可维护性的度量与构造原则 可维护性的常见度量指标 可维护性 除此之外,可维护性还有其他许多别名:可扩展性(Extensibility)、灵活性(Flexibility)、可适应性(Adaptability)、可管理性(Manageability)、支持性(Supportability)。总之,有好的可维护性就意味着容易改变,容易扩展。 ... 阅读全文
摘要:
第五章第三节 可复用的设计模式 Structural patterns 1.适配器模式(Adapter) 问题描述:其中LegacyRectangle是已有的类(需要传入矩形的一个顶点、长和宽),但是与client要求的接口不一致(需要给出对角线两个顶点坐标),我们此时建立一个新的接口Shape以供客户端调用,用户通过Shape接口传入两个点的坐标。Rectangle作... 阅读全文
摘要:
第五章第二节 设计可复用的软件 1.LSP -Subtypes can add, but not remove methods 子类型可以增加方法,但不可删 – Concrete class must implement all undefined methods 子类型需要实现抽象 类型中的所有未实现方法 – Overriding method must return same typ... 阅读全文
摘要:
第五章第一节 可复用性的度量、形态和外部观察 面向复用编程(programming for reuse):开发出可复用的软件 基于复用编程(programming with reuse):利用已有的可复用软件搭建应用系统 代码复用的类型: 白盒复用:源代码可见,可修改和扩展 含义:复制已有代码到正在开发的系统,进行修改 优点:可订制化... 阅读全文
摘要:
第三章第五节 ADT和OOP中的等价性 1.==与equals ==是引用等价性 ;而equals()是对象等价性。 ==比较的是索引。更准确的说,它测试的是指向相等(referential equality)。如果两个索引指向同一块存储区域,那它们就是==的。对于我们之前提到过的快照图来说,==就意味着它们的箭头指向同一个对象。 equals()操作比较的是对象的内容... 阅读全文
摘要:
第三章第四节 面向对象编程OOP Interface: specifies expectations 接口:确定ADT规约 Class: delivers on expectations (the implementation) 类:实现ADT 继承extends 严格继承 :子类只能添加新方法,无法重写超类中的方法,加final Final: A final field... 阅读全文
摘要:
软件构造 第三章第三节 抽象数据型(ADT) Creators(构造器): 创建某个类型的新对象,⼀个创建者可能会接受⼀个对象作为参数,但是这个对象的类型不能是它创建对象对应的类型。可能实现为构造函数或静态函数。(通常称为工厂方法) t* -> T 例子:Integer.valueOf( ) Producers(生产器): 通过接受同类型的对象创建新的对象。 T+ , t* -> T 例子:... 阅读全文
摘要:
第三章第二节 软件spec 客户端无需阅读调用函数的代码,只需理解spec即可。 精确的规约,有助于区分责任,给"供需双方"确定了责任,在调用的时候双方都要遵守。 @param @return @throws 例子: Behavioral equivalence (行为等价性) 根据规约判断是否行为等价 与实现无关! 如果两个函数符合这个规约... 阅读全文
摘要:
第三章第一节 数据类型与类型检查 1.数据类型 -基本数据类型 -对象数据类型 Boxed primitives – Boolean, Integer, Short, Long, Character, Float, Double 一般可以自动转换 2.类型检查 -静态类型检查:关于"值"的检查 Syntax errors 语法错误 Wrong names 类名/函数名错误 ... 阅读全文
摘要:
类图介绍 在UML类图中,类使用包含类名、属性(field) 和方法(method) 且带有分割线的矩形来表示。 ·+ :表示public ·- :表示private ·#:表示protected(friendly也归入这类) 因此,上图中的Employee类具有3个私有属性和一个公有方法。 比如在下图的Demo类中,定义了3个方法: publi... 阅读全文
摘要:
软件构造第二章第一节软件生命周期和版本控制 基本内容 Software Development Lifecycle (SDLC) Traditional software process models (waterfall, incremental, V- model, prototyping, spiral) Agile development and eXtreme Progr... 阅读全文
摘要:
软件构造 第一章第二节 软件开发的质量属性 1.软件系统质量指标 External quality factors affect users 外部质量因素影响用户 Internal quality factors affect the software itself and its developers 内部质量因素影响软件本身和它的开发者 External quali... 阅读全文
摘要:
第一章第一节 软件构造的多维视图 软件的多重维度: Buiild-time:Build-time ( 构造阶段): idea-requirement-design-code-installable/executable package code-level:代码的逻辑结构 functions, classes, methods, interfaces component-level:file... 阅读全文