关于软件构造最后一部份(PPT212)的复习

Posted hzhhzh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于软件构造最后一部份(PPT212)的复习相关的知识,希望对你有一定的参考价值。

零、第二章一些言论

测试跟其他活动的目标相反:破坏、证错、“负能量”,再好的测试也无法证明系统里不存在错误

静态测试vs 动态测试:靠眼睛看vs 撸起袖子使劲干

测试优先的编程,先写测试会节省大量的调试时间

一、健壮性和正确性

健壮性:系统在不正常输入或不正常外部环境下仍能够表现正常的程度——对自己的代码要保守,对用户的行为要开放

正确性:程序按照spec加以执行的能力,是最重要的质量指标!

正确性倾向于直接报错(error),健壮性则倾向于容错(fault-tolerance)

二、Throwable、Error

包含异常和错误,错误:程序员通常无能为力,一旦发生,想办法让程序优雅的结束;异常:你自己程序导致的问题,可以捕获、可以处理

既然Error我们无能为力,那就转向关注我们能处理的Exception

P.S:一些错误类型:输入错误、设备错误、物理限制……

三、各种异常区分

1、运行时异常与其他异常——运行时异常:由程序员在代码里处理不当造成;其他异常:由外部原因造成

2、Checked and unchecked exceptions:编译器可帮助检查你的程序是否已抛出或处理了可能的异常

Unchecked异常也可以使用throws声明或try/catch进行捕获,但大多数时候是不需要的,也不应该这么做

如果客户端可以通过其他的方法恢复异常,那么采用checked exception;–如果客户端对出现的这种异常无能为力,那么采用unchecked exception;

异常类型大致如下图:

四、Checked异常的处理机制、自己的异常类

要么捕获(catch);要么抛(throws)

对于try—catch—finally,finally的内容无论如何都会被实现

抛出时要在方法后用throws xxx来声明,应遵守LSP原则且在规约中写明,一旦抛出异常,方法不会再将控制权返回给调用它的client,因此也无需考虑返回错误代码

可以编写自己的异常类,继承excption类

对于异常,尽量在自己这里处理,实在不行就往上传——要承担责任!

catch里面也可以抛出异常——更改exception的类型,更方便client端获取错误信息并处理

五、断言、防御性编程

最好的防御就是不要引入bug

尽量使用不变量、尽量避免表示泄露

断言:在开发阶段的代码中嵌入,检验某些“假设”是否成立。若成立,表明程序运行正常,否则表明存在错误。

——assert 表达式 : 信息;如果不满足条件就发出异常,后面的代码也不会运行(assertionerror)

断言表达式:约定俗成:参数顺序为(期望值,实际处理结果)eg:assertEquals(100,方法结果)

六、黑盒测试用例的设计——等价类划分、边界值分析

等价类划分:等价类满足自反,对称,传递

输入有效/无效等价类,还要测试约束条件,特殊情况

每个等价类里取一个数据出来作为测试用例,划分必须完备且无交集

边界值分析:假设大量错误发生在输入域的边界而非中央,作为等价类划分的一种补充

七、其余的一些点:注释的形式撰写测试策略、JUnit测试用例写法、测试覆盖度

软件构造复习——关于Java中的正则表达式

写在前面:

               写这篇博客是因为自己在复习“软件构造”这门课时,发现对正则表达式的相关知识掌握不足。所以写下该博,以便复习并巩固相关知识。如发现错误,请您指正,我将不胜感激。

               PS:本文关于正则表达式的知识深度是基于“软件构造”的要求。

 

正则表达式:

          前言:

                    正则表达式定义了字符串的模式。

                    正则表达式可以用来搜索、编辑或处理文本。

                    正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。

          特点:

                    1. 灵活性、逻辑性和功能性非常的强;

                    2. 可以迅速地用极简单的方式达到字符串的复杂控制。

                    3. 对于刚接触的人来说,比较晦涩难懂。

 

一、常见的

     

1.         将下一字符标记为特殊字符、文本、反向引用或八进制转义符。例如,"n"匹配字符"n"。" "匹配换行符。序列"\\"匹配"\","\("匹配"("。

2.    ^    匹配输入字符串开始的位置。

3.    $   匹配输入字符串结尾的位置。

4.    *   零次或多次匹配前面的字符或子表达式。

5.    +   一次或多次匹配前面的字符或子表达式。

6.    ?   零次或一次匹配前面的字符或子表达式。

7.   {n}   n 是非负整数。正好匹配 n 次。

8.   {n,}   n 是非负整数。至少匹配 n 次。

9.  {n,m}   Mn 是非负整数,其中 n <= m。匹配至少 n 次,至多 m 次。注意:不能将空格插入逗号和数字之间。

10.   x|y   匹配 xy

11.  [xyz]   字符集。匹配包含的任一字符。

12. [^xyz]  反向字符集。匹配未包含的任何字符。

13.  [a-z]   字符范围。匹配指定范围内的任何字符。

14. [^a-z]   反向范围字符。匹配不在指定的范围内的任何字符。

15.    d   数字字符匹配。

………………

………………(还有很多,但这些已足够)

 

二、应用点(针对课程)

1. 给定的字符串是否符合正则表达式的过滤逻辑(即"匹配");

2. 通过正则表达式,从字符串中获取想要的特定部分。

 

三、一些简单地例子(表达式)

1.匹配网址:    [a-zA-z]+://[^s]*

2.QQ号(至少5位,不以0开头):    [1-9][0-9]{4,}

3.((http|ftp|https)://)(([a-zA-Z0-9._-]+.[a-zA-Z]{2,6})

4.邮箱:^[a-zA-Z0-9_-][email protected][a-zA-Z0-9_-]+(.[a-zA-Z0-9_-]+)+$

 

写在后面:

          这些是我复习时所涉及到的一些知识(针对于考试,并未深入),感谢大家的指正!

 

以上是关于关于软件构造最后一部份(PPT212)的复习的主要内容,如果未能解决你的问题,请参考以下文章

软件构造复习——关于Git的一点复习

软件构造复习——关于Java中的正则表达式

软件构造(复习)——一些关于多线程的知识

软件构造知识复习----可理解性编程

哈工大软件构造复习——LSP原则,协变和逆变

软件构造复习