Tests Unitaires软件工程罗马数字转十进制互换(代码内含法语注释)

Tests Unitaires软件工程罗马数字转十进制互换(代码内含法语注释)


在[Pil04]的启发下,我们建议在Java中尝试使用单元测试。为此,我们将创建一个类来管理罗马数字

1罗马数字介绍

在罗马数字中,有七个符号以不同的方式组合在一起以构成数字:
I=1
V=5
X=10
L=50
C=100
D=500
M=1000

构造更复杂的数字遵循以下规则:
-加法:
I为1,II为2,III为3。VI是6(5 +1),VII是7,VIII是8。
-倍数 (I,X,C和M)的符号最多可以重复3次。从四个开始必 须减去以下符号(满四个变减法) 因此:
4用IV(5-1)而不是IIII表示,40表示XL(50-10),XLI给出41,XLIV给出44。—同样,如果8是VIII,9是IX(10-9)而不是VIIII,因为I只能重复3次。因此,90是XC,900是CM.
- 符号“ 5”不能重复(满5就换符号),因此10总是用X(从不VV)表示,100总是用C(从不LL)表示
- 罗马数字从大到小写,从左到右选择:订顺序计算:DC为600(500 大左+ 100 小右),而CD为400(500-100)。CI为101,但CI无效(99写XCIX,(100-10)大左+(10-1)小右
代码必须遵守以下条件:
—只存在一种方法介绍用罗马数字表示数字;
—同样的有效的罗马数字只表示单个十进制数字;
—只能表示1到3999之间的数字(在此代码中);
0不存在;
负数不能表示;
—仅可以表示整数

2转换模块(两种转换算法)

看不懂图片没关系,直接看代码
(**算法1:**十进制数字转罗马数字,算法2:是罗马数字转十进制数字)
为了简化转换,“减”组合已添加到符号表中。此外,还提供了用于验证罗马数字的
正则表达式
。(见代码)
在这里插入图片描述
在这里插入图片描述

3Tests Unitaire 和 TDD

单元测试原理

单元测试旨在通过​​“黑匣子”方法在基本级别上测试功能(或方法),也就是说,人们仅知道要测试的功能的signature。因此我们测试了一个更具全局性的程序的独立功能单元。
大多数编程语言都有单元测试框架(framework) ,通常受Smalltalk框架SUnit的启发。在这类框架的架构中,我们区分实际测试的测试用例(Test Cases) 之间有区别,从这个角度来看,它们将与用例相关联。它们通常由类实现,测试是其方法。测试用例本身在测试套件 (tests suites)中分组在一起,从而可以测试所有的功能或类。
测试方法仅测试与特定规范相对应的案例的特定方面,如果结果与预期不符,则引发异常。验证是通过特定的方法(例如assertEqualsassertRaises等)完成的。同样,有许多断言库 bibliothèques d’assertion,它们提供使编写测试更加容易的功能。

实施

我们将遵循测试驱动开发 (TestDriven Development)原理,即也就是说,在编写这些功能之前先编写单元测试以测试这些功能。这是在敏捷方法中实现的原理之一。
要进行的测试(至少)如下:
成功的测试:
—为已知的罗马值提供正确的十进制值。
—为已知的十进制值输入正确的罗马值。
失败的测试:
—负值失败(引发异常)
—非整数值失败
—超出[1.3999]范围的值失败
—符号重复过多的值失败(即:I,X,C和M的符号最多可以重复3次。)
—具有重复成对的值失败(即:符号“ 5”不能重复)
—前值不正确的值失败(例如:VX 前大后小或XCX)
有效的测试:
—对于所有整数n∈[1,3999],fromRoman(toRoman(n))= n
—罗马数字大写。
1toRoman 表示返回大写字母
2如果我们不仅有大写字母和小写字母,fromRoman就会失败

4完成要求

想法是先编写测试,然后一点一点地实现功能,直到所有测试通过:
1.根据先前的规范执行所有单元测试(至少12个);
2.方法实施toRomanfromRoman,直到所有测试通过;
3.实现并测试java.lang.Number中定义的方法
4.使罗马数字与任何其他数字都可比(请参阅Comparable接口)。

本实验提供的模板使用Gradle工具[gradle]。build.grad配置文件定义了项目的任务和依赖项。在这里,这些任务是Java项目的标准任务,使用Java插件的任务是标准Java项目的任务就足够了,因为它会自动定义主要任务。指定的依赖项是JUnit [junit](它是用Java测试的执行框架)和Hamcrest [hamcrest](它是一个断言库)。
这些工具在本实验中仅以非常肤浅的方式呈现,因为它们提供的功能比简单实验中所提供的功能丰富得多。记住要看一下他们的文档!要运行测试,只需运行Gradle的test任务(在linux下**./gradlew test**)。
当然,gradle不是必需的,但是更容易。实际上,将库放在类路径中并使用java org.junit.runner.JUnitCore roman.RomanNumberTest运行测试(编译后)即可。
例如,如果库已安装在系统上:

export CLASSPATH=build\:/usr/share/java/hamcrest-all.jar\:/usr/share/java/junit4.jar
javac -d build src/*/java/roman/*.java
java org.junit.runner.JUnitCore  roman.RomanNumberTest

要走得更远,可以集成一个测试覆盖的工具,或code coverage(例如Jacoco [jacoco])。这种类型的工具可以分析测试的执行情况并测量实际测试的代码所占的百分比,并且可以通过Gradle的插件非常简单地使用它。
下载代码包链接:链接:https://pan.baidu.com/s/1HcB3-nSk23ojqjPvzw2gjw
提取码:jv2g
复制这段内容后打开百度网盘手机App,操作更方便哦

这是一次作业,分蛮高的,测试界面Tests.java可自行设置,代码可执行,以上均为对题目的了解和总结加翻译,在代码包里可自行下载
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值