Questions tagged «code-quality»

有关编写高质量代码的最佳做法的问题。

16
否则块会增加代码复杂度吗?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 5年前关闭。 这是一个非常简化的示例。这不一定是特定于语言的问题,我想请您忽略函数编写的许多其他方式以及可以对其进行的更改。。颜色是一种独特的类型 string CanLeaveWithoutUmbrella() { if(sky.Color.Equals(Color.Blue)) { return "Yes you can"; } else { return "No you can't"; } } 我遇到的很多人,ReSharper和这个人(其评论提醒我我一直想问这个问题已经有一段时间了)建议重构代码以删除else留下的代码块: (我不记得大多数人所说的话,否则我可能不会问这个) string CanLeaveWithoutUmbrella() { if(sky.Color.Equals(Color.Blue)) { return "Yes you can"; } return "No you can't"; } 问题:不包括else块会导致复杂性增加吗? else通过说明两个模块中的代码直接相关的事实,我给人的印象更直接地表明了意图。 另外,我发现我可以防止逻辑上的细微错误,尤其是在以后对代码进行修改之后。 以我的简化示例的这种变化形式为例(or由于这是故意简化的示例,因此请忽略运算符): bool CanLeaveWithoutUmbrella() { if(sky.Color != Color.Blue) { …

1
是否可以使用Jester for Java这样的变异测试工具替代现代产品?
“为什么您可以肯定地知道为什么您的测试很好呢?有时Jester告诉我我的测试是密闭的,但是有时发现的变化却是突然的。强烈推荐。”-肯特·贝克(Kent Beck) 但是我看到在stackoverflow中甚至没有一个名为“ Jester ” 的标签。那么,对于Jester的现代替代品是什么?除了从Cobertura和Clover等工具的代码覆盖范围中找到统计信息之外,如何确保编写的单元测试牢不可破?

5
如果不存在,那么在get中创建某些东西是不好的编码习惯吗?
因此,我有一个Web服务,该服务具有类似的功能getAccount,如果有该服务,它将在帐户中返回标识符,否则将引发异常。如果抛出的异常与获取信息相同,则客户端将始终希望创建一个帐户。 我正在为客户端创建一个便利库,该客户端将处理内部的所有webservice调用,因此他们不需要知道如何自己进行调用。 我想知道的是,如果我要创建一个getAccount(accountName)可以在帐户存在时获取该帐户的帐户,如果不创建该帐户并返回信息,那是一件不好的事情吗?我应该将其留给客户端来处理异常还是将其命名为诸如getOrCreateAccount之类的东西?有关系吗? 在get操作中创建内容是不好的做法吗?

5
描述性命名与80个字符行的比较[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 6年前关闭。 我经常听到这两种有价值的编程实践:(1)代码行应少于80个字符,并且(2)为变量,方法,类等使用描述性名称。我理解这两个建议的含义,它们似乎常常是彼此权衡的。如果我将代码的字符数保持在80个字符/行以下,那么最终我将使用较少的描述性名称(特别是在Python中,每个缩进均计为4个字符),但如果使用的描述性名称较多,则最终将使用80个字符以上的行。 因此,我的问题是,如果必须做出选择,那么遵循这两个建议中哪个更重要?我想作为一个独立的(业余爱好者)程序员来这件事,但更重要的是,从一个为大公司工作的软件工程师的角度来看。

5
函数可以修改参数吗
我们有一个包装Linq To SQL的数据层。在此数据层中,我们有此方法(简化) int InsertReport(Report report) { db.Reports.InsertOnSubmit(report); db.SubmitChanges(); return report.ID; } 在提交更改时,将使用数据库中的值更新报告ID,然后我们将其返回。 从主叫方看起来像这样(简化) var report = new Report(); DataLayer.InsertReport(report); // Do something with report.ID 查看代码,作为一种副作用,已经在InsertReport函数内部设置了ID,然后我们忽略了返回值。 我的问题是,我应该依靠副作用,而是做类似的事情。 void InsertReport(Report report) { db.Reports.InsertOnSubmit(report); db.SubmitChanges(); } 还是应该防止它 int InsertReport(Report report) { var newReport = report.Clone(); db.Reports.InsertOnSubmit(newReport); db.SubmitChanges(); return newReport.ID; } 甚至会 Report …

7
内部代表,投票和徽章会鼓励良好的编程习惯吗?
只是大声思考-我们的程序员喜欢所有这些投票/徽章/代表的东西,因此可以将这样的方案引入公司代码审查流程中,以鼓励更好的编码。 就像是 您(或代表您的其他人)可以发布评论(可以是摘要,单次提交或一系列评论)以进行代码评论 其他人可以对此发表评论(类似于SE中的答案) 可以提供/建议使用徽章(有些会很不错,有些会很糟糕,例如“ Comment Desert”(评论沙漠)等等) 您可以对代码本身以及注释和徽章(例如,如果有人建议使用徽章而您同意/不同意),则可以上下投票。 这样的计划的目的是 引入一些乐趣以鼓励使用代码审查 提高质量(在此方案中,代码审阅者和审阅者都可以学习) 减少代码审查引发“自我战争”的机会 提供一些指标以帮助衡量个人表现 能行吗?有什么想法吗?

8
还有其他人有重构问题吗?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 6年前关闭。 看起来,在我编写了大量代码之后,我感到焦虑不安,好像我没有以最好的方式来完成它,而我最终却不断地在项目上重构和花费太多时间,或者从未得到过有时候做。这会发生在其他任何人身上吗?您如何处理呢?

8
如果您学习了软件的形式化方法,您发现它有多有用?
如果您已经接受过使用形式化方法(FM)进行编程的培训,则: 您发现它有用吗? 您的FM培训涉及什么(例如一门课程,一本书)? 您使用什么调频工具? 与不使用FM相比,它在速度/质量上有什么优势? 您使用FM创建哪种软件? 如果您现在不直接使用FM,至少值得学习吗? 我很想听到在这个社区中可以找到的尽可能多的FM经验/观点。我开始阅读它,并想了解更多。 背景 编程和软件开发/工程是地球上最新的人类技能/专业,因此,该领域并不成熟也就不足为奇了-在我们领域的主要输出中显示出来,因为代码通常很晚且容易出错。平均编码和顶级编码器之间的生产率差异很大(至少10:1)也表明了行业的不成熟。这些令人沮丧的事实已在文献中得到了很好的报道,并被史蒂夫·麦康奈尔(Steve McConnell)的《密码大全》(Code Complete)等书所介绍。 软件/ CS中的主要人物(例如,已故的E. Dijkstra)已提出使用形式化方法(FM)来解决错误的根本原因(其中之一):编程中缺乏数学上的严格性。例如,迪克斯特拉(Dijkstra)提倡学生共同开发程序及其证明。 与美国相比,FM在欧洲的CS课程中似乎更为普遍。但是在过去的几年中,新的“轻量级” FM方法和诸如Alloy之类的工具引起了一些关注。FM仍远不是行业中的常用方法,我希望在此获得一些有关原因的反馈。 更新资料 截至目前(2010年10月14日),在下面的6个答案中,没有人明确提出要在“现实世界”作品中使用FM。我真的很好奇有人是否可以并且愿意。也许FM确实说明了学术界(FM是未来!)和行业(FM几乎没有用)之间的鸿沟。

9
如何防止深凹痕?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 3年前关闭。 我可以采取什么步骤和措施来防止代码中的深缩进?

6
在C语言中,代码复制是否必不可少?
我是C的新手,我想知道在编写通用数据结构和C时,代码重复是否必不可少? hash map例如,我可以尝试编写一个通用实现,但是我总是发现最终结果很混乱。我还可以针对此特定用例编写专门的实现,使代码清晰易读,易于调试。后者当然会导致某些代码重复。 通用实现是规范,还是针对每个用例编写不同的实现?

3
将代码指标与错误密度相关联的实验
我想知道是否有人进行了一些将代码量度(SLOC,循环复杂度等)与面向对象应用程序中的错误密度相关联的实验。 我不是在寻找只证明或不证明相关性的实验,而是在两者上。我并不是试图找到一个灵丹妙药,因为我相信项目的错误密度可能与给定项目或团队的一个或多个指标相关,并且该相关性在项目/团队的整个生命周期中可能会发生变化。 我的目标是 测量2-3个月内所有有趣的指标(声纳中已经有很多)。 找到一个与新错误数量相关的指标。 进行根本原因分析以检查为什么会发生这种情况(例如,我们是否缺乏某种设计技能?)。 提高技能并衡量变化的两次迭代。 冲洗并从2开始重复。 如果您没有任何经验,但记得看过有关此主题的论文/博客,希望与您分享。 到目前为止,我已经找到了以下链接,其中包含有关此主题的一些信息 错误是否存在于复杂代码中?-只是演示文稿中的幻灯片。 变更和错误:挖掘和预测开发活动 -只需滑动演示文稿即可。最重要的是,依赖关系越多,发生错误的几率就越高(我认为这是很普遍的规则)。 失败是一个四个字母的词 -关于错误和指标之间相关性的天堂。

10
从长远来看,外包代码会更昂贵吗?它会损害代码质量吗?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 2年前关闭。 已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 我知道有一家公司拥有像样的软件产品的知识产权,并且每年从许可中获得可观的收入。但是,主管(非技术人员)抱怨开发团队的维护成本,因为它严重影响了利润率,并且正在考虑将特定模块的开发外包给收费较低的其他国家。 就个人而言,从长远来看,我认为这不会是更具成本效益的解决方案。出现问题时,这可能会导致通信中断,此外,规格必须是不透水的,最终还是要花费更多时间。我认为,在团队合作中,沟通是关键-还是有一种有效的方法来进行这项工作?

6
我如何判断一个项目是否特别复杂,或者我刚开始才很慢?
我在大型项目上进展不大。源头是巨大的,有许多层物体,通心粉代码,多重继承的双钻石图,原始作者离开时冻结的半生不熟的功能,而且没人知道为什么如此设计很多东西。 我想任何有能力的程序员都会遇到一些麻烦,要想尽一切办法解决错误,完成未完成的工作并添加新功能。但是,我怀疑我会比典型的程序员慢。 我如何判断消息来源是否异常糟糕,我是否做到了任何人都能做到的,而消息来源对于这样的项目来说是典型的,而我只是机智或技能不足?

11
我应该如何管理具有不同技能水平的团队?
我将与我的一些朋友一起进行软件项目,并且被任命为技术主管。这些家伙根本都不是一个糟糕的程序员,但我确实比他们有更多的经验。我需要能够在团队中的每个人之间分配工作,同时还要确保我们不会互相踩脚。他们满足了使该项目成功所需的相对较高的质量和可伸缩性标准,而无需我审查他们所做的一切。 如何避免微管理的同时保持标准?是否足以制作一些图表,安排一些代码审阅并相信我将能够修复可能会破坏的所有内容,还是应该走TDD路线并编写明确的测试以使团队满意?

6
我们应该排除代码进行代码覆盖率分析吗?
我正在开发几个应用程序,主要是遗留应用程序。当前,它们的代码覆盖率非常低:通常在10%到50%之间。 自几周以来,我们与班加罗尔团队进行了周期性讨论(开发的主要部分在印度境外进行),以排除Cobertura的软件包或类(我们的代码覆盖率工具,即使我们当前正在迁移到JaCoCo)也是如此。 他们的观点如下:由于他们不会在应用程序的某些层上编写任何单元测试(1),因此应将这些层简单地排除在代码覆盖率范围之外。换句话说,他们希望将代码覆盖率度量标准限制为已测试或应该测试的代码。 同样,当他们为复杂的类进行单元测试时,由于在大型应用程序中所带来的好处-仅在代码覆盖率方面-不会被注意到。减少代码覆盖范围的范围将使这种工作更加明显。 这种方法的好处是我们将有一个代码覆盖率度量,它指示我们认为可测试的应用程序部分的当前状态。 但是,我的观点是我们在某种程度上伪造了数字。该解决方案是轻松实现更高级别代码覆盖率的简便方法。令我困扰的另一点是:如果我们显示从一个星期到另一个星期的覆盖率增加,我们如何分辨这个好消息是由于开发人员的良好工作还是仅仅是由于新的排除因素? 此外,我们将无法确切知道代码覆盖率度量中考虑的内容。例如,如果我有10,000行代码应用程序,且代码覆盖率达到40%,则可以推断出40%的代码库已经过测试(2)。但是,如果我们设置排除条件会怎样?如果现在代码覆盖率达到60%,我该如何准确扣除?我的“重要”代码库中有60%经过测试了吗?我怎么能够 就我而言,即使我们对此不太满意,我还是希望保留“真实的”代码覆盖率值。此外,借助Sonar,我们可以轻松地在代码库中导航,并知道任何模块/包/类的代码覆盖范围。但是,当然,全球代码覆盖率仍然很低。 您对该主题有何看法?您如何处理项目? 谢谢。 (1)这些层通常与UI / Java bean等有关。 (2)我知道那不是事实。实际上,这仅意味着我的代码库的40%

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.