问题标签 [technical-debt]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
827 浏览

sonarqube - 技术债务公式未考虑复杂性

在 5.5 之前的 Sonarqube 版本中,可能会更改计算技术债务的方式以考虑复杂性,但在 5.5 之后我看不到如何更改它。您是否删除了此配置?

恕我直言,复杂代码中的修复成本比简单代码中的要困难得多。这是一篇文章,您可以在其中查看和比较两个类似项目,它们基于规模具有相似的技术债务,但基于复杂性具有完全不同的技术债务。此外,覆盖率正在影响这项措施;而且我认为当您有足够的测试和覆盖范围以确保您不会破坏任何东西时,修改代码会更容易。

在 sonarqube 文档中,用于计算技术债务比率的公式是:

但是补救成本是在每个规则上配置的固定时间量,不是吗?因此,它与您在代码中可以找到的复杂性无关。

这是一张图片,您可以在其中看到如何在版本 5.1.2 中完成此操作: 具有复杂性的技术债务

有没有办法在 LTS 或 6.x 版本中配置技术债务,以便像以前版本一样考虑复杂性?

如果没有,那在你的路线图中吗?您是否有任何参考表明复杂性或覆盖范围不会影响修复成本?

提前致谢。

注意:认知复杂性的新概念似乎很有趣,我们再次谈论复杂性,它会是一个很好的候选者。但是我还没有看到如何在Sonarqube 6.3.1中看到它,这可能吗?

0 投票
0 回答
30 浏览

sonarqube - Sonarqube 5.1.2 未显示技术部门

我们为我们的 java 和 scala 项目使用 sonarqube 版本 5.1.2。早期的 sonarqube 用于显示技术部门,可以在时间机器中看到,但到目前为止,它没有显示任何项目的技术部门。可能是什么这背后的可能原因,以便我可以大致了解它并开始着手解决这个问题。我们最近没有从任何版本迁移。

0 投票
1 回答
511 浏览

php - 在 PHP 中转换为命名空间

我目前作为 php 项目的学生工作,该项目从一开始就在增长,并且有大约 1800 个 php 文件。

问题是:它完全没有命名空间,也没有任何 PSR-4 等建议。这个技术债务很强大:)。

我们想使用作曲家(以及更多的树枝和一些库)并且遇到包括这个在内的问题(尤其是作曲家)。我认为这是因为composer-autoloader 中的__autoload()via被覆盖了?spl_autoload_register()

有没有一种好的快速的方法来开始集成命名空间而不重写整个项目?

0 投票
1 回答
359 浏览

java - 如何解决 sonaQube 中的技术债务?

我的 java 项目有技术债务,我需要在 sonarQube 中解决它们。有人可以指导我如何解决这些技术债务。

0 投票
1 回答
313 浏览

sonarqube - Sonarqube 5.6.6 LTS 的 SQALE 插件

我们正在尝试从 4.5.6 升级到 5.6.6 LTS。已经拥有 SQALE 的商业许可证。最新版本的 Sqale 插件 2.7 ( http://www.sonarplugins.com/sqale ) 不适用于 5.6.6。有 5.6.6 的版本吗?

0 投票
1 回答
1492 浏览

sonarqube - 新代码的技术负债率总是出现 0%

我在新代码上有一个与技术债务比率相关的问题。当我引入新代码气味时,我可以看到新代码上的债务增加了,但债务比率始终显示为 0。我尝试更改开发代码(10 ,15,20),但我仍然看到同样的问题。

我错过了任何配置吗

SonarQube 版本:5.6.6 和 6.7 也是。 在此处输入图像描述

0 投票
1 回答
104 浏览

python - Git:随着时间的推移将更改发布到主控

作为一个个人项目,我想检查不同的 python 库和项目(无论是专有的还是开源的)并分析代码在不同版本中随着时间的推移是如何变化的,以收集有关技术债务的一些信息(主要通过静态代码分析)。我正在使用gitpython库来执行此操作。但是,我正在努力过滤对master.

我使用从中提取提交哈希的位置过滤合并提交git.log("--merges", "--first-parent", "master"),并从所有存储库提交中过滤这些特定提交。

作为第二部分,我想在每个合并提交中获取所有更改的文件。我可以通过 git tree 访问 blob,但我不知道如何只获取更改的文件。

有没有一些有效的方法来实现这一点?谢谢!

0 投票
0 回答
506 浏览

python - 如何在 Django 中正确地短路中间件?

语境:

我正在开发一个带有遗留内容的 Django 1.10/Python2.7 应用程序,并且我正在准备其中的一部分以在不久的将来偿还一些技术债务。/api为此,如果请求的 URL 是要访问 API 新应用程序(路由),我需要在应用程序中使用的中间件链上放置一些逻辑,以绕过 Django 层下的一整套层。

我的想法是在 Django 中间件和项目的自定义中间件之间引入一个新的中间件(以下注释为“自定义中间件”,作为项目所具有的示例 - 总共大约 8 个中间件,其中一些进行了数十次调用到数据库,我还不知道删除它们或将它们变成需要它们的请求/视图的装饰器的含义)。

如果urlMIDDLEWARE/api.

正如他们在文档中所说,我尝试在 Django 中短路中间件链,但这对我不起作用。

我是如何工作的(但不理想):

我让它工作的方式是这样做(这不是他们在文档中所说的):

这是项目中预先存在的MIDDLEWAREsettings.py

我添加了新settings.py密钥:

为了避免应用PreExisting1MiddlewarePreExisting2Middleware对于以我开头的 URL 路由,/api我创建了一个基本的中间件类,如下所示:

然后我将它用作中间件的基类PreExisting1MiddlewarePreExisting2Middleware这样,如果所述 url 条件成立,它们就会短路。

这工作得很好,我在 shell 上收到一条很好的消息,说明哪些中间件被绕过了,如果需要也可以/应该记录。

现在,关于这个问题......

我的问题:

__call__关于如何通过在下面的方法和下面的 MIDDLEWARE 配置中使用正确的逻辑来做到这一点的任何想法?

来自文档的相关信息:见这里

中间件顺序和分层

在请求阶段,在调用视图之前,Django 按照它在 MIDDLEWARE 中定义的顺序自上而下地应用中间件。

你可以把它想象成一个洋葱:每个中间件类都是一个包裹视图的“层”,它位于洋葱的核心。如果请求通过洋葱的所有层(每层调用get_response将请求传递到下一层),一直到核心的视图,然后响应将通过每一层(以相反的顺序)在回来的路上。

如果其中一个层决定短路并返回响应而不调用其 get_response,则该层内的洋葱层(包括视图)都不会看到请求或响应。响应只会通过请求传入的相同层返回。

0 投票
1 回答
149 浏览

c# - 依赖注入和未使用的构造函数

所以我使用windsor依赖注入:

我的问题(例如)是在X类的构造函数中,我不能轻易看到使用了该构造函数。事实上,Visual Studio 告诉我它没有被使用:

0 篇参考文献

这有点烦人 - 很难发现死代码。

你如何解决这个问题?

0 投票
0 回答
11 浏览

javascript - 关于在 Javascript 中浏览嵌套结构的防御性语法替代方案的意见/反馈

最近我被带到了一个新的代码库,在那里我看到了很多这样的代码,几乎无处不在

引起我注意的是,由于该产品产生了大量的 $$$,我们确实需要避免运行时错误。所以这最终成为团队中的惯用语,每次你想要一个对象中的某些东西时,都使用上面的语法。

但正如您所想的那样,这并不是在任何地方都强制执行的(尤其是在这可能很重要的地方),更糟糕的是,它在我们已经验证对象形状的区域成为了一种习惯。

所以这是我的问题:你会建议什么来帮助改变一个采取这种低效习惯(虚假的安全感)的团队来防御性地检查每个加入。

这里有一些想法,但我很高兴听到您的故事和您的经验反馈。

一些想法:

  • go ts 或 babel 并使用可选链接 => 不会改变问题,但会(不是?)简化语法
  • 强制使用唯一的助手来安全访问(custom / lodash.get / ramda.pathOr, ...)
  • 教育团队了解镜头概念并使用这些概念
  • 在数据层和表示层之间添加一个强大的验证层
  • 展平嵌套对象并使用展平形式 ( { a: { b: 2 }, c: [3,4]} ==> { 'a.b': 2, 'c.0': 3, 'c.1': 4 })
  • ...