为了简化我的工作,我想从Python 2.7.6迁移到Python 2.7.9 / 2.7.10。
我需要证明我的Python 2.7.10不会破坏我的软件"工作"使用Python 2.7.6
我按照porting python 2 to python 3
中描述的步骤进行操作我不能确定100%我的代码不会破坏,但我怎么能有信心?
例如,我是否应该查看在2.7.6和2.7.10之间修复的所有 Core和Builtins错误?如果我们使用这些方法,请搜索我的代码?
是否存在更好的策略?
100%的代码覆盖率是一个很好的解决方案,但是可能更难以获得比使用2.7.6和2.7.10之间的修改方法的50%覆盖率+ 100%代码进行测试。
答案 0 :(得分:1)
这是一个非常小的Python更新,几乎可以肯定不会破坏任何东西,即使没有上述步骤(Python 2到Python 3的迁移完全不同)。
至于证明它,好吧,没有任何数量的静态检查和阅读发布说明的帮助,因为它会告诉你,几乎可以肯定它是向后兼容的(无论如何这是最初的猜测)。
一种可能的方法是在虚拟机中使用Python 2.7.10重现您的生产环境(valgrind等可以帮助那里)并检查一切是否按预期运行。没有办法运行它是100%肯定。
提高覆盖率是一个好主意。尽管如此,即使使用Python 2.7.6完全覆盖,也不会告诉你它是否会破坏Python 2.7.10。
答案 1 :(得分:1)
我的回答不仅适用于Python,也适用于一般的软件开发。
首先,正如有人已经说过的那样,Python 2.7.10是“只是”a bug fixing release - 这意味着所有回归测试都在通过,并且不包含任何向后不兼容的更改。这也保证了函数签名不会改变,因此您的代码可能正常工作。由于Python源代码覆盖率很高,也可以说即使错误修复可能引入了一个错误,这已经被回归测试所覆盖 - 所以要么是新的错误,要么是回归测试没有覆盖(第一个并不意味着第二个。)
此外,从技术上讲,100%的覆盖率并非总是可行 - 通常90-95%是可行的。如果这还不够,您可以按照rth。的建议在本地环境中尝试不同的场景。
但是,请考虑导入您的库/模块并检查它们是否都支持Python 2.7.10。如果没有,这并不意味着你的项目不会起作用,但如果你使用的是一些低级C库,它们可能会破坏 - 所以要特别小心。
一般情况下,我建议您浏览the changes并通过导入的库。添加覆盖率总是好的 - 不仅仅是更新到新版本 - 所以我和其他用户一起说你绝对应该增加你的覆盖率。
答案 2 :(得分:1)
如dev-cycle演示文稿中所述:
为了澄清术语,Python使用了一个major.minor.micro命名法 用于生产就绪版本。所以对于Python 3.1.2 final,这是一个 主要版本3,次要版本1和微型版本2。
- 新的主要版本是特殊的;它们只有在认为有必要进行强烈不相容的变更时才会出现,而且计划时间很长 提前;
- 新的次要版本是功能发布;它们大约每18个月从当前的开发中分支发布;
- 新的微型版本是错误修复版本;它们大约每6个月发布一次,但如果有必要,它们可以更频繁地出现;他们 在维护分支机构准备
这意味着从微型版本更新到另一个不应该(理论上)破坏任何东西。 次要版本也是如此,它应该只添加向后兼容的功能。
考虑到python的使用范围,您可以确保进行了许多测试以确保这一点得到尊重。
但是,没有保证,但微型版的重点是错误修正,而不是引入新的错误。