问题标签 [maintainability]
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.
php - Drupal:使用 Drush 更新不会改变更新状态
我已经更新了我的 drupal 安装和 drupal 模块,但是 admin/reports/updates 说 Drupal 版本仍然是 6.12。为了更新 drupal,我运行了 - drush updatecode - drush updatedb (这个只更新了模块,并且说代码仍然需要手动更新)。然后我上传核心,解压缩,允许覆盖旧版本并再次运行 - drush updatedb 以启用更改。尽管如此,admin/reports/status 显示的不是 6.13 版本,而是 6.12 并表示核心不安全。我什至最后运行了 update.php 脚本,但核心以及位于 admin/reports/updates 的模块仍然显示为红色。
使用 drupal shell (drush) 是更新的好习惯吗?为什么状态仍然显示为未更新?
for-loop - 对于循环构造和代码复杂度
我的小组正在对 for 循环构造进行一些讨论和强烈的感受。
我喜欢这样的循环:
但其他人似乎更喜欢布尔标志,如:
(并且,在语言允许的情况下,使用“for (int x = 0; ...”。)
第一种样式有一个更少的变量来跟踪和一个更简单的循环头。尽管以“重载”循环控制变量和(有些人会抱怨)使用 break 为代价。
第二种风格明确定义了变量的角色,但更复杂的循环条件和循环体(设置了 else 或 continue after found ,或循环平衡中的“if (!found)”)。
我认为第一种风格在代码复杂性上胜出。我正在寻找更广泛受众的意见。指向更容易阅读和维护的实际研究的指针会更好。“没关系,把它排除在你的标准之外”也是一个很好的答案。
OTOH,这可能是错误的问题。我开始认为正确的规则是“如果你必须打破一个 for,那真的是一段时间。”
执行前两个示例的操作,但行数更少。不过,它确实将 x 的初始化、测试和增量分成了三行。
.net - 我应该使用 Resharper 来整理其他人的代码吗?
我在工作中使用 Resharper。我的一些同事没有。
当我打开一些不是别人写的代码时,我的屏幕上的橙色量立即显而易见。
我不确定的是,我应该在多大程度上随意收拾那些在不知不觉中留下的烂摊子。对于我所看到的大部分内容,它是草率但无害的,如果我没有使用过 Resharper,它就不会真正跳出来。
我想我认为我的选择范围很广
1) 源代码更改历史对维护至关重要。尽可能少地改变,否则下一个人不会有希望弄清楚发生了什么变化。无论如何,谁在乎无法访问的代码,不必要地使用 .ToString() 等。
2)更改无意义的东西,如包含,修复方法文档注释等。编写它的人喜欢他的代码看起来像这样,所以让它保持在他不会抱怨的状态,但去掉一些不必要的橙色
3)橙色只是红色但更轻。F12 然后 Alt+Enter 直到绿色。
4)忘掉橙子,看那个怪物700线功能。这是什么1997?是时候忙碌起来了……如果您有时间,请将您的同事介绍给我们的好朋友兼导师福勒先生。
我倾向于在选项之间来回切换,这取决于我有多少时间、我现在对代码负责的程度以及代码看起来有多复杂(这通常会让我选择 1 或 4)。
似乎四个选项之一应该是我正在努力的一个,但我不知道是哪一个
java - Java注解的可维护性?
我的项目正在慢慢实现 Java 注释。一半的开发人员——包括我自己——发现使用注释做任何复杂的事情似乎增加了我们的整体维护负担。团队的另一半认为他们是蜜蜂的膝盖。
开发人员团队能够维护带注释的代码,您的实际经验是什么?
jquery - MS MVC 框架和 jQuery 是否适合长期存在的应用程序?
我正在开发一个基于 Web 的应用程序,该应用程序的生命周期至少为 6 年。应用程序交付后,很可能在该时间范围内不会对其进行修改。
我们正在考虑使用 asp.net MVC 框架和 jQuery,但我想知道这是否是一个不错的选择。由于 javascript、浏览器标准等发生了变化,客户可能不想在未来花费额外的时间和金钱。
将应用程序在未来 6 年内需要维护的可能性降到最低的最佳选择是什么?
java - 正则表达式的替代(流利?)接口的设计
我刚刚看到一个巨大的 Java 正则表达式,它让我对一般正则表达式的可维护性有所思考。我相信大多数人——除了一些糟糕的 perl 贩子——都会同意正则表达式很难维护。
我正在考虑如何解决这种情况。到目前为止,我最有希望的想法是使用流畅的界面。举个例子,而不是:
可以写这样的东西
在这个非常简短的示例中,创建正则表达式的常用方法对于任何有才华的平庸开发人员来说仍然很容易阅读。然而,想想那些用 80 个字符填满两行或更多行的诡异表达式。当然,(冗长的)流畅的界面需要几行而不是两行,但我相信它会更具可读性(因此可维护)。
现在我的问题:
你知道正则表达式的任何类似方法吗?
你同意这种方法比使用简单的字符串更好吗?
您将如何设计 API?
你会在你的项目中使用这样一个简洁的实用程序吗?
你认为这会很有趣吗?;)
编辑: 想象一下,可能存在比我们都没有从正则表达式中获得的简单构造更高级别的方法,例如
编辑 - 评论的简短摘要:
RegexBuddy - 花 30 欧元让你的代码可读(wtf?!这种产品的纯粹存在证明了我的论点是正确的 - 我们今天知道的正则表达式是一件坏事(tm))
Martin Fowler 的方法(仍然远非完美)
有趣的是,大多数人认为正则表达式会继续存在——尽管需要工具来阅读它们,聪明的人会想办法让它们可维护。虽然我不确定流畅的界面是最好的方法,但我相信一些聪明的工程师 - 我们?;) - 应该花一些时间让正则表达式成为过去 - 他们已经和我们一起工作了 50 年就足够了,你不觉得吗?
开放赏金
赏金将奖励给正则表达式新方法的最佳创意(无需代码)。
编辑 - 一个很好的例子:
这是我正在谈论的那种模式 -对第一个能够翻译它的人的额外荣誉 - RegexBuddies 允许(它来自 Apache 项目顺便说一句)授予chii和mez的额外荣誉:这是一个符合 RFC 的电子邮件地址验证模式 -尽管它的RFC822(参见ex-parrot.com),而不是5322 - 不确定是否有区别 - 如果是,我将奖励下一个额外的荣誉,以获得适合 5322 的补丁;)
javascript - 在 JavaScript 中编写多行字符串的最简洁的方法是什么?
它实际上并不需要添加换行符,只是一些可读的东西。
还有什么比这更好的吗?
refactoring - 在重构项目以提高可维护性时,要针对哪些内容?
我有一个正在处理的项目(大约 80K LOC),只要我小心不要破坏任何东西,我就有将近一个月的豪华重构和功能添加时间。话虽如此,我能做些什么来提高可维护性。请注意,该项目没有进行单元测试,我并没有真正计划为此添加单元测试,但是如果这是普遍共识,我会考虑它。
我应该寻找并考虑修改或重构以提高软件可维护性和质量的关键事项是什么?
编辑:我很清楚我需要单元测试。这不是我真正做过的事情,对于刚接触单元测试的开发人员(最好通过 VS2008 的单元测试框架)有什么好的资源?
unit-testing - 如何证明我的利益相关者和经理我的软件有效?
软件工程师在又一次充满压力的发布后会遇到什么?好吧,我们在小组中遇到的第一件事就是我们公开发布的错误。作为软件工程师,我们在紧张的发布后遇到的最大问题是意大利面条代码,也称为大泥球。
追求完美的时间和金钱很少,也不应该。为了生存,我们必须尽一切努力让我们的软件正常工作并按时推出。事实上,如果一个团队完成了一个有空闲时间的项目,今天的经理们可能会将其视为下次提供更少时间和金钱或更少人员的标志。
您需要在预算范围内按时交付优质软件
成本:架构是一项长期投资。支付账单的人很容易拒绝它,除非有一些切实的直接利益,例如税收减免,或者除非有多余的金钱和时间可用。这种情况很少见。更常见的是,客户需要一些明天可以工作的东西。通常,控制和管理开发过程的人根本不认为架构是一个紧迫的问题。如果程序员知道做工是无形的,而管理者无论如何也不想为此买单,那么一个恶性循环就产生了。
但如果真的是这样,那么每个长期的软件项目最终都会导致一大堆泥巴。
我们知道这并不总是会发生。怎么会?因为关于管理者不将架构视为紧迫问题的说法是错误的。至少现在。IT 领域的管理人员非常清楚可维护性是业务的关键。
业务变得依赖于驱动它的数据。企业已经严重依赖其软件和计算基础设施。有许多关键任务系统必须每周 7 天/每天 24 小时不间断运行。如果这些系统出现故障,则无法检查库存、无法支付员工工资、无法安排飞机航线等等。[..]
因此,寻求使系统远离大泥球的方法是企业的核心。该系统仍然是可维护的。该系统确实有效,并且您作为程序员可以证明它确实有效。您的经理是否问您今天是否完成了编码,她是否问您是否可以在今天完成具有修复 A、B 和 C 的版本,或者她是否问将要发布的软件是否真的可以工作?你证明它有效吗?什么?
现在我的问题:
我们必须通过哪些方式来证明我们的经理和/或利益相关者我们的软件有效?我们的软件单元测试的那些绿灯是否足够好?如果是,那岂不是只能证明我们的大泥球仍在做我们期望它做的事情吗?该软件是可维护的?你如何证明你的设计是正确的?
[稍后添加]
Chris Pebble 他在下面的回答是让我的团队走上正轨。质量保证绝对是我们正在寻找的东西。谢谢克里斯。与利益相关者达成一致的 QA 政策并不是我的团队正在寻找的合乎逻辑的结果。
后续问题是 QA 政策中应该包含哪些内容?
- 让我的利益相关者可以看到该 buildserver 的运行
- 让 buildserver 不仅“只是构建”,而且添加作为 QA 策略一部分的测试
- 我的利益相关者就我们的开发过程达成协议(开发人员相互审查代码是其中的一部分)
- 更多的..
更多信息:我领导的团队正在构建由其他软件团队使用的 Web 服务。这就是为什么一个破坏性的网络服务会立即花费金钱。当演示层团队的开发人员或实际测试人员无法继续前进时,我们会立即面临压力,必须尽快修复错误,这反过来又会导致快速破解。
[稍后添加]
感谢所有的答案。这确实是关于“信任”。如果利益相关者不信任该软件,我们将无法发布该软件,利益相关者正在使用使用我们 Web 服务的网站自己积极测试我们的软件。当出现问题时,我们测试人员的第一个问题是:是服务层问题还是表现层问题?这指示我制定 QA 政策,以确保我们的软件适合他们正在进行的测试。
因此,我(现在)可以设想与测试人员建立信任的唯一方法是: - 与当前的测试团队交谈,检查他们能够手动执行的测试(从他们的测试脚本和场景中)并确保我们的团队已经将这些测试作为单元测试与我们的网络服务进行了检查。在我们发布演示层团队必须集成的版本之前,这将是一个很好的“签收”起点。需要一些努力来澄清为所有这些场景创建自动测试需要一些时间。但是,确保我们构建的东西确实有效,这绝对是有用的。
maintainability - 强制使用牙套
作为我不久前写的代码标准文档的一部分,我强制要求“您必须始终为循环和/或条件代码块使用大括号,即使(尤其是)它们只有一行。”
例子:
如果你不支持单行,然后有人评论它,你就有麻烦了。如果你不支持单行,并且缩进在其他人的机器上显示不一样......你有麻烦了。
所以,问题:有充分的理由说明这将是一个错误的或不合理的标准吗?对此进行了一些讨论,但没有人能提供比“感觉难看”更好的反驳。