重构之后:工具的问题

架构守护

重构的过程中,我们也可以尝试将它引入到系统中使用。它可以作为我们的架构适应度函数,不断地见证我们架构的变化和成长 —— 以一种肉眼的方式持续演进。

架构守护测试

ArchUnit 是一个不错的架构守护框架。你可以尝试引入项目的架构中,

坏味道守护

我的意思是,只需要集成到持续构建中即可。

测试驱动开发

测试驱动开发适合于解决复杂的问题。

我并不是一个 TDD 的死忠粉,但是我发现 TDD 非常适合于解决复杂问题。在这个场景下,我有一堆事先准备好的 Test Bad Smell,它们拥有一些对应的检测规则,这些规则相互之间存在一些影响。因此,我将这些 Bad Smell 作为我的测试用例:

AssertionRouletteTest.java
ConditionalTest.java
ConstructorInitializationTest.java
DuplicateAssertTest.java
EmptyTest.java
IgnoreTest.java
MagicNumberTest.java
MysteryGuestTest.java
RedundantAssertionTest.java

于是,我可以写出我的第一个测试:

func TestTbsApp_EmptyTest(t *testing.T) {
	g := NewGomegaWithT(t)
	var codePath = "../../../_fixtures/tbs/code/EmptyTest.java"
	var result = buildTbsResult(codePath)
	g.Expect(result[0].Type).To(Equal("EmptyTest"))
}

对应的一步步完成出整个功能的代码。而后,我们就可以重构出理想的代码 —— 因为我们已经有了对应的测试。

下一节:我们把所有的问题都归到人的问题。