软件设计中的理性主义与实证主义

159 阅读2分钟

理性主义与实证主义

有这样一个问题:如果仅仅依靠思考,是否足以让我们设计出复杂对象?
围绕这个问题,有两大源远流长的哲学派别————理性主义和实证主义。

理性主义者认为,人类天生具有良好的判断能力,即使偶尔会犯一些错误,也可以通过教育来完善。只要有良好的教育,成熟的经验以及足够多的仔细思考,设计者完全有可能创造出完美无瑕的作品,因此,设计方法学最主要的任务将归结于如何才能学会让设计变得完美无瑕。

实证主义者认为,人类的种种缺点是与生俱来的,这将导致他们不断犯错。人类所做的任何事情都将不可避免地烙上错误的印记。因此,设计方法学的主要任务是学会如何在实践中找出缺陷,从而在下一次迭代中提升设计的质量。

两种主义对软件设计的正确性保证

验证程序的正确性是一个非常浩大的工程,其复杂性不亚于构建程序本身。 从两种主义出发有各种手段。

理性主义

  1. 形式化证明,如图灵机、λ\lambda语言、类型系统等
  2. 人工审核代码,如组员之间的代码review
  3. 软件系统数学建模,如用排队论等工具进行系统性能建模设计

实证主义

  1. 雇佣测试人员,编写测试用例作为验收标准
  2. 螺旋迭代式开发,不断完善项目
  3. 将程序的生命周期内的行为作为日志输出收集

TDD—测试驱动设计

个人认为目前最好的两种主义结合的正确性验证技术。

实现方式

  1. 写一部分测试代码
  2. 写出使测试代码通过的业务代码
  3. 优化业务代码
  4. 循环上述过程

TDD的好处

  1. 强迫开发人员在开发前对软件设计进行良好的思考
  2. 加强对项目代码的掌控度,随时了解代码整体的健康状况
  3. 不惧怕需求变化,改动代码造成的影响能够及时反馈
  4. 留下的测试代码本身就很好的使用文档

总结

两种主义不是非此即彼的关系,测试与迭代过程不可或缺,但谨慎的思考同样大有裨益。