2022哈尔滨工业大学 软件构造期末复习 一

Chapter1 软件构造基础软件系统三维度

  • Build-time&Run-time
  • Code-level&Component-level
  • Moment&period

重点版:
这部分需要理解记忆&结合程序,比如源代码显然是编译时的,代码快照(运行时变量层面的状态)应该是运行时;具体的源代码应该是代码级别,而库library,包package是元件component级别;

在这里插入图片描述
各维度之间的关系/转换
在这里插入图片描述

先分为构造阶段和运行阶段,每个阶段中又分瞬时和时间段,每种时间维度下又分code和component级别的内容;

  • 源码code:
  • 删改之后形成code churn,属于Buildtime-Period-Code;
  • 单句代码执行后形成code
  • snapshot,属于runtime-moment-code;
  • 查看代码执行轨迹(形成图)属于rt-period-code;
  • 堆积之后形成包/库,属于buildtime-moment-component;
  • 运行后查看链接情况、使用动态库,属于runtime-moment-component
  • 包、库、代码整体的改变组合成版本,属于bt-period-component;
  • 通过log日志查看系统的变化,属于rt-period-component;

软件系统的质量
外部因素
1. External 1: Correctness(正确性),正确就是满足spec,这是软件开发最重要的因素,一个可用的软件一定是正确的,所以首要保证软件的正确性,其他的都可以做妥协、让步,但只有这一项不可妥协。
2. External 2: Robustness(鲁棒性),通过抛出异常然后处理异常等方式让出错的程序恢复到正常的执行流程上。
3. External 3: Extendibility(易扩展性),要便于软件功能的增加/扩展(ADT、OOP、留下一个Visitor),降低未来修改软件时的成本。
4. External 4: Reusability(复用性),在异性之间尽可能地寻找共性,以便于未来可以直接使用现在写的这段代码。这样可以降低软件地开发成本。
5. External 5: Compatibility(兼容性),在不同的环境下都是可用的,不同的软件系统之间相互可容易的集成。
6. External 6: Efficiency(效率),不要过早的优化,性能在没有正确性保障的条件下是没有意义的。
7. External 7: Portability(可移植性),软件可方便的在不同的技术环境之间移植。
8. External 8: Ease of use(易用性),学习成本低,结构简单、清晰,易于使用。
9. External 9: Functionality(功能性),功能过多会导致易用性的降低。主要功能要首要提升质量。
10. External 10: Timeliness(时效性),软件要能够在交付时间之前完成开发交给使用者。
11. External 10++: Other qualities,Verifiability (可验证性),Integrity (完整性),Repairability (可修复性),Economy (经济性)。

内部质量因素:
代码行数(LOC)、圈复杂度、结构:高内聚低耦合、可读性、可理解性、整洁度、大小//可能需要不同方面进行折中&妥协,除了正确性;
5个全局质量指标:

  1. Elegant and beautiful code:代码要容易理解,通过统一变量/方法的命名标准、代码的风格、注释、包组织结构、必要时重构代码等方式让代码尽可能的容易理解。

  2. Design for/with reuse:ADT/OOP、接口、继承(Overload、Override)、多态、泛型、框架等技术可用于提高代码的可复用性。

  3. Low complexity:当复杂度较低的时候,代码就容易被扩展新的功能,所以要高内聚低耦合,遵从SOLID原则、OO设计模式、使用VCS控制代码版本

  4. Robustness and correctness:使用测试驱动的开发、异常处理、Assertion机制、防御式编程等技术保证程序的健壮性和正确性。

  5. Performance and efficiency:使用设计模式、并行/多线程等技术提升性能

Chapter2 软件测试与测试优先编程

1.测试
测试层面:
* 单元测试
* 集成测试
* 系统测试

静态&动态测试
测试&调试debug
* 测试:发现是否存在错误;
* 调试:识别错误根源,消除错误;

白盒&黑盒测试
* 白盒:测试代码结构;
* 黑盒:对程序外部表现的行为进行测试;

回归测试:程序被修改后,执行之前的所有测试;

2.测试用例 test case
测试用例:输入+执行条件+期望结果;

3.测试优先的编程
——先写测试,再进行编程;
* 先写spec
* 再写符合spec的测试用例;有效输入和无效输入都要覆盖
* 写代码。执行测试,有问题则修改,然后再测试,重复直到通过;
TDD——测试驱动的开发;

4.JUnit单元测试
* 有@Test声明;
* 使用的方法:assertEquals,assertTrue,assertFalse,assertThat;
e.g. assertEquals(expected_value,actual_value);//前一个参数为期望值,后一个为运算值;

5.测试用例的设计
等价类划分

  • 将被测函数的输入划分为等价类,从等价类中导出测试用例;
  • 等价的定义:对称、传递、自反; 从每个等价类(集合)中选取一个代表(元素),作为测试用例

BVA:边界值分析,补充类划分方法,在等价类划分时考虑边界作为等价类之一;
6.代码覆盖度(白盒测试)
分类:函数覆盖、语句、分支、条件、路径
* 函数覆盖:所有函被调用;
* 语句覆盖:所有语句被测试用例运行;

	* 这俩类似,线性覆盖而不考虑分支结构

*分支覆盖:遇到分支语句,每个分支都被测试过;
* 条件覆盖:比分支更进一步,对于判断语句中每个条件的正/负都要测试到;

	* e.g. if(a&b),分支测试a&b为T/F两种情况,条件测试a为T/F乘b为T/F共四种情况;
  • 路径覆盖:所有可能的分支组合都测试;

测试效果&难度:路径>分支>语句
极端情况:
*
笛卡儿积,全覆盖;
*
覆盖每种值(根据等价类划分),最少一次;

Chapter3 软件构造的过程和工具

2.1 软件生命周期和配置管理基本知识
软件开发生命周期:创建、优化
传统软件过程模型:线性、瀑布、增量、V字、原型、螺旋;
敏捷开发:增量&迭代;
极限编程:自动化构建、持续集成、持续交付;软件配置管理SCM和版本控制系统VCS
C-configuration
软件配置管理:追踪和控制软件的变化,软件中发生变化的基本单元比如文件,被称为软件配置项SCI(软件可修改的“元件”);
软件在开发中达到稳定,比如可以对外发布,此时文件组成基线baseline;
管理配置项随时间变化的信息和基线信息的数据库——配置管理数据库CMDB;
VSC分为三种:
* 本地版本控制系统;
* 存储在本地,无法协作;
* 集中式版本控制系统;

  • 存储在服务器上,支持协作,但无法避免服务器崩溃的风险;
  • 分布式版本控制系统;
  • 同时存储在本地和服务器,但存储空间需求大;

Git
四个区域:workspace,staging,local repository,remote repository;
Object Graph
边A->B表示在版本B的基础上进行变化,形成版本A(指向的是父对象);
* 除了最初的commit,每个commit都有一个指向父亲的指针;
* 多个commit指向同一个父亲——分支;
* 一个commit指向两个父亲——合并;

  • git中一个子对象只能有0/1/2个父对象,一个父对象可以有多个子对象;

git指令:

  • 创建:git init

  • 暂存:git add

  • 提交:git commit -m “commit message”

  • 链接:git remote add origin

  • 推送:git push- u origin master

  • 创建分支:git checkout -b

  • 切换分支:git checkout

  • 合并分支:git merge

  • 删除分支:git branch -d

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值