3

我继承了一个基于 Java、基于 Web 的 7 年老产品,其中包含大约 750K 行代码。正如预期的那样,考虑到它的年龄,它不是基于 Maven 的结构,. Maven 用于构建和发布应用程序。但是,Maven 是为项目而生的,通常用于调用 Ant 脚本。

我想迁移到 Maven,因为在当前设置中加入任何新的(er)工具(如 Sonar、Hudson 等)都很麻烦。

我正在对小组进行民意调查,以询问进行此更改的好策略应该是什么?假设我能以某种方式获得时间和金钱来移动代码并将其 mavenized,那么测试没有任何功能由于 mavenization 而被破坏的有效方法是什么。不用说,我们不能依赖单元/集成测试,因为代码覆盖率低于 10%。

如果我在现有设置创建的战争和在 mavenization 后创建的战争之间做出区别,这两个战争是否应该相同(在大小和内容上)?如果是,这是保证没有功能被破坏的充分必要条件吗?

谢谢。

4

2 回答 2

1

首先,我可能会推荐 gradle,它似乎比 maven 更酷。除此之外,我认为您运行旧版本和新版本并比较它们的结果的计划是一个好主意。

话虽如此,为了能够继续前进,您需要运行某种集成测试,即使用 selenium 或 jweb 单元进行自动点击测试。

所以,我可能会先在 jenkins/hudson/bamboo 上建立并运行旧的构建,然后开始编写点击测试,然后开始使用构建。

我还建议有效地使用遗留代码,因为它将为您提供很多用于重构代码的好工具。

在测试不同的构建是否构建相同的东西时,我现在执行以下操作:

/opt/gradle/bin/gradle clean war && jar -tf build/libs/new.war  | sort > /tmp/gradle-war.txt && diff /tmp/ant-war.txt /tmp/gradle-war.txt

其中 /tmp/ant-war.txt 由

jar -tf old.war | sort | uniq > /tmp/ant-war.txt

通过这种方式,我可以很好地输出两个版本中发生的变化。

于 2012-04-19T17:24:01.243 回答
1

如果您在切换时使用 Maven 的标准文件夹结构,那么这两场战争可能不会完全相同。您可以更改超级 pom 以更改文件夹以匹配您拥有的文件夹,但这样做会破坏一开始就使用 Maven 的优势之一。我会坚持标准。

因此,无论内部结构如何,都需要在代码库外部进行测试以验证功能。Selenium 非常适合这种情况。

于 2012-04-19T17:41:27.210 回答