软件构造复习笔记(1)

一、软件构造的多维视图

由三个视角构成:
(1)build-time和run-time
(2)code-level和Component-level
(3)moment和peride


code-level:代码的逻辑组织,functions,classees,methods,interface
Component-leval:代码的物理组织,files,directions,packages,libraries
moment:特定时刻的软件形态
period:软件形态岁时间的变化


  • build time 构造阶段
Code-levalComponent-leval
Moment词汇层面(source code),语法层面(AST),语义层面(Class Diagram)files,packages,libraries,static linking,test case,build script,(Component diagram)
Periedcode churn(代码变化)Configuration Item, Version

AST:抽象语法分析树
Class Diagram:UML中的类图
Component diagram:UML中的构件图
Configuration Item:SCI,配置项
Version版本。VCS(version control system)版本控制

【注】(1)静态链接发生在build-time,动态链接发生在run-time

  • run-time运行阶段
Code-levelComponent-leval
Momentcode snapshot,memory dumppackage,library,dynamic linking,Configuration, Database,middleware,network,hardware,(Development diagram)
periedexecution,stack trace,concurrent,multi-threadsevent log,multi-processes,distributed processes
共同Procedure Call Graph, Message Graph (Sequence Diagram)Procedure Call Graph, Message Graph (Sequence Diagram)

code snapshot:代码快照图
memory dump:内存信息转储
execution tracing:执行跟踪:代码层面,eg:用日志方式记录程序执行的调用次序
event log:事件日志:构建、系统层面
Deployment diagram:UML中的部署图
Sequence diagram:UML中的时序图

【注】统一视角的不同方面之间可以相互转化

二、软件构造的质量目标

1、外部质量因素

  • (1)correctness,正确性
    • 最重要的质量指标
    • 保持正确性方法:测试和调试,防御式编程,形式化方法
  • (2)robustness健壮性:针对异常情况的处理
    • 出现规约定义之外的行为,取决于规格说明书spec的范畴
  • (3)extendibility易扩展型:软件易于调整以适应变化的能力
    • 规模越大,扩展越难
  • (4)reuseability可复用性:一次开发多次使用,发现共性
  • (5)Compatibility兼容性:不同软件系统之间容易集成
    • 如何?保持设计的同构性,标准化
  • (6)efficiency效率
    • 对性能的关注要与其他质量属性进行折中,过度优化导致软件不再适合变化和复用
    • 除非有足够的正确性否则性能毫无意义
  • (7)portability可移植性:软件可以在不同技术环境之间进行转移
  • (8)ease of use:容易学,安装,操作,监控
  • (9)functionality功能性:每增加一小点功能,都确保其他质量属性不受到损失
  • (10)timelines及时性

2、内部质量因素

  • 圈复杂度:衡量一个模块判定结构的复杂程度
  • 耦合度coupling:模块间交互
  • 内聚度cohesioj:模块独立性
  • 代码行数
  • 可读性

3、权衡

  • 折中
  • 正确性不能与其他质量因素折中

三、软件测试与测试优先编程

1.测试层次

  • 单元测试:类,函数,功能单元等单个模块。针对软件的最小单元开展测试,隔离各个模块,容易定位错误和调试
  • 集成测试:文件,包,子系统等多个模块
  • 系统测试:所有子系统
  • 回归测试:修改后再测试

2.测试类型

(1)静态测试和动态测试

  • 静态测试Static testing :eg:代码评审
  • 动态测试Dynamic testing:运行测试,在100%完成之前进行

(2)testing和debug

  • testing:发现是否存在错误
  • debug:识别错误根源,消除错误

(3)黑盒测试和白盒测试

  • 黑盒测试:对外部表现出来的行为进行测试,基于spec
    不用关心内部细节。
    基于规约,检查程序是否符合规约
    • 等价类划分:将被测函数的输入域划分为等价类。数据的限制范围:3类,小于限制范围,在范围之内,大于限制范围。指明特定值,如最大值最小值
    • 边界值分析:最小值;率高于最小值;正常值;略低于最大值;最大值
    • 全覆盖:笛卡尔乘积;测试完备,但用例数量多
    • 覆盖每个取值:最少1次即可;测试用例少,代价地,但测试覆盖度未必高
  • 白盒测试:对程序内部代码测试,根据程序执行路径设计,source code

【测试用例test case】输入+执行条件+期望结果
eg:{2,4}, {0,0}, {-2,4} for program y=x^2

3.代码覆盖度

  • 测试效果:路径覆盖度>分支覆盖度>语句覆盖度
  • 测试难度:路径覆盖度>分支覆盖度>语句覆盖度
  • 根据预先设定的覆盖度标准,逐步增加测试用例的数量,直到覆盖度达到标准

4.测试策略

  • testing strategy
  • 每个测试方法都要有注释,表明使用哪个测试用例
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值