- 博客(12)
- 收藏
- 关注
原创 软件构造 6-5 Testing and Test First Programming
6.5 软件测试与测试优先的编程一. 软件测试1. 验证的种类 为了发现程序中的问题,我们需要做一下工作,他们均属于验证:形式推理:通过理论推导证明程序的正确性。而形式推理目前还缺乏自动化的工具,通常需要漫长的手工计算。但一些关键性的步骤也得证明,例如操作系统的调度程序、虚拟机里的字节码解释器,或者是文件系统。代码审查:即让别人仔细地阅读、审校、评价你的代码。测试:选择合适的输入输...
2020-03-31 23:53:27 227
原创 软件构造 3-3 Abstract Data Type (ADT)
3.3 抽象数据类型(ADT)一. 抽象数据类型与表示独立性: 如何设计良好的抽象数据结构,通过封装来避免客户端获取数据的内部表示(即“表示泄露”),避免潜在的 bug 在 client 和 implementer 之间建立“防火墙”。ADT 的特性:表示泄漏、抽象函数 AF 、表示不变量 RI基于数学的形式对 ADT 的这些核心特征进行描述并应用于设计中。二. Abstract...
2020-03-24 15:33:23 360
原创 软件构造 3-2 Designing Specification
3.2 设计规约一.方法的规约前置 / 后置条件欠定规约、非确定规约陈述式、操作式规约规约的强度及其比较如何写出好的规约二. Functions & methods in programming languages 方法的规约 参数类型是否匹配,在静态类型检查阶段完成。 返回值类型是否匹配,也在静态类型检查阶段完成。 “方法”是程序的“积木”,可以被独立开发...
2020-03-20 15:30:28 285
原创 第四章 分治策略 4.6 证明主定理
4.6 证明主定理一.1. 当我们在一个局限的值域上使用渐近符号时,必须要时刻小心,避免得到错误的结论。例如:对 nnn 是 222 的幂的情况证明 T(n)=O(n)T(n)=O(n)T(n)=O(n) 并不保证 T(n)=O(n)T(n)=O(n)T(n)=O(n) 。函数 T(n)T(n)T(n) 可能是这样定义的:T(n)={n若 n=1,2,4,8,...n2其他T(...
2020-03-17 21:46:48 740
原创 软件构造 3-1 Data Type and Type Checking
3.1 数据类型与类型检验一. Data type in programming 数据类型languages 分类:基本数据类型、面向对象的数据类型。PrimitivesObject Reference Typesint,long,byte,short,char,float,double,booleanClasses,interfaces,arrays,enums,...
2020-03-17 15:32:38 308
原创 第四章 分治策略 4.5 用主方法求解递归式
4.5 用主方法求解递归式一.1.主定理 令 a≥1a≥1a≥1 和 b>1b>1b>1 是常数, f(n)f(n)f(n) 是一个函数, T(n)T(n)T(n) 是定义在非负整数上的递归式: T(n)=aT(bn)+f(n)T(n)=aT(\frac{b}{n})+f(n)T(n)=aT(nb)+f(n) 其中我们将 b/nb/nb/n 解释为 ⌊n/b⌋\lfl...
2020-03-13 00:32:46 1029
原创 第四章 分治策略 4.4 用递归树方法求解递归式
4.4 用递归数方法求解递归式一.1. 在递归树中,每个结点表示一个单一子问题的代价,子问题对应某次递归函数调用。我们将树中每层中的代价求和,得到每层代价,然后将所有层的代价求和,得到所有层次的递归调用的总代价。 递归树最适合用来生成好的猜测,然后即可用代入法来验证猜测是都正确。当使用递归树来生成好的猜测时,常常需要忍受一点儿“不精确”,因为稍后才会验证猜测是否正确。如果在画递归树和代...
2020-03-11 22:16:21 2988
原创 软件构造 2-1 Software Lifecycle and Configuration Management
2.1 软件生命周期与配置管理一.1.1. Software Development Lifecycle(SDLC) 软件的生命周期1.1.1 软件的版本 从有到好 软件的变化导致软件生成周期的变化(如:图中黑色线的变化)。1.1.21.2 Traditional Software process models 传统软件开发模型 两种类型:线性过程(按部就班:编写、测试、修...
2020-03-10 16:08:30 245
原创 第四章 分治策略 4.3 用代入法求解递归式
4.3 用代入法求解递归式一.1. 代入法1.1 代入法 求解递归式分为两步: 1. 猜测解的形式。 2. 用数学归纳法求出解中的常数,并证明解是正确的。1.2 数学归纳法要求我们证明解在边界条件下也成立。为证明这一点,我们通常证明对于归纳证明,边界条件适合作为基本情况。1.3 微妙的细节 才出了递归式解的渐近界,但在归纳证明时失败。问题常常在于归纳假设不够强,无法证...
2020-03-09 15:39:07 817
原创 软件构造 1-1 Multi-Dimensional Views of Software Construction
1.1 软件构造过程中的多维度视图 一.1.1 Multi dimensional software views Multi dimensional software viewsBy phases: build and run time viewsBy dynamics: moment and period viewsBy levels: code and component vi...
2020-03-08 16:32:21 267
原创 第三章 函数的增长 3.2 标准记号与常用函数
3.2 标准记号与常用函数一.1.单调性 若 m ≤ n 蕴含 f(m) ≤ f(n),则函数 f(n) 是单调递增的。类似地,若 m ≤ n 蕴含 f(m) ≥ f(n),则函数 f(n) 是单调递减的。若 m < n 蕴含 f(m) < f(n),则函数 f(n) 是严格递增的。若 m < n 蕴含 f(m) > f(n),则函数 f(n) 是严格递减的。2....
2020-03-07 18:03:11 447
原创 第三章 函数的增长 3.1 渐进记号
3.1 渐进记号一.1.引言 当输入规模足够大时,使得只有运行时间的增长量级有关时,我们要研究算法的渐进效率。也就是说,我们关心当输入规模无限增加时,在极限中,算法的运行时间如何随着输入规模的变大而增加。通常,渐进地更有效的某个算法对除很小的输入外的所有情况将是最好的选择。2.定义 用来描述算法渐进运行时间的记号根据定义域为自然数集N = {0, 1, 2, …}的函数来定义。 ...
2020-03-02 00:30:07 754
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人