HIT软件构造学习笔记与心得—6,7
摘要:
SOLID原则
正则表达式
Throwable
黑盒测试用例设计
注释形式写测试策略
SOLID
单一责任原则:
一个类尽量专心做一件事,这样当发生变化时,引起变化的类只有一个。
开放封闭原则:
对扩展是开放的,对修改是封闭的。
显然,继承和委托可以做到这一点,当我们需要在一个地方用if,else或者switch判断多种情况,特别是判断某一个对象是什么类的时候,可以将这些对象进行抽象,抽象出一个父类,要判断的对象继承自父类并重写相关函数,这样就不用判断具体是什么类的对象,Java的重写判定机制会在运行时判断对象的类,并执行相应的函数。
LSP原则:
简单而言,就是子类型可以替换父类型。
子类型应该具有更强的规约,即更弱的前置条件,更强的后置条件,更广泛的参数,更严格的返回值,同时,子类型的作用域只能更大,不能更小,声明的异常只能更少。
接口隔离原则:
客户不应该被迫保持不必要的接口,即保持接口尽量小。
PPT中的一个例子,一个Worker接口,能eat(),work(),一个ManWorker实现了它,这没有问题,一个人类工人能吃能喝,但是,假如我们需要一个机器人工人,RobotWorker也实现了Worker接口,也具有eat()的方法,但是他不用吃饭啊,问题就来了。因此,我们要尽量将接口进行隔离,保持它们足够小巧。
我们可以将两个方法分别抽象出两个接口Eatable和Workable,反正Java是支持多实现的,Manworker实现两个接口,RobotWorker实现workable即可。
依赖转置原则:
高层模块不应该依赖于低层模块,二者都应该依赖于抽象。
抽象不应该依赖于实现细节,实现细节应该依赖于抽象。
高层模块不依赖于底层模块意味着,当底层的实现改变时,高层模块不需要进行修改,依然能实现其相应的功能,这其实就要求我们针对接口编程,也就是说,用一个接口将客户端和底层实现分离开来,客户端调用接口,接口在文档中声明相应方法的规约,底层实现按照规约进行实现,当底层实现发生改变,不过是从一种实现变为另一种实现,不会对代码的整体产生太大影响。
正则表达式
连接x=yz,重复x*,x+,并x|y
x ::= y? x要么是y,要么是空
x ::= y+ x是多个y,至少1个
x ::= [abc] x是abc中的一个
x ::= [^abc] x是除了abc以外的其他所有字符之一
– x ::= (y z | a b)* an x is zero or more “yz” or “ab” pairs
– m ::= a (b|c) d an m is a, followed by either b or c, followed by d
. any single character
\d 数字
\s 空格,回车,制表符
\w 字母数字下划线
., (, ), *, +, 转义符
Throwable
Java中所有异常和错误都是Throwable的子类。
unchecked异常是无法被捕获的,是程序员编程的问题,应该让程序员回去重写。。。
checked异常是必须捕获或者抛出的,也就是一定要进行处理的。
unchecked要么是不能被捕获的,要么是不应该出现的。
黑盒测试用例设计
黑盒测试是针对输入输出进行测试,关键是等价类划分
输入是一个范围,则定义1个有效和2个无效等价类
输入是特定值,则定义1个有效和2个无效等价类
输入是集合的成员,则定义1个有效和1个无效等价类
输入是布尔型,则定义1个有效和1个无效等价类
(这是PPT的原话,我是真没理解啥意思,有知道的小伙伴可以留言告诉我啊!!!)
注释写测试策略
看!像这样: