问题标签 [software-quality]
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.
testing - 如何为我们的 QA 部门制定测试计划?
我们目前正在为我们的测试部门准备最新项目的新版本。我们显然希望他们遵循一个彻底的计划来测试我们的软件,并确保在发布之前将错误传回给我们(开发团队)。
在创建此测试计划时,是否有任何好的工具或方法可以遵循?
performance - 评估架构效率
您如何评价某个设计的效率?
你的变量是什么?
我能想到:
- 耦合
- 设计模式使用
- 语言习语使用。
- 可扩展性。
- 高生存能力。
- 代码重用。
- 灵活性。
- 对错误的鲁棒性。
- 可测试性。
- 设计对资源使用和内存的影响。
- 可移植性。
- 使用正确的编程范式。
- 设计对运行时效率的影响。
- 封装。
您将如何计算这些指标?
我听说过程序指标作为一种工具,但我不知道它们是什么以及如何计算它们。
我感谢任何愿意提供帮助的人。
编辑:这是我新生博客中关于该主题的博客条目。
c - Linux中的静态代码分析工具对比?
有没有人对 Linux 可用的静态代码分析工具进行过比较?以下工具的优点和缺点是什么:
- 林天,
- 疏,
- 夹板,
- 大鼠,
- 使用 -Wall 选项。
您是否认为仅使用其中一种工具就足够了?
我不是在寻找建议(我可以找到很多),而是在可用工具之间进行直接比较。
metrics - 软件质量指标
我想知道是否有人在用于衡量软件质量的指标方面有经验。我知道有代码复杂度指标,但我想知道是否有一种特定的方法来衡量它在其生命周期内的实际执行情况。我不是指运行时性能,而是对质量的衡量。也欢迎任何有助于收集这些的建议工具。
是否有测量来回答这些问题:
- 更改/增强软件有多容易,稳健性
- 如果它是一个足够通用/通用的软件,它的可重用性如何
- 有多少缺陷与代码相关联
- 是否需要重新设计/重新编码
- 这段代码存在多久了
- 开发人员是否喜欢代码的设计和实现方式
似乎其中大部分都需要与 CM 和错误报告工具密切相关。
unit-testing - 为什么代码质量讨论会引起强烈反响?
我喜欢我的代码井井有条,即正确格式化、可读、设计、测试、检查错误等。事实上,我对此很狂热。(也许甚至比狂热还多……)但根据我的经验,帮助代码质量的行动几乎没有实施。(我所说的代码质量是指您每天生成的代码的质量。软件质量与开发过程等的整个主题要广泛得多,而不是这个问题的范围。)
代码质量似乎并不受欢迎。根据我的经验,一些例子包括
可能每个 Java 开发人员都知道 JUnit,几乎所有语言都实现了 xUnit 框架,但在我所知道的所有公司中,只有极少数适当的单元测试存在(如果有的话)。我知道由于技术限制或紧迫的最后期限,并不总是可以编写单元测试,但在我看到的情况下,单元测试本来是一种选择。如果开发人员想为他/她的新代码编写一些测试,他/她可以这样做。我的结论是开发人员不想编写测试。
静态代码分析经常在小型项目中使用,但并没有真正用于强制编码约定或在企业项目中发现可能的错误。通常,甚至像潜在的空指针访问这样的编译器警告也会被忽略。
会议发言人和杂志会谈论很多关于 EJB3.1、OSGI、Cloud 和其他新技术,但很少谈论新的测试技术或工具、新的静态代码分析方法(例如 SAT 求解)、有助于保持更高质量的开发过程、如何一些令人讨厌的遗留代码被测试了,......(我没有参加很多会议,对于敏捷主题的会议来说,它可能看起来不同,因为单元测试和 CI 等在那里具有更高的价值。)
那么为什么代码质量如此不受欢迎/被认为很无聊?
编辑:
感谢您的回答。其中大多数涉及单元测试(并已在相关问题中进行了讨论)。但是还有很多其他的东西可以用来保持高代码质量(参见相关问题)。即使您无法使用单元测试,您也可以使用每日构建,在您的 IDE 或开发过程中添加一些静态代码分析,尝试结对编程或强制审查关键代码。
git - 持续集成工作流理念
在我工作的软件开发环境中,我们有一组开发人员都在同一个(Java)代码库中工作(目前使用 SVN)。我注意到人们希望经常提交他们构建的内容,而不会“破坏构建”。因此,正是出于这个原因,我正在研究像 Git 和 Mercurial 这样的工具,它们可以让分支,尤其是合并变得更加容易。
我看到的一件事是,如果开发人员提交了“错误代码”,那么每个人的代码都会被破坏。作为避免这种情况的一个想法,我想要一种拥有“中间单一功能”存储库的方法,它只是当前的“主控”,只有该单一新功能的一个变更集。这样的“中间单一功能”存储库可以在成为主要代码库的一部分之前进行自动测试(代码质量、单元测试、手动代码检查等)。
所以我想到的工作流程看起来像这样:
- 开发人员每天创建一个新功能并在本地提交。
- 一段时间后,开发人员完成并提交整个变更集以集成到“主”存储库中。
- 持续集成系统采用当前的“主控”,应用变更集并检查代码(合并冲突、PMD、Findbugs...)、运行单元测试、检查编码风格等。
- 如果 CI 系统判定为“错误代码”,则通知开发人员原因,开发人员必须修复上述问题。在这种情况下,主存储库保持不变。
- 如果 CI 系统决定“足够好”,则代码会到达“首席开发人员”或“代码审查员”,他们检查所选解决方案并批准或拒绝它。
- 然后将批准的变更集包含到主存储库中,并可供所有开发人员使用 rebase/merge 。
我对这种工作流程有一些疑问:
- 你认为这在实践中会运作良好(即这是一个好主意还是一个真正的脑残)?
- 你们中的任何人以前有过这样的工作吗?优点和缺点是什么?
- 是否有一个“准备好运行”的脚本/程序/工具/...可以在最短的时间内快速启动这样的工作流程(或这个想法的变体)?
谢谢。
背景说明:
大约 13 年前,我曾在一家公司担任开发人员,他们在内部构建了类似的工作流程,并且他们有两个夜间构建:
- “生产”版本:主要代码库
- '高级版本:包含所有更改文件的所有新提交版本的主代码库。
因为这都是基于 SCCS(锁定-编辑-解锁模型)的,所以无法“经常提交”,因此代码更改和所有其他类型的不良影响都会出现死锁。我正在寻找的主要是关于我当时使用今天更好的工具的好东西。
testing - 您如何确保相同的错误不会第二次潜入产品?
我理解它的简短答案是通过测试,但你仍然如何进行测试?您是修改测试用例以将错误包含为要运行的附加测试用例,还是只是验证错误跟踪系统中从最旧版本到最新版本的所有错误。
感谢您的回答。看来我的问题不清楚。我知道我们需要编写错误报告,修复错误并进行测试以进行修复验证。但是,该测试应该在哪个测试阶段进行,以便在下一个版本发布期间,我们肯定会再次重新运行测试,以确保没有新的更改重新引入错误。它应该接受回归测试还是应该接受针对特定项目的集成测试,或者我们应该只测试自 1.0 版以来的错误跟踪系统中的所有错误?
software-quality - 软件质量对应用程序开发人员真的很重要吗?*实际上*?
在实践中,软件质量对应用程序开发人员真的很重要吗?
我知道这个问题似乎是最愚蠢的问题。但是请看下面我为什么要问这个问题。
我喜欢这样的工程原理、模式,并一直在实施和享受。但现在我意识到,这些原则对 Application Developer 来说真的无关紧要,重要的是“开发时间”、“应用程序按预期工作”和“完成得有点晚,但没关系”。
我现在真的很困惑软件质量和原则对于应用程序开发人员的实际重要性。因此,在我的所有时间指南之后寻找实用的答案无法为软件质量影响组织和[设计代码质量的重要性][2]提供答案
有大量关于软件质量和软件工程的信息可用,但实际上它们是否在应用程序开发中得到实施?
我作为应用程序开发人员提出这个问题,而不是谈论操作系统、语言或编译器开发/创新。
谢谢大家的回复。让我补充更多关于为什么我首先问这个问题。
我也相信并认为在思考这些原则时应该毫不犹豫。我相信这是一门艺术,策略不能因事而变。
但是,如果您看到有关此主题的任何内容或说出此帖子,请注意诸如“取决于什么”之类的短语。现在实际的问题是,除了你自己,谁会直接受益于这样的质量代码,这也是你的圣洁、道德、伦理。
让我们举一个非常常见的例子;一个拥有数百万点击量的网站。最终用户很高兴,因为网站看起来很有吸引力并且他们得到了订单。管理层很高兴,因为开发/增强是在预算范围内完成的,并且所有功能都已实施。PM 很高兴,因为不知何故团队及时交付了它。Tech Lead 很高兴,因为所有异构子系统都在按预期进行通信,并且满足了基础设施限制。一个由 25 名开发人员组成的团队很高兴,因为所有错误都已修复,现在他们的代码正在运行;当然,他们很有信心,因为他们使用了类型安全的语言、出色的 IDE,并且他们会找到任何运行时错误的行号,因为到处都有 try catch 块来坚持它。
在这里,可以说,他们没有遵循任何模式或最佳实践。所以代码不可重用或逻辑层取决于数据格式或......但是对于下一次开发,会有新的预算,新的开发计划和开发人员获得的新任务可能与过去的任务不一致。
那么谁直接受益或必须通过遵循一些原则来强制消除这些,可能是通过在时间和预算方面支付一些额外成本?
那么谁在乎实际地遵循这些呢?每个人都知道它的理论重要性,但在实践中,它是“金手指”还是“很高兴拥有”功能或“必须拥有”的要求?如果它真的很重要,那么正如许多人所说,为什么预算或时间被赋予了最重要的意义,这意味着质量是次要的。
unit-testing - 部署伪装成程序的大型测试
如果有人创建了一个使用(单元)测试作为其逻辑的小型诊断内部 Web 应用程序,那么是否有这样做的正当理由?请记住,Nunit 也必须部署在该网站所在的任何位置。
我认为程序应该包含它们自己的逻辑和可能可重用的部分(如果有的话),但不能为它们的逻辑包装测试。测试的目的是验证代码逻辑。如果您说测试将成为代码逻辑,那么您是否不需要编写测试来验证测试?为什么这从根本上是错误的?
提示:因为现在你将所有这些测试串在一起并相互关联,这意味着它们不再依赖(?)。
software-quality - 开发人员应该问测试人员哪些面试问题?
我们即将进行一些面试,我们正在招聘质量保证职位。开发人员参与的目的是了解人员是否会与开发团队合作良好。
开发人员应该问 QA 人员最重要的问题是什么?我正在寻找实际问题而不是蓬松的开放性问题,你的想法?