文章目录
前言
今天上了软构的第二节课,首先我先做一下课程内容的复习,然后再对今天所学的课程做一些思考与补充.
一、知识复习
首先老师先讲述了软件构造的后三个维度,如下图:
其中细红线框出来的就是本节课所讲述的三个.另外粗红线标注出的是我们应该着重注意的五个维度.
接下来老师又讲述了软件构造视图之间的转换.具体如下图:
这个部分我猜应该了解即可,并无太多需要思考的地方.
紧接着就是比较重要的评价软件质量的标准,大致分为外部标准与内部标准.外部标准就是影响用户使用的因素,而内部标准就是影响软件本身与其开发的因素.外部因素取决于内部因素.另外我学到了一个单词就是specification,这里是规约的意思,我感觉大概应该是用户的需求之类的东西,在代码中表现为@打头的注释,例子如下:
关于外部标准,大概分为如下几个方面:
1.正确性:最重要的质量指标
2.健壮性:针对异常情况的处理
3.可扩展性:应对用户变化的需求
这三点是最重要的方面,其他部分诸如及时性,可验证性,完整性等在本课程中不做过多要求.另外我注意到老师说到对于程序的优化不需要在早期开发阶段进行,这点要注意,要有整体架构观念.
关于内部标准,需要注意可读性与复用性,另外尤为重要的一点是模块化开发,注意代码块的尺寸.
有时我们不得不在各种标准之间做出折中,但是我们注意到正确性是至高无上的,任何情况下都必须保持程序的正确性
最后一部分我们学到了测试优先的编程.这个在之前是没有过的想法,但是确实能避免程序bug等问题的发生.在工业界,这种开发方式也已经大行其道.
在代码测试的时候显然不能选择全部输入样例,我们最需要做的就是选择最具有代表性的样例输入,使用集合论中等价类的思想可以让我们做到有目的地高效测试.
二、JUnit使用步骤
贴个链接先:戳这里看详细介绍
Junit是xUnit的一个子集,在c++,paython,java语言中测试框架的名字都不相同.
xUnit是一套基于测试驱动开发的测试框架.
其中的断言机制:将程序预期的结果与程序运行的最终结果进行比对,确保对结果的可预知性.
Eclipse中貌似自带有该外部库,但是我一直用的是idea.另外在第一天时自己从网站上下载了Junit4的jar包,也能正常工作.
新建一个类:Calculate,其方法可以进行基本的四则运算.
package com.fulisha.textjunit;
public class Calculate {
public int add(int a,int b){
return a+b;
}
public int substract(int a , int b){
return a-b;
}
public int cheng(int a,int b){
return a*b;
}
public int chu(int a, int b){
return a/b;
}
}
再新建一个测试类,注意各个测试方法中的assert断言
package com.fulisha.textjunit;
import static org.junit.Assert.*;
import org.junit.Test;
public class CalculateTest {
@Test
public void testAdd(){
assertEquals(6,new Calculate().add(3, 3));
}
@Test
public void testsubstract(){
assertEquals(2,new Calculate().substract(5, 3));
}
@Test
public void testcheng(){
assertEquals(15,new Calculate().cheng(5, 3));
}
@Test
public void testchu(){
assertEquals(2,new Calculate().chu(6, 3));
}
}
测试后的结果:
对此进行总结:
在测试中结果中关于Failure和error的解释
1.Failure 一般由测试单元使用断言方法判断失败引起的,这个报错,说明测试点发现了问题,即程序输出的结果和我们预期的不一样
2.error 是由代码异常引起的,它可以产生代码本身的错误,也可以是测试代码中的一个隐藏bug
测试用例不是用来证明你是对的,而是用来证明你没错.
总结:
@BeforeClass
修饰的方法会在所有方法被调用前执行,且该方法时静态的,所以当测试类被加载后就接着运行它,而且在内存中他只会存在一份实例,他比较适合加载配置文件(针对所有测试,只执行一次 )
@AfterClass
所修饰的方法通常用来对资源管理,如关闭数据库连接(针对所有测试,只执行一次 )
@Before和@After 会在每个测试方法前后各执行一次
@Test:测试方法,在这里可以测试期望异常和超时时间
@Ignore:忽略的测试方法
总结
总体来说这就是今天学习的全部内容,这两天计划把本周学习的内容先进行复习,然后再对下周的实验进行预习.