gpt4 book ai didi

python - 在您的应用程序中识别 “sensitive”代码

转载 作者:行者123 更新时间:2023-12-03 03:17:16 26 4
gpt4 key购买 nike

希望提高相当大的Python项目的质量。我对PyLint给我的警告类型感到满意。但是,它们太多了,很难在大型组织中执行。我也相信,关于下一个错误的发生位置,某些代码比其他代码更关键/更敏感。例如,我想花更多的时间来验证100个模块使用的库方法,而不是2年前上一次接触并且可能不在生产中使用的脚本。知道经常更新的模块也是很有趣的。

是否有人熟悉用于Python的工具或其他有助于此类分析的工具?

最佳答案

您的问题类似于我在SQA https://sqa.stackexchange.com/a/3082回答的问题。这个问题与Java有关,这使该工具更容易一些,但是下面有一些建议。

其他许多答案表明,没有适用于Python的良好运行时工具。我对此有以下不同意见:

  • 覆盖率工具效果很好
  • 根据我在Java工具方面的经验,Python中的静态和动态分析工具要比强类型化的动态性较弱的语言弱,但是的工作原理足以为您提供良好的启发式方法。除非您使用大量异常的动态功能(包括添加和删除方法,拦截方法和属性调用,使用import进行播放,手动修改 namespace )-在这种情况下,您遇到的任何问题都可能与这种动态性有关。 。
  • Pylint拾取了更简单的问题,并且不会检测到动态类/实例修改和修饰符的问题-因此,度量工具不测量这些
  • 并不重要
  • 在任何情况下,可以有效地集中精力的地方远不止是依赖图。

  • 选择代码的启发式

    我发现选择改进代码有很多不同的考虑因素,它们既可以单独工作,也可以一起工作。请记住,起初,您需要做的只是找到富有成效的工作缝-您无需在开始之前就找到绝对糟糕的代码。

    用你的判断。

    经过一段代码库循环之后,您将拥有大量信息,并且可以更好地继续您的工作-如果确实需要做更多工作。

    也就是说,这是我的建议:

    对企业来说是高值(value):例如,任何可能使您的公司付出大量金钱的代码。其中许多可能是显而易见的或众所周知的(因为它们很重要),或者可以通过在启用了运行时分析器的系统上运行重要用例来检测到它们。我使用 Coverage

    静态代码指标:有很多指标,但与我们相关的指标是:
  • afferent couplings 。这是许多其他文件所依赖的代码。虽然我没有直接输出此结果的工具,但snakefood是将依赖项直接转储到文件的好方法,每个依赖项一行,每行都是传入和传出文件的元组。我讨厌这么说,但是从这个文件计算传入耦合值是一个简单的练习,留给读者。
  • 较高的McCabe(循环)复杂度:这是更复杂的代码。尽管我没有使用过PyMetrics,但它似乎可以产生这种效果。
  • 大小:通过使用可视化工具查看项目的大小(例如https://superuser.com/questions/8248/how-can-i-visualize-the-file-system-usage-on-windowshttps://superuser.com/questions/86194/good-program-to-visualize-file-system-usage-on-mac?lq=1,Linux可以在Filelight上使用KDirStat)来获得令人惊讶的信息。大文件是一个很好的起点,因为修复一个文件可修复许多警告。

  • 请注意,这些工具是基于文件的。因为您提到项目本身有数百个模块(文件),所以这可能是足够好的分辨率。

    经常更改:经常更改的代码非常可疑。该代码可以:
  • 历史上有很多缺陷,并且根据经验可能会继续这样做
  • 正在接受功能开发的更改(VCS中的修订版本很多)

  • 使用VCS可视化工具(例如本答案后面讨论的那些工具)查找变化的区域。

    未发现的代码:测试未涵盖的代码。

    如果您运行(或可以运行)单元测试,其他自动测试和具有覆盖率的典型用户测试,请查看无覆盖率的软件包和文件。没有覆盖范围有两个逻辑原因:
  • 该代码是必需的(并且很重要),但是根本没有经过测试(至少是自动测试)。这些地区是极高风险的
  • 该代码可能未使用,可以删除。

  • 询问其他开发人员

    您可能会对与长期服务的开发人员喝咖啡后收集到的“气味”指标感到惊讶。我敢打赌,如果有人清理代码库中只有最勇敢的灵魂才能进入的肮脏区域,他们会感到非常高兴。

    可见性-检测随时间的变化

    我假设您的环境具有DVCS(例如Git或Mercurial)或至少具有VCS(例如SVN)。我希望您也使用某种问题或错误跟踪器。如果是这样,则有大量可用信息。如果开发人员可靠地 checkin 了注释和问题编号,那就更好了。但是,您如何可视化和使用它呢?

    尽管您可以在单个桌面上解决问题,但最好使用 Jenkins之类的工具来设置持续集成(CI)环境,这是一个好主意。为了使答案简短,我将从现在开始假设 Jenkins 。 Jenkins附带了大量的插件,这些插件确实有助于代码分析。我用:

    带有JUnit测试输出的
  • py.test,由JUnit测试报告Jenkins插件
  • 获取
  • CoverageCobertura plugin
  • SLOCCountSLOCCount plugin
  • Pylint和Violations plugin
  • 显然有一个McCabe (cyclometric) complexity for Python插件,尽管我没有使用过。当然看起来很有趣。

  • 这使我可以看到随时间变化的变化,并且可以从那里深入了解。例如,假设某个模块中的PyLint违规行为开始增加-我有增加的证据,并且我知道发生这种情况的包或文件,因此我可以找出牵涉到谁并与他们进行交谈。

    如果您需要历史数据并且刚刚安装了Jenkins,请查看是否可以运行一些从项目开始就开始的手动构建,并及时进行一系列跳转直到现在。您可以从VCS中选择里程碑发布标签(或日期)。

    如上所述,另一个重要的领域是检测代码库中的变化轨迹。我真的很喜欢 Atlassian Fisheye。除了非常擅长在任何时间搜索提交消息(例如,错误ID)或文件内容之外,它还使我可以轻松查看指标:
  • 目录和子目录
  • 的线数
  • 在任何时间或特定目录和/或文件中的提交者
  • 按时间和位置在源代码中的提交模式
  • 关于python - 在您的应用程序中识别 “sensitive”代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12614131/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com