软件工程

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

6
强制执行单元测试的执行命令是不好的做法吗?
我正在为一个包含多个子模块的项目编写测试。我编写的每个测试用例彼此独立运行,并且清除测试之间的所有数据。 尽管测试是独立运行的,但由于某些情况需要多个子模块,因此我正在考虑执行执行顺序。例如,一个子模块正在生成数据,而另一个正在对数据运行查询。如果生成数据的子模块包含错误,则即使子模块本身工作正常,查询子模块的测试也将失败。 我无法使用虚拟数据,因为我正在测试的主要功能是与黑匣子远程服务器的连接,该服务器仅从第一个子模块获取数据。 在这种情况下,可以强制执行测试的执行顺序还是不好的做法?我感觉此设置中有异味,但找不到更好的方法。 编辑:问题来自于如何构建测试,其中一个测试是另一测试的设置?因为“先前”测试不是设置,而是测试执行设置的代码。

6
当大多数情况下建议使用双精度时,为什么浮点数仍是Java语言的一部分?
在我所见过的每个地方,它都说在几乎所有方面double都优于float。在Java中float已经过时了double,为什么仍要使用它呢? 我用Libgdx编写了很多程序,它们迫使您使用float(deltaTime等),但是在我看来double,就存储和内存而言,使用起来更容易。 我还读了什么时候使用float以及什么时候使用double,但是如果float真的只对小数点后有很多数字的数字有用,那为什么我们不能仅使用的多种变体之一double? 关于人们为什么仍然坚持使用浮点数,即使它实际上不再具有任何优势,是否有任何理由呢?改变这一切只是太多的工作吗?

4
富域模型-行为如何准确地适应?
在Rich与Anemic领域模型的辩论中,互联网充满了哲学上的建议,但缺乏权威的例子。这个问题的目的是找到适当的领域驱动设计模型的明确指南和具体示例。(理想情况下为C#。) 对于一个实际示例,这种DDD实现似乎是错误的: 下面的WorkItem域模型不过是属性包,由Entity Framework用于代码优先数据库。按照福勒的说法,这是贫血的。 WorkItemService层显然是对域服务的常见误解。它包含WorkItem的所有行为/业务逻辑。Per Yemelyanov等人认为,这是程序性的。(第6页) 因此,如果以下内容是错误的,我该怎么做呢? 该行为,即AddStatusUpdate或Checkout,应该属于WorkItem类吗? WorkItem模型应具有哪些依赖关系? public class WorkItemService : IWorkItemService { private IUnitOfWorkFactory _unitOfWorkFactory; //using Unity for dependency injection public WorkItemService(IUnitOfWorkFactory unitOfWorkFactory) { _unitOfWorkFactory = unitOfWorkFactory; } public void AddStatusUpdate(int workItemId, int statusId) { using (var unitOfWork = _unitOfWorkFactory.GetUnitOfWork<IWorkItemUnitOfWork>()) { var workItemRepo = unitOfWork.WorkItemRepository; var workItemStatusRepo …

7
机器人如何击败验证码?
我有一个网站电子邮件表格。我使用自定义的验证码来防止机器人发送垃圾邮件。尽管如此,我仍然收到垃圾邮件。 为什么?机器人如何击败验证码?他们是使用某种高级OCR还是只是从存储位置获取解决方案? 我该如何预防?我应该改用另一种验证码吗? 我确信电子邮件来自表单,因为它是从提供表单消息的我的电子邮件发送者发送的。字母样式也相同。作为记录,我使用的是PHP + MySQL,但我没有在寻找解决此问题的方法。我对一般情况下机器人如何击败这些技术感兴趣。我只是以这种情况为例,所以您可以更好地理解我的要求。
84 security  captcha 

12
在单元测试中检查文件内容/编码是否被认为是“不良做法”?
有一点上下文:今天早些时候,我不得不更新我的另一位同事提供的一些SQL代码,由于它是一个很大的脚本,因此将其存储为单独的文件(然后在运行时读取并执行)。在执行此操作时,我不小心重新引入了几个月前的两个错误,即: 出于任何原因,ASCII文件都以UTF-16编码(同事通过电子邮件将其发送给我,这可能是导致该文件的原因)。 该脚本缺少初始SET语句(由于生产中使用了某些驱动程序,而本地没有进行全新安装,因此该脚本是必需的)。 经过大约一个小时的调试之后,我决定编写一些单元测试以确保不再发生这种情况(并在断言消息中包含一种快速修复它的方法,以便于将来的开发人员轻松修复)。 但是,当我推送此代码时,另一个同事(也是我们团队的负责人)走到我面前,告诉我,我不应该再做这些事情,因为: “这些东西不属于单元测试” “单元测试仅应用于检查代码流” 我现在很矛盾,因为我仍然认为自己做的没错,因为以后不会再引入此错误,但是这位同事还是一名资深人士,最终可以决定我们花时间在。我该怎么办?我这样做不对吗?是否被认为是不良做法?



10
如何解释为什么多线程很难
我是一个相当不错的程序员,我的老板也是一个相当不错的程序员。尽管他似乎低估了诸如多线程之类的某些任务以及它的难度(我发现,除了运行几个线程,等待所有线程完成然后返回结果之外,其他事情非常困难)。 当您开始担心僵局和比赛条件时,我觉得这很困难,但老板似乎并不喜欢这一点-我认为他从未遇到过。只是打个锁就差不多了。 那么,我如何介绍他,或者解释为什么他可能低估了并发,并行和多线程的复杂性?还是我错了? 编辑:他做了些什么-遍历一个列表,为该列表中的每个项目创建一个线程,该线程根据该项目中的信息执行数据库更新命令。我不确定他如何控制一次执行多少个线程,我想如果运行太多(如果他使用信号量的话),他一定会将它们添加到队列中。

11
个人(一个人)项目的git。过度杀伤力?
我知道并使用两个版本控制系统:Subversion和git。到目前为止,Subversion被用于我是唯一开发人员的个人项目,而git被用于开源项目和我相信其他人也可以在该项目上工作的项目。这主要是因为git惊人的分叉和合并功能,每个人都可以在自己的分支上工作。非常便利。 现在,我将Subversion用于个人项目,因为我认为git在这里毫无意义。这似乎有点过大。如果我是唯一的开发人员,则将其集中(通常在我的家庭服务器上)对我来说是可以的;我还是要定期备份。我不需要建立自己的分支的能力,主要分支是我的分支。是的,SVN对分支有简单的支持,但是我认为对它的更强大的支持是没有意义的。合并可能会很痛苦,或者至少从我的小经验来看。 我是否有充分的理由在个人项目上使用git?

18
设计缺陷并从中处理屈辱[关闭]
您在所建议的软件设计中始终从根本上正确吗?当您给出一些根本上是错误的设计时,您往往会失去团队成员的尊重。无论您做什么,之后都会对您在事件发生后提出的所有建议进行交叉检查。当您刚加入团队并且他们不知道您的过去并取得了一些成功的故事时,情况尤其糟糕。 也许您设计不好的原因是由于在该领域缺乏经验或知识或两者都不是。面对这种情况的您如何处理?这就像是您职业生涯中的一回事吗?是将其抛在后面还是在这种情况下需要寻找新的工作方式?请提供一些诚实的反馈... 谢谢。
84 design 

6
为什么Python如此流行?[关闭]
Python于1991年首次出现,但直到TIOBE排名将有意义的事情量化之后,它才在2004年之前还不为人所知。 发生了什么?是什么引起了对这种13岁语言的兴趣的泛滥?是有原因的,在Python诞生的第一个十年里,Python就没有被认为是Perl的真正竞争对手吗?难道有一个原因是Python再过十年没有再变得相对默默无闻吗? 我个人认为Python是一种非常不错的语言,很高兴我不是唯一的一种。但是它没有企业支持或杀手级功能,无法解释相关性的突然上升。 有人知道这个故事吗?

3
REST是什么(用简单的英语)[关闭]
最近,我对熟悉REST感兴趣。我尝试在REST上阅读Wiki条目,但这没有帮助。如果有人可以用简单的英语讲解(这没有不必要的技术术语),我将不胜感激 什么是REST 它在Web架构生态系统中占据什么位置 它与协议耦合的紧密程度(或宽松程度)。 REST的替代方案是什么?REST与它们相比如何? 我了解可能无法在一两个段落中回答这个问题,在这种情况下,相关链接将受到高度赞赏。
84 rest 

13
要分支还是不分支?
直到最近,我的开发工作流程如下: 从产品所有者那里获得功能 进行分支(如果功能超过1天) 在分支中实施 合并从主分支到我的分支的更改(以减少向后合并期间的冲突) 合并我的分支回到主分支 有时合并存在问题,但总的来说,我喜欢它。 但是最近,我看到越来越多的想法的追随者不要建立分支机构,因为这使得实践连续集成,连续交付等变得更加困难。对于具有分布式VCS背景的人们,他们在谈论如此大的合并实现时尤其有趣。 Git,Mercurial等 所以问题是我们现在应该使用分支吗?

14
在线使用实名有什么优点和缺点?[关闭]
作为程序员,与发明的句柄相比,您在在线话语中使用真实姓名有没有专业或其他优势?我一直只使用一个用户名,并在可能的情况下尽可能显示我的真实姓名,原因如下: 我对在线的兴趣几乎完全是专业的。 它可以在任何地方构建我所有工作的搜索友好型公共日志。 如果有人想与我联系,有很多方法可以做到。 我的工作组合都与我个人息息相关。 全面披露的可能不利因素包括: 如果您想参与令人不快的事情,那可能会更困难。 继承您的项目的精神病患者可以更轻松地找到您的住所。 那些不值得花费宝贵时间的人可能会发脾气,最好是花更多的时间来编写您闻名的出色软件。 您的工作组合都与您个人息息相关。 无论如何,似乎大多数StackOverflow用户都是使用虚构的句柄而不是真实姓名。值得注意的例外包括最知名的用户,这些用户通常在行业中已经建立了良好的声誉。但是,如果我们不知道自己的名字,怎么会成为传奇的摇滚明星程序员呢?讨论。


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.