技术开发 频道

用Python编写干净 可测试 高质量的代码

  Pylint

                
% pylint highlight spy
No config file found, using default configuration
************* Module highlight
E:
89:HighlightDocumentOperations._doc_to_sentences: Instance of 'unicode' has no
    'tokenize' member (but some types could not be inferred)
E: 89:HighlightDocumentOperations._doc_to_sentences: Instance of 'ContextFreeGrammar'
    has no 'tokenize' member (but some types could not be inferred)
W:108:HighlightDocumentOperations._score_sentences: Used builtin function 'map'
W:192:HighlightDocumentOperations._multiple_string_replace: Used builtin function 'map'
R: 34:HighlightDocumentOperations: Too few public methods (1/2)

Report
======
69 statements analysed.

Global evaluation
-----------------
Your code has been rated at
8.12/10 (previous run: 8.12/10)

  代码的得分为 10 分制的 8.12 分,工具还指出了几处缺陷。pylint 是可配置的,很可能需要根据项目的需求配置它。可以参考 pylint 官方文档(见 参考资料)。对于这个示例,第 89 行上的两个错误源于外部库 nltk,两个警告可以通过修改 pylint 的配置消除。一般来说,不希望允许源代码中存在 pylint 指出的错误,但是在某些时候,比如对于上面的示例,可能需要做出务实的决定。它并不是完美的工具,但是我发现它在实际工作中非常有用。

  结束语

  在本文中,我们探讨了看待测试的方式如何影响软件的结构,以及缺乏面向测试的思想为什么会给项目带来致命的危害。我们提供了一个完整的代码示例,包括功能性测试和单元测试,用 nose 对它执行了代码覆盖率分析,还运行了两个静态分析工具 pylint 和 pygenie。我们没有来得及讨论的一个问题是,如何通过某种形式的连续集成测试使这个过程自动化。幸运的是,很容易用开放源码的 Java™ 连续集成系统 Hudson 实现这个目标。我希望您参考 Hudson 的文档(见 参考资料),尝试为项目建立自动化测试,它应该运行您的所有测试,包括静态代码分析。

  最后,测试不是万灵药,静态分析工具也不是。软件开发是艰难的工作。为了争取成功,我们必须时刻牢记真正的目标。不但要解决问题,而且要创建能够证明有效的东西。如果您同意这个观点,就应该明白过分复杂的代码、傲慢的设计态度以及对 Python 的强大能力缺乏尊重都会直接妨碍实现这个目标。

0
相关文章