Questions tagged «code-quality»

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

1
是否有关于注释源代码对软件质量,可维护性和开发人员生产力的影响的经验研究?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,以使它成为软件工程堆栈交换的主题。 6年前关闭。 我主张对源代码进行评论并记录软件产品。根据我的个人经验和观察,在必须开发软件或维护软件的过程中,对经过严格注释的源代码进行的工作以不同的方式帮助了我。 但是,还有一个阵营说评论最终毫无价值,或者其价值值得怀疑。许多不加评论的编码支持者认为: 如果一段代码写得很好,那是自我解释,因此不需要注释 如果一段代码不是不言自明的,则对其进行重构并使其变得不言自明,以便它不需要任何注释 您的测试套件就是您的实时文档 随着时间的流逝,代码和注释不同步,这成为令人头疼的另一个原因 敏捷表示工作代码比大量文档更重要,因此我们可以放心地忽略编写注释 对我来说,这只是教条。再次,我个人的观察是,由才华横溢,经验丰富的开发人员团队编写的软件最终最终会产生大量不言自明的代码。 同样,Java API,Cocoa API,Android API等表明,如果您要编写和维护高质量的文档,则可以实现。 综上所述,基于个人信念的有关文档优缺点的讨论以及对源代码的评论通常不会以良好的结局而无法得出令人满意的结论。 因此,我正在寻找有关软件文档(尤其是注释源代码)对其质量和可维护性及其对团队生产力的影响的影响的学术论文和实证研究。 您是否偶然发现了此类文章?如果有的话,结果如何?

6
哪个更易于维护-通过if / else或布尔表达式进行布尔赋值?
哪个将更易于维护? if (a == b) c = true; else c = false; 要么 c = (a == b); 我尝试在“代码完成”中查找,但是找不到答案。 我认为第一个更具可读性(您可以从字面上大声读出来),我也认为这使其更易于维护。第二个当然更有意义并减少了代码,但是我不确定它对于C#开发人员是否可维护(我希望在Python中会更多地看到这种用法)。

5
可以为单元测试重复代码吗?
我为类分配编写了一些排序算法,并且还编写了一些测试以确保算法正确实现。我的测试只有10行,其中有3行,但是3行之间只有1行更改,因此有很多重复的代码。将此代码重构为另一个可以在每次测试中调用的方法是否更好?然后,我不需要编写另一个测试来测试重构吗?有些变量甚至可以上移到类级别。测试类和方法是否应该遵循与常规类/方法相同的规则? 这是一个例子: [TestMethod] public void MergeSortAssertArrayIsSorted() { int[] a = new int[1000]; Random rand = new Random(DateTime.Now.Millisecond); for(int i = 0; i < a.Length; i++) { a[i] = rand.Next(Int16.MaxValue); } int[] b = new int[1000]; a.CopyTo(b, 0); List<int> temp = b.ToList(); temp.Sort(); b = temp.ToArray(); MergeSort merge = new MergeSort(); …

6
需要使我的代码对团队中的其他程序员更具可读性
我正在delphi中工作一个项目,并且正在为该应用程序创建安装程序,主要包括三个部分。 PostgreSQL安装/卸载 myapplication(使用nsi创建myapplication的安装程序)安装/卸载。 通过脚本(批处理文件)在Postgres中创建表。 一切正常运行,但是如果出现故障,我创建了一个LogToFileger,它将在过程的每个步骤中记录LogToFile, 如下所示 LogToFileToFile.LogToFile('[DatabaseInstallation] : [ACTION]:Postgres installation started'); 函数LogToFileToFile.LogToFile()This将内容写入文件。这工作得很好,但是问题是这使代码混乱了,因为它变得很难读取代码,因为一个ca只能LogToFileToFile.LogToFile()在代码中到处看到函数调用。 一个例子 if Not FileExists(SystemDrive+'\FileName.txt') then begin if CopyFile(PChar(FilePathBase+'FileName.txt'), PChar(SystemDrive+'\FileName.txt'), False) then LogToFileToFile.LogToFile('[DatabaseInstallation] : copying FileName.txt to '+SystemDrive+'\ done') else LogToFileToFile.LogToFile('[DatabaseInstallation] : copying FileName.txt to '+SystemDrive+'\ Failed'); end; if Not FileExists(SystemDrive+'\SecondFileName.txt') then begin if CopyFile(PChar(FilePathBase+'SecondFileName.txt'), PChar('c:\SecondFileName.txt'), False) then LogToFileToFile.LogToFile('[DatabaseInstallation] …


2
应用程序服务层调用数据库功能。架构不好?
场景: 堆栈:Java,Spring,Hibernate。 型号:客户端-服务器应用程序。 模式:模型-视图-控制器(MVC)。 服务层类具有三种行为: 一些服务在方法内具有业务规则,并将持久性委托给应用程序。喜欢: EntityManager.save(entity); 一些服务只是调用数据库函数(传递参数),例如: CallableStatement cls = con.prepareCall(“ {call databaseFunction(args)}”); 某些服务同时具有两种行为的方法。 我的问题: 让应用程序服务直接调用数据库功能有什么问题吗?这不是不好的做法吗?适用于这样的项目的架构模型是什么? 在同一服务中混合行为是否有问题?如交易和一致性? 在维护的情况下,这种封装是否使开发人员不清楚他也应该更改数据库中的功能?如何避免这种情况? 这种情况是否会在世界各地的其他应用程序中发生,或者仅仅是架构错误?

4
好的代码风格可在任何地方引入数据检查?
我有一个足够大的项目,我再也无法保持每个方面的头脑。我正在处理其中的许多类和函数,并且正在传递数据。 随着时间的流逝,我注意到我一直在出错,因为我忘记了将数据传递给不同的函数时数据必须具有的精确格式(例如,一个函数接受并输出一个字符串数组,另一个函数是我后来写的,接受保留在字典等中的字符串,因此我必须将正在使用的字符串从数组中的字符串转换为字典中的字符串)。 为了避免总是要弄清楚什么地方断了,我开始将每个函数和类都视为“孤立实体”,因为它不能依赖外部代码为其提供正确的输入,而必须自己执行输入检查(或,在某些情况下,如果数据格式错误,请重铸数据。 这大大减少了我花费在确保传递的数据“适合”每个函数上的时间,因为当某些输入不正确(有时甚至纠正)时,类和函数本身会警告我,而我不会必须与调试器一起遍历整个代码,以找出问题的根源。 另一方面,这也增加了整体代码。 我的问题是,此代码样式是否适合解决此问题? 当然,最好的解决方案是完全重构项目,并确保数据具有所有功能的统一结构-但是由于该项目不断增长,因此我最终将花费更多的时间并担心干净的代码,而不是实际添加新内容。 (仅供参考:我仍然是一个初学者,因此,如果这个问题太天真,请原谅;我的项目是使用Python。)

4
重做一个返回代表许多不同状态的整数代码的函数
我继承了一些糟糕的代码,其中包括以下简短示例。 这个特殊的反模式有名称吗? 有哪些重构建议? // 0=Need to log in / present username and password // 2=Already logged in // 3=Inactive User found // 4=Valid User found-establish their session // 5=Valid User found with password change needed-establish their session // 6=Invalid User based on app login // 7=Invalid User based on network …

2
单元测试和集成测试的代码覆盖率报告是分开的,还是两者都有一个报告?
应该为单元测试和集成测试提供单独的代码覆盖率报告,还是为两者提供一个代码覆盖率报告? 其背后的想法是,代码覆盖率使我们能够确保我们的代码已被尽可能多的测试所覆盖(无论如何,现在无论如何机器)。 拥有单独的报告更方便我们了解单元测试未涵盖的内容以及集成测试未涵盖的内容。但是这样一来,我们看不到总覆盖率。


5
如何在多个if-else中处理标志
我似乎经常在我的代码和其他代码中看到这一点。似乎没有什么比这更糟糕的了,但是它看起来可以做得更好,这让我很烦。我猜想一个case语句可能更有意义,但是变量通常不是一个很好的类型,或者根本不能与case语句一起使用(取决于语言) If variable == A if (Flag == true) doFooA() else doFooA2 else if variable == B if (Flag == true) doFooB() else doFooB2 else if variable == C if (Flag == true) doFooC() else doFooC2 似乎有多种方法可以“分解”,例如2套if-elses,其中一组在Flag == true时处理。 是否有“好方法”将其分解,或者如果这种if-else算法发生,通常意味着您做错了什么?

5
在这种情况下,坚持每个测试一个断言是否愚蠢的一致性?
我有一个正在测试的课程。该类具有一个功能:apply(List<IRule> rules, List<ITarget> targets); 在一个测试中,我想确保每个目标都已通过一个规则,例如: rule1.AssertWasCalled(fnord => fnord.Test(target1)); rule1.AssertWasCalled(fnord => fnord.Test(target2)); rule1.AssertWasCalled(fnord => fnord.Test(target3)); 在我看来,将自己限制在一条断言中就等于是妖精。在这个假设中我是否正确,还是可以通过其他方式断言每个目标实际上都已经过测试?

6
当您不熟悉语言时,如何评估代码质量?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 作为一个假设,如果我在.NET中工作时要面试某人以担任新的PHP开发人员职位,那么我如何确定他们提供给我的代码示例是否高效且质量良好? 换句话说,如果您不熟悉该语言,评估程序员代码的最佳方法是什么?

5
测试大型应用程序的方法
我有一个很大的PHP应用程序。通常有2-3个开发人员全职从事这项工作,而现在我们正在进行更改并创建错误(咳嗽功能!)。每个人说的软件并不复杂,只是发生了很多事情(35个控制器,大约相同的型号,等等)。 即使小心,更改此视图(更改元素上的id)也很容易破坏在某些特殊条件下(单脚站立时注销)发生的ajax查询。 首先想到的是单元测试,但是我们在另一个应用程序上进行了尝试,很容易忘记它们/或花更多的时间编写测试然后进行测试。我们确实有一个临时环境,可以在上线之前检查代码。 也许我们需要兼职Q / A人员? 任何人都有任何建议/想法。

7
从能够编写代码到成为一名优秀的开发人员,我该如何发展?
我对如何从能够编写脚本(bash,awk)和编写简单的应用程序(c,php,python)到设计和开发更大,更复杂的软件缺乏具体的解释感到沮丧。似乎一方面有编程语言书籍,另一方面有专为程序员团队设计的软件工程/项目管理书籍。 我都读过很多。我已经阅读过XP / Agile经典著作,并对软件开发过程有不错的理论理解。我喜欢阅读别人的代码,可以很好地遵循它。但是,当我对一个项目有一个想法或想从“问题/需求在这里”到“解决方案在这里”时,我的脑子一片空白,我不知道从哪里开始。 我只是破解吗?对于没有团队合作或大型软件公司的个人开发人员,是否有任何结构化的工作流程?我真的不希望获得PMP或在软件公司工作。我只是在寻找有效,高效,实用的工作流程。

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.