哈工大软件构造复习5(2,9-12)

2,12 测试和面向正确性和健壮性的软件构造

白盒测试:对程序内部代码结构的测试
白盒测试标准:
独立/基本路径测试:对程序所有执行路径进行等价类划分,找出有代表性的最简单的路径(例如循环只需执行一次),设计测试用例使每一条基本路径被至少覆盖一次。
黑盒测试:对程序外部表现出来的行为的测试
测试用例:输入+执行条件+期望结果
 
测试优先的编程:
1)先写spec
2)根据spec写测试用例
3)完成代码直到通过测试用例
优势:节省大量的测试时间
 
单元测试:针对软件的最小单元模型开展测试,隔离各个模块,容易定位错误和调试
Junit test:一个单元测试方法通常包含一个或多个对正在测试的模块,然后使用断言检查结果assertEquals、assertTrue 和 assertFalse 等方法。
前面需要@Test
 
代码覆盖度:
测试效果和难度:路径覆盖>分支覆盖>语句覆盖
 

测试优先编程。在编写代码之前编写测试。
▪ 用于系统地选择测试用例的分区和边界。
▪ 白盒测试和语句覆盖率,用于填写测试套件。
▪ 对每个模块进行单元测试,尽可能隔离。
▪ 自动回归测试,防止错误再次出现。

健壮性和正确性是软件构造最重要的质量特性

健壮性:系统在不正常输入和不正常外部环境下表现正常的程度

健壮性要求能够处理错误信息和终止,如果终止则要展示给用户全面的错误信息以便debug

正确性:对spec的完成程度

对外的接口,倾向于健壮;对内的实现,倾向于正确

Error:不是由程序本身引起,由系统限制引起

Exception:自己程序导致的问题,可以捕获、处理

 
如果子类型中override了父类型中的函数,那么子类型中方法抛出的异常不能比父类型抛出的异常类型更宽泛:
子类型方法可以抛出更具体的异常,也可以不抛出任何异常
父类型未抛出异常,子类型也不能抛出异常
 
断言assert可用来限定:内部不变量、表示不变量、控制流不变量、前置条件、后置条件等
 

9,10,11面向可复用性和可维护性的软件构造

复用的几个级别:源代码级别,模块级别,库级别,系统级别

可复用类:继承,重写,重载,参数多态,泛型编程等

软件复用:最主要是代码复用

白盒复用:源代码可见、可修改和扩展(对应继承)

黑盒复用:源代码不可见,不能修改,只能通过API接口使用(对应委托)

 

LSP:

子类型多态:客户端可以用统一的方式处理不同类型的对象。

能被Java静态类型检测检测出的:

子类型可以增加方法,但不可以删除方法
子类型需要实现抽象类型中的所有未实现的方法
子类型中重写的方法必须返回相同的类型或者子类型(满足协变)
子类型中重写的方法必须使用同样类型的参数(或符合逆变的参数)
子类型中重写的方法不能抛出额外的异常(协变)
不能被静态类型检测出的:

更强的不变量
更弱的前置条件
更强的后置条件

协变:

父类型->子类型:越来越具体
返回值和异常的类型:不变或变得更具体
反协变:参数相反变化或更抽象
反协变在java中看作overload
 
委派/委托:一个对象请求另一个对象的功能
 
软件维护:修复错误、改善性能
 
软件维护的类型:纠错性,适应性,完善性,预防性
 

可维护性度量指标:圈复杂度、代码行数、可维护性指数(MI)、继承的层次数、类之间的耦合度、单元测试的覆盖度

SOLID设计

  • SRP(单一责任原则)
  • OCP(开放-封闭原则)
  • LSP(Liskov替换原则)
  • DIP(依赖转置原则)
  • ISP(接口聚合原则)

形式语言正则表达式可用于编程

设计模式:创建型模式、结构型模式、行为型模式、

创建型模式:

工厂方法模式:

当client不知道要创建哪个具体类的实例,或者不想在client代码中指明要具体创建的实例时,用工厂方法。
定义一个用于创建对象的接口,让其子类来决定实例化哪一个类,从而使一个类的实例化延迟到其子类
 

 

静态工厂方法:既可以在ADT内部实现,也可以构造单独的工厂类
 
结构型模式:
1)适配器模式:将某个类/接口转换为client期望的其他形式
通过增加一个接口,将已存在的子类封装起来,client面向接口编程,从而隐藏了具体子类。
2)装饰器模式(Decorator)对一个类的功能进行扩充(实现特性的组合)装饰器在运行时组合特性
继承在编译时组合特性
 
行为型模式:
策略模式:使用功能的时候不访问功能实现,访问接口(在多个功能间灵活切换)
模板模式:共性的步骤在抽象类内公共实现,差异化的步骤在各个子类中实现 
实现:使用继承和重写实现模板模式
迭代器:将集合类的迭代操作委托给迭代器来实现
VISITOR:把类中的某些功能委托给别人实现
 

 

 
posted @ 2022-06-13 22:32  feeling123  阅读(39)  评论(0)    收藏  举报