第一章
1.AST(抽象语法树):倒着看,父节点为两子节点的操作符,条件condition会单列出一个分支。
2.编译和build时,IDE和JVM需要知道库的位置,或者链接了什么库
3.库被拷贝进入代码形成整体,执行的时候无需提供库文件
4.静态链接发生在构造阶段。
5.库文件不会在build阶段被加入可执行软件,仅仅做出标记
6. 程序运行时,根据标记装载库至内存。发布软件时,记得将程序所依赖的所有动态库都复制给用户。
7. 代码快照图:描述程序运行时内存里变量层面的状态
8.执行跟踪:用日志方式记录程序执行的调用次序。
9.外部质量取决于内部质量。外部影响用户。内部影响软件本身与开发者。
10.质量与目标间的冲突需要重视
第二章
1. 软件测试可以提高软件性能,但软件性能不取决于软件测试。
2.即使最好的测试,也不会有百分百的正确率。再好的测试,也不能证明系统不存在错误。
3.测试:发现是否存在错误。调试:识别错误根源,消除错误。
4.白盒测试:对程序内部代码结构的测试。黑盒测试:对程序外部表现出来的行为的测试。二者要求结构必须完整,只有在程序开发完成后进行。
5.优秀测试样例的特征:最可能发现错误,不重复、不冗余,最有效,不简单也不复杂。
6.写测试代码的过程:先写spec,再写符合spec的测试用例。写代码、执行测试、有问题再改、再执行测试用例,直到通过它。
7.单元测试:隔离各个模块,容易定位错误和调试。
8.划分等价类。将被测函数的输入域划(分为等价类(根据每个输入数据需要满足的约束条件来划分),从等价类中导出测试用例。
9.一些等价类划分的指导:输入数据限定了数据范围、指明来特定值,确定了一组数组、是Y/N。(1)、选择测试用例覆盖等价类(2)、根据测试用例划分等价类。
10.等价类划分时,边界作为等价类之一加入考虑。
11.代码覆盖度越低,测试越不充分。
12.测试效果:路径覆盖>分支覆盖>语句覆盖。
13. 测试难度:路径覆盖>分支覆盖>语句覆盖。
14.测试策略就是等价类的划分。
第三章
1.螺旋迭代:长周期,风险大/不确定的大程序
2.敏捷模型(开发):几乎不需要文档。快速适应变化。
3. 火箭发射系统,要求有详细的文档描述,高要求高风险的软件应使用传统开发模型。敏捷模型适用于迭代快的小型软件。
4.Agile=增量+迭代。
5. 绑定开发和测试,将方案与设计中的文档全部去掉
6.SCM/软件配置管理:追踪和控制软件的变化。
7.SCI软件配置项:软件发生变化的基本单元(如文件)。
基线:软件持续变化过程中的“稳定时刻”(例如:对外发布的版本)
8.git仓库的三个部分:.git 目录(本地的CMDB)。工作目录(本地文件系统)。暂存区(隔离工作目录和GIT仓库)。
三个状态:已修改,已暂存,已提交。
9.版本控制:为软件的任一特定时刻(Moment)的形态指派一个唯一的编号,作为“身份标识”。
10. 版本之间的演化关系图(有向无环图),一条边 A->B表征了“在版本B的基础上作出变化,形成了版本A。
11. 每个commit指向一个父亲。多个commit指向同一个父亲:分支。 一个commit指向两个父亲:合并。 注:一个子对象最多两个父对象,一个父对象可有多个子对象
12. 是两个分支末端和分支公共祖先的三个快照合并成一个新的快照,并自动生成一次commit。