core java day18 笔记 软件测试: 开发人员也要写测试代码。 网上流行的----XP开发(极限开发) 本章要点: 软件测试概述 软件测试分类 几种单元测试方法------程序员 组织软件测试-----测试人员 软件测试文档----90%是测试人员写,但也有程序员写的 软件测试的定义(1983,IEEE): “使用人工或自动手段来进行或测定某个系统的过程,其目的在于检验它是否满足规定的需求或是否弄清预期结果与实际结果之间的差别。 软件测试以检验是否满足需求为目标” 软件开发流程: 1、可行性分析 2、需求分析------>开发、测试,(与客户沟通,了解系统需要),一般由项目经理(PM)完成 3、概要设计------>分模块,定框架 4、详细设计------>类设计,接口设计 5、coding------->程序员 6、测试 7、部署 8、维护 一般把3,4合起来统称为设计,这部分可由项目经理、架构师或高级程序员来做 软件质量保证和软件测试不同-----测试只是一种手段 测试的目的: 寻找缺陷----找Bug(臭虫) 发现新的缺陷----换方法继续测 任何系统都不能保证没有缺陷,Bug永远存在,我们所能克服的Bug是致命Bug(严重Bug) 比如XP系统的RPC,冲击波和震荡波这两大病毒就是针对RPC的缺陷去攻击的。 软件测试的原则: 追溯根源 计划在先------测试计划(文档) 从小到大 不能穷举 正确认识软件测试: 软件测试不是程序测试------- 测试心态----开发(创建),测试(破坏) 测试的分量----大公司测试==开发,国内的小公司测试=0 规范(标准)针对整个行业,产品(比如XP),项目(比如一个聊天项目) 软件缺陷的来源: 编程错误------逻辑错误 软件复杂度 沟通 不断变更的需求 时间的压力 人员风险意识 缺乏文档 软件开发工具 总体分类: 静态测试(检查作业): 代码审查 代码分析 文档检查 动态测试(真正的测试): 结构测试(白盒) 功能测试(黑盒) 工程分类: 单元测试------程序员 集成测试------程序员或测试人员 系统测试------测试人员 用户测试------用户 几种单元测试方法: 边界值分析-----if,for循环临界点 语句覆盖------程序中的每一条语句都要运行到 判定覆盖-----比如>=,=<等, 条件覆盖 判定-条件覆盖 路径覆盖-------所有的分支都要运行到 用TestCase测试一个类-----根类 TestRunner ------运行类 TestSuite原理-----测试的一个套件 JUnit是什么? 开源的------ 模块 单元测试框架------*.java类 xUnit-----------HttpUnit---->网页 JUnit 的特点-------简单,开源,已成为测试的标准 www.JUnit.org-----老版本 junit.awtui.*: 提供了以AWT方式运行的JUnit的支持; junit.textui;提供了以文本方式运行junit的支持 下面四个包为常用包 真正支持| junit.extensions:提供了junit的一些扩展功能(例如对exception测试的支持); 测试的包| junit.framework:junit的核心包,提供了对单元测试的核心支持; junit.runner:用于启动junit测试的包; junit.swingui:提供了以SWING方式运行junit的支持;
TestRunner是用来启动JUnit的,显示界面,选用swing版本 测试类中的所有方法都采用test开头(必须是test开头,并且返回void) TestCase:这是一个测试类,要写自己的测试类可以extends TestCase 1、setUp()(初始化方法) 这是生命周期里最先调用的方法, 2、然后执行每个以“test”开头的方法 3、在执行完所有测试方法之后执行 tearDown() 方法,结束方法 TestSuite套嵌类: addTestSuite方法--------加测试类,组成一个套件 addTest(Test)方法 run(TestResult)方法 Junit提供了如下几种主要的断言方法: assertEquals 比较两件食物是否相等(基本类型或对象类型)(equals) assertTrue 对布尔值求值,看它是否为True assertFalse 对布尔值求值,看它是否为False assertNull 检查对象是否为null assertNotNull 检查对象是否不为null assertSame 检查两个对象是否为同一实例(==) assertNotSame 检查两个对象是否不为同一实例 写单元测试的步骤: 1、针对要测试的每一个类写一个测试用例(TestCase),在setUp方法中初始化要测试的类(new 要测试类的对象)。 在tearDown方法中把要测试的类的对象置为null。 2、逐一编写以"test"开头的方法(复杂过程) 3、新建套件类,再把所有的测试用例(TestCase)加入套件类。(eclipse加或手工加) Ant对项目的整合 JUnit用来测试 Ant的使用 主要用于对项目的整体构建\修改\部署等操作 完全自定义的make和build方式 主流的开发工具,如JBuilder\eclipse其实都是使用的ant 在eclipse目录下的plugins文件夹里可以找到Ant ANT_HOME= PATH=%ANT_HOME%\bin; ClassPath=%ANT_HOME%\lib; 写build.xml文件 <?xml version = "1.0" encoding="GB2312" ?> <!--一个项目,可包含很多任务组(target)--> <project default="main" basedir="."> <!--属性部分,可以写类似的全局变量--> <property name="src" value="src\test" /> <!--项目中的一个任务组,可包含很多任务(task:javac,java....)--> <target name="main" description="beginbuild"> <mkdir dir="classes" /> <!--编译--> <javac srcdir="${src};src" destdir=".\classes" /> <!--运行--> <java classname="test.Test"> <classpath> <pathelement path=".\classes" /> </classpath> </java> </target> <!--清除所有的class--> <target name="clean" description="begin clean"> <delete dir="classes" /> </target> <!--重新建立项目--> <target name="all" depends="clean,main" description="begin all"> </target> </project> liunx下弄build.xml,尝试 1.testant目录下的东西copy导ant/bin,要求ant和build.xml在同一目录下 2.进入到ant对应目录,可以看导build.xml. 3.chmod 777 ant 4.ant 5.替换下自己写的build.xml 6.ant 2.写build.xml,ant解析 3.ant配置环境变量 4.运行
如何制作可运行文件 1、先建起一个空文件夹 2、把所有的源文件拷贝到空文件夹 3、javac -d . * 编译此文件夹下源文件(先进入文件夹) 4、删除源文件(rm) 5、jar -cvf test.jar * 完成第一次打包 6、jar -xvf test.jar 解压 7、删除test.jar 8、改META_INF中的文件,加上Main-Class: MenuFrame (注意中间有空格),保存 9、jar -cvfM test.jar * 10、java -jar test.jar 可以运行 testant/src 选属性,作改名----右键refactor--->Rename 选属性,作封装 把new ActionListener提取成了private
重构--是指在不改变软件任何功能的前提下对代码进行修改,调整其结构,提高其可理解性,降低其修改的成本. 重构的基本思想就是集中精力使设计简化,并且在新的需求出现时提供一个持续发展(而非扩展)的环境. 重构是一项功能强大的技术,但需以微小的步伐修改程序才行.因为在重构时可能在你不经意之间引入了一些错误,尤其是我们在手工进行时更是如此. 重构的优点 1.可以改进软件的设计. 2.可以使你的代码看起来更易理解. 3.可以找出潜伏的臭虫. 4.可以帮助你提高变成的速度---在一次次的迭代过程中阻止系统腐败变质,减少在调试中所花的时间. 5.这个工具有太多太多的好处,它可以使我们更快速的开发软件,甚至还可以提高我们的设计质量. 利用eclipse重构代码(Refactor) 1.Encapsulate field(封装属性)--在类中存在一个public值域.将它声明为private,并提供相应的访问函数. 2.Pull Up Method(方法上移)--有些方法,在各个subClass中产生完全相同的结果.将该方法移至superClass. 3.Extract InterFace(提炼接口)--若个客户使用class接口中的同一子集.或者两个classes的接口有部分相同.将相同的子集提炼导一个独立的接口中.
|