软件工程

针对在系统开发生命周期中工作的专业人士,学者和学生的问答

13
在存储库上定期运行代码格式化程序会是个坏主意吗?
我正在考虑创建一个cron作业,以检出代码,在其上运行代码格式化程序,如果有任何更改,则提交更改并将其推回。 大多数使用自动格式化程序的项目都将它们放在git钩子中,但是每隔几个小时自动执行一次会减轻每个开发人员安装git钩子的负担。 我仍然鼓励大家编写干净,格式正确的代码,也许我可以让系统在对他们编写的代码进行重新格式化后自动对开发人员执行ping操作,以便他们知道将来要做什么。

8
我应该记录我发现并修补的错误吗?
我认为这是一种常见情况:我测试一些代码,发现错误,对其进行修复,然后将错误修复提交到存储库。假设有很多人从事该项目,我应该首先创建一个错误报告,将其分配给我自己,然后在提交消息中引用它(例如“修复错误#XYZ。该错误是由于X和Y引起的。 Q和R“)?或者,我可以跳过错误报告并提交一条消息,例如“修复了在B时导致A的错误。该错误是由于X和Y引起的。由Q和R修复了该错误”。 什么是更好的做法?


8
命名问题:“ Isomething”是否应重命名为“ Something”?[关闭]
Bob叔叔在“ 干净代码”中有关名称的章节中建议您避免使用名称编码,主要是关于匈牙利表示法。他还特别提到I从接口中删除前缀,但没有显示此示例。 让我们假设以下内容: 接口的使用主要是通过依赖注入实现可测试性 在许多情况下,这导致与单个实施者具有单个接口 因此,例如,这两个应命名为什么?Parser和ConcreteParser?Parser和ParserImplementation? public interface IParser { string Parse(string content); string Parse(FileInfo path); } public class Parser : IParser { // Implementations } 还是在这样的单一实现案例中忽略该建议?

17
对于无法学习Git的开发人员,我该怎么办?[关闭]
语境 我的由8名工程师组成的团队目前正在过渡到Git(从Subversion进行),这是我们接下来的工作。我们有一些“经验更丰富”的工程师,他们发现很难拿起Git。尽管提供了用户手册,培训活动和白板会议,但我仍然被问到同样的琐碎问题。我们有两名初级顾问,他们在几天之内就完成了所有工作,这确实为这个问题锦上添花。这不是仅限于Git的模式,因此已经可见。 题 对于那些不会/不会学习的工程师,我尤其不满意-特别是拥有我们这里资深资历的员工。但是,我确实希望团队成功并建立出色的产品。我们正在使用集中化的Git Flow模型,我觉得所有新术语都使他们感到困惑。 我有什么办法可以帮助这些员工学习Git? Sourcetree是整个团队都在使用的客户端。
68 git  gitflow 

7
为什么要使用私有静态方法?
我只是想解决一个问题。与具有私有可见性的普通方法相比,拥有私有静态方法有什么意义? 我本来以为拥有静态方法的一个优点是可以在没有类实例的情况下调用它,但是由于它的私有性,甚至有一点是静态的吗? 我能想到的唯一原因是,它有助于从概念上理解类级别(而不是对象级别)上的方法。

5
在Python的类中将实例变量声明为None是一种好习惯吗?
考虑以下类别: class Person: def __init__(self, name, age): self.name = name self.age = age 我的同事倾向于这样定义: class Person: name = None age = None def __init__(self, name, age): self.name = name self.age = age 这样做的主要原因是他们选择的编辑器显示了自动补全的属性。 就我个人而言,我不喜欢后者,因为一个类将那些属性设置为毫无意义None。 哪种方法更好,原因何在?
68 python 

7
编写现有代码的测试
假设其中一个程序比较大(例如,在C#中为900k SLOC),所有程序都已进行了注释/记录,内容井井有条,运作良好。整个代码库由一个不再在公司工作的高级开发人员编写。所有代码都可以按原样进行测试,并且在整个过程中都使用IoC -出于某些奇怪的原因,他们没有编写任何单元测试。现在,您的公司希望分支代码,并希望添加单元测试以检测更改何时破坏了核心功能。 添加测试是一个好主意吗? 如果是这样,一个人怎么会开始这样的事情? 编辑 好的,所以我没想到答案会得出相反的结论。无论如何,这个问题可能不在我的掌控之中。我也阅读了“重复的问题”,并且普遍的共识是“编写测试很好” ...是的,但是在这种特殊情况下不太有用。 在考虑为遗留系统编写测试时,我并不孤单。我将保留有关花费多少时间以及新测试发现问题的次数(以及没有发现问题的次数)的指标。我会回来,并从现在开始大约一年后用我的结果进行更新。 结论 因此,事实证明,基本上不可能将任何形式的正统测试都添加到现有代码中。代码正常工作后,您显然无法对测试进行红灯/绿灯测试,通常通常不清楚哪些行为对测试很重要,也不清楚不清楚从何处开始,当然也不清楚何时完成。真的,甚至问这个问题都错过了编写测试的重点。在大多数情况下,我发现使用TDD重写代码实际上比解密预期的功能和追溯添加单元测试要容易得多。解决问题或添加新功能时,情况有所不同,我认为现在是添加单元测试的时候了(如下所述)。最终,大多数代码都会被重写,通常比您预期的要早-我采用这种方法

3
这是Mockito的reset方法的适当用法吗?
我的测试类中有一个私有方法,该方法构造一个常用Bar对象。Bar构造函数someMethod()在我的模拟对象中调用方法: private @Mock Foo mockedObject; // My mocked object ... private Bar getBar() { Bar result = new Bar(mockedObject); // this calls mockedObject.someMethod() } 在我的某些测试方法中someMethod,该特定测试也调用了我要检查的方法。类似于以下内容: @Test public void someTest() { Bar bar = getBar(); // do some things verify(mockedObject).someMethod(); // <--- will fail } 这将失败,因为模拟对象已someMethod被调用两次。我不想让我的测试方法关心方法的副作用getBar(),所以在末尾重置模拟对象是否合理getBar()? private Bar getBar() { Bar …
68 java  mocking 

5
为什么要将函数存储在python字典中?
我是python的初学者,我刚刚学习了一种涉及字典和函数的技术。语法很简单,看似微不足道,但是我的python感觉有点刺痛。有人告诉我这是一个深层的,非常Python化的概念,我不太了解它的重要性。有人可以给这项技术起个名字,并解释它为何/为什么有用吗? 该技术是当您拥有python字典和打算在其上使用的函数时。您在dict中插入一个额外的元素,其值是函数的名称。当您准备调用该函数时,可以通过引用dict元素而不是按名称引用该函数来间接发出该调用。 我正在使用的示例来自第2版的《学习Python的艰难方法》。(这是您通过Udemy.com注册时可用的版本;可惜的是,实时免费HTML版本当前是Ed 3,并且不再包含此示例)。 释义: # make a dictionary of US states and major cities cities = {'San Diego':'CA', 'New York':'NY', 'Detroit':'MI'} # define a function to use on such a dictionary def find_city (map, city): # does something, returns some value if city in map: return map[city] else: return …

4
函数式语言如何处理随机数?
我的意思是,在我阅读过的几乎所有有关函数式语言的教程中,都是关于函数的妙处之一,就是如果您两次调用具有相同参数的函数,那么总会得到同样的结果。 您究竟如何创建一个以种子为参数,然后基于该种子返回随机数的函数? 我的意思是,这似乎与功能方面的优势之一背道而驰,对吧?还是我在这里完全错过了什么?

9
Git应该用于文档和项目管理吗?代码应该放在单独的存储库中吗?
我正在为一个小组项目启动一个Git存储库。将文档与代码存储在同一Git存储库中是否有意义-似乎这与git修订流程的本质冲突。 这是我的问题的摘要: 如果将代码和文档都检入同一个存储库,Git修订样式会不会引起混淆?有经验吗? Git非常适合文档版本控制吗? 我不是在问总体上是否应该将修订控制系统用于文档编制,而是应该使用。 感谢您到目前为止的反馈!

7
是否有Bitbucket,Github,Kiln和类似DVCS浏览和管理工具的开源替代品?[关闭]
我知道提供DVCS浏览和管理的几种工具/服务,例如Bitbucket,Github,Kiln,SCM-Manager和Rhodecode。 但是,我正在考虑的用例是这样的: 任何源代码都必须位于雇主内部服务器上。 解决方案必须是开源的。 它应提供类似Bitbucket或Github的体验,包括项目Wiki,存储库浏览和管理以及社交编码方面(如代码审查)。 该解决方案应具有丰富的支持(如果不支持其他DVCS)。 其中只有SCM-Manager和RhodeCode可以接近,因为它们可以安装在您自己的服务器上并且是开源的。但是他们没有Bitbucket或Github经验。没有问题跟踪器或Wiki,并且用户界面虽然功能正常,但与Github或Bitbucket不相称。 我可以通过他们的存储库浏览器来接近Trac或Redmine,但不幸的是它们没有任何存储库管理功能。 是否有其他开源工具可以提供与Bitbucket,Github或Kiln类似的体验?

14
此反模式的名称?字段作为局部变量[关闭]
在我正在查看的某些代码中,我看到的东西在道德上等同于以下内容: public class Foo { private Bar bar; public MethodA() { bar = new Bar(); bar.A(); bar = null; } public MethodB() { bar = new Bar(); bar.B(); bar = null; } } 从逻辑上讲,该字段bar是局部变量,因为其值永远不会在方法调用之间持久化。但是,由于许多方法都需要类型的对象,因此原始代码作者刚刚创建了一个type字段。FooBarBar 这显然是不好的,对吧? 此反模式有名称吗?

22
遇到愚蠢的面试问题时您会怎么做?[关闭]
我正在面试一个“对我的Java技能太自豪”的人。 他问我,“ 你对Java的IO类的知识..说..哈希地图? ” 他要求我在纸上写一段Java代码-实例化一个类并调用实例的方法之一。完成后,他说我的程序无法运行。经过5分钟的认真思考,我放弃了,问为什么。他说我没有写主函数,所以不会运行。在纸上。 [我太生气了,无法继续愚蠢...] 相信我,这不是骗人的问题,也不是心理或愤怒管理评估的事情。 从他的脸上我可以看出,他为这些问题感到骄傲。 那个“ 开发者 ”应该“ 判断 ”候选人。 我可以想到几件事: 用椅子(我非常想去)打他,然后走出去。 只需走出去。 嘲笑他说他没有道理。 礼貌地让他知道他没有道理,然后继续尝试回答问题。 什么都不要告诉他,而只是继续尝试回答问题。 到目前为止,我只尝试了4和5。它没有帮助。不幸的是,许多候选人似乎都这样做并且保持礼貌,但这使这些“开发人员”不断攀升公司的阶梯,逐渐有能力剥夺越来越多的人。 您如何处理这些面试官而又不会破裂呢?如果其他潜在的雇主想知道这里发生了什么,什么是适当的处理方法,同时又能维护您的声誉呢?您有什么可以做的,还是应该尝试解决此问题? 附言:让我承认,事实使我的愤怒倍增: 他在微笑,就像你不相信那样。 前一天,我接到了来自该公司的许多电话(约20个),要求我参加面试,以至于我当天无法做任何工作。 我浪费了带薪休假。
68 interview 

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.