软件工程

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

3
我是否应该使用HTTP状态代码来描述应用程序级别的事件
我处理过的几台服务器将返回HTTP 200,以请求客户端应认为失败的请求,其中的内容为“ success:false”。 在我看来,这似乎不是HTTP代码的正确实现,尤其是在身份验证失败的情况下。我已经很简洁地阅读了HTTP错误代码,其中“ 4xx”指示在更改之前不应该再次发出请求,而“ 5xx”指示该请求可能有效或无效,可以重试,但未成功。在这种情况下,200:登录失败,或200:找不到该文件,或200:缺少参数x,这肯定是错误的。 另一方面,我可以看到有人争论说“ 4xx”应仅表示请求的结构性问题。因此,这很适合返回200:错误的用户名/密码,而不是未经授权的401,因为允许客户端进行请求,但是恰好是错误的。这个论点可以概括为:如果服务器能够处理请求并做出确定,则响应代码应为200,并且由客户端检查主体以获取更多信息。 基本上,这似乎是一个优先事项。但这并不令人满意,因此,我想知道,如果有人有理由说明这些范例中的任何一个更为正确。

6
做一个小的改变,进行测试,然后“漂洗并重复”,这是一个坏习惯吗?
我是一位具有多年经验的程序员。我意识到我有一定的习惯。我不确定这是否真的是个坏习惯。 我会列出要为解决方案执行的任务的清单,例如一些小的小任务, 更改此用户控件的资源 更改另一个尺寸 在另一个用户控件上添加一些HTML和编码 所有这些任务都很小。我的意思是,它们可以在10分钟内完成,但是我习惯于进行一些小的更改,然后在Web浏览器中一次又一次地测试它们。这是一个好习惯吗? 还是我应该一次执行所有这些,然后一起测试? 如果这确实是个坏习惯,那么我该如何改正它,因为这就像浪费时间反复测试小变化?

8
测试人员竞相看看谁打开了更多的漏洞,这很好吗?
我是软件开发人员。有一组测试人员,他们遵循并运行由分析师编写的测试用例,但也执行探索性测试。似乎测试人员一直在竞争,看看谁可以打开更多错误,而且我注意到错误报告的质量下降了。除了测试功能和报告与软件操作有关的错误外,测试人员还提交了有关屏幕增强,可用性或愚蠢错误的错误。 这对项目有好处吗?如果不是,我(作为软件开发人员)如何尝试改变测试人员团队的想法和态度? 另一个问题是,由于截止日期是估计的并且无法更改,因此随着截止日期的临近,测试人员将争先恐后地完成他们的测试用例,这将导致测试质量下降。这将导致合法的错误出现在客户端收到的最终产品中。 OBS:此竞赛不是公司的惯例!这是仅由他们组织的测试人员之间的竞赛,没有任何奖项。

10
为什么“最终”关键字会有用?
似乎Java拥有声明类不可继承的能力,而现在C ++也拥有。但是,根据SOLID中的“打开/关闭”原理,为什么这样做有用?对我来说,final关键字听起来像friend-是合法的,但是如果您使用它,则很可能是设计错误。请提供一些示例,其中不可派生的类将成为优秀的体系结构或设计模式的一部分。
54 java  c++  solid  final 

8
MVC体系结构—我需要多少个控制器?
我已经编码了一段时间,但主要是脚本和简单的应用程序。我已经升任新职位,其职责是开发Web应用程序并使用适当的MVC架构,因此我拼命尝试快速了解所有内容。 我希望这个问题与“ MVC体系结构的最佳实践 ”不太相似,但是当我浏览一些不同的教程时,我注意到其中有些具有针对不同事物的多个控制器。 一个Web应用程序需要多少个控制器? 我意识到如果没有示例,这将很难回答,因此我将提供一个示例: 应用: 用户登录。 用户可以做以下三件事之一: a) 上传一个文件(与元数据一起存储在mongodb数据库中)。 b) 搜索文件。 c) 注销。 我的问题很笼统,但我举了一个例子来帮助任何想回答的人。

5
什么时候在Java中使用原始vs类?
我看到Java具有Boolean(类)vs boolean(原始)。同样,有一个Integer(类)vs int(原始)。何时使用原始版本与类的最佳实践是什么?除非我有特定的理由(性能?),否则我是否应该基本上一直使用类版本?什么是最常见的,公认的使用方式?
54 java  class  usage 

6
测试多线程竞争条件
阅读对此答案的评论,特别是: 仅仅因为您不能编写测试并不意味着它没有坏。未定义的行为通常会按预期方式起作用(C和C ++充满了),竞争条件,由于内存模型弱而可能重新排序... – CodesInChaos 7小时前 如果无法复制@CodesInChaos,则也无法测试写入“修复”的代码。在我看来,将未经测试的代码付诸实践是更糟糕的罪行– RhysW 5小时前 ...让我想知道是否有任何好的通用方法来持续触发由测试用例中的竞争条件引起的生产问题中很少发生的问题。

3
Visual Studio 2012-Express与Professional [关闭]
我在查找Visual Studio 2012 Express Edition和专业版之间的功能比较时遇到麻烦。我目前使用的是专业版的试用版,但很快就会用完,所以我需要决定是否购买完整版。 显然,我可以先尝试一下,看看Express版本是否合适,但问题是Visual Studio中有很多功能,而标准版本中可能缺少一个我没有使用的非常有用的功能。甚至知道存在!或直到后来我才发现它不见了。我真的可以使用功能比较列表,例如此处所有非Express版本的功能比较列表。可耻的是,该页面不包含Express版本。

8
在数据库中存储可重新排序的列表
我正在开发一个愿望清单系统,该系统中用户可以将商品添加到他们的各种愿望清单中,并且我打算允许用户稍后重新订购这些商品。我不确定如何将其存储在数据库中同时保持快速且不会陷入混乱的最佳方法(此应用程序将由相当大的用户群使用,所以我不希望它崩溃清理东西)。 我最初尝试了一个position列,但是当您移动其他每个项目的位置值时,似乎效率很低。 我见过人们使用自引用来引用上一个(或下一个)值,但是同样,您似乎必须更新列表中的许多其他项。 我见过的另一种解决方案是使用十进制数字,并且仅将项目粘贴在它们之间的间隙中,这似乎是迄今为止最好的解决方案,但我敢肯定必须有更好的方法。 我要说的是,一个典型的列表最多可以包含20个左右的项目,并且我可能会将其限制为50个。重新排序将使用拖放操作,并且可能会分批进行以防止出现竞争情况,例如ajax请求。如果有关系,我正在使用postgres(在heroku上)。 有人有什么想法吗? 为任何帮助加油!

6
“一个优秀的程序员的生产力可以是普通程序员的10倍”。
我读过一位优秀程序员的采访(不是英语),他说“一位优秀程序员的收入是普通程序员的10倍”,这说明了为什么优秀程序员的报酬很高以及为什么编程公司为员工提供了许多便利。想法是,由于上述原因,对优秀的程序员有很大的需求,这就是为什么公司为此付出很多代价。 你是否同意这种说法?您是否知道任何客观事实可以支持它? 编辑:问题与经验无关;如果您谈论一位具有1年经验的优秀程序员,那么他/他的工作效率应该比具有1年经验的普通程序员高10倍。我同意从某些经验开始,事情开始消散,但这不是问题的目的。

5
促进可测试代码的设计原则是什么?(设计可测试代码与通过测试驱动设计)
我从事的大多数项目都将开发和单元测试隔离考虑,这使得以后编写单元测试成为噩梦。我的目标是在高级和低级设计阶段本身都牢记测试。 我想知道是否存在定义明确的设计原则来促进可测试的代码。我最近了解的一个这样的原理是通过依赖注入和控制反转的依赖反转。 我读过有一种叫做SOLID的东西。我想了解是否遵循SOLID原则间接导致了易于测试的代码?如果没有,是否存在任何明确的设计原则来促进可测试的代码? 我知道有些东西称为“测试驱动开发”。虽然,我对在设计阶段本身就考虑到测试的代码设计更感兴趣,而不是通过测试来推动设计。我希望这是有道理的。 与该主题相关的另一个问题是,为了能够为每个模块编写单元测试用例,是否可以重构现有产品/项目并更改代码和设计?

8
为什么用Java和C#而不是构造函数使用静态main方法?
我正在寻找来自主要来源或次要来源的明确答案,为什么Java和C#决定将静态方法作为其入口点,而不是通过Application类的实例表示应用程序实例(具有入口点)作为合适的构造函数)。 我先前研究的背景和细节 这已经被问过了。不幸的是,现有的答案只是在乞求这个问题。特别是,以下答案令我不满意,因为我认为它们是不正确的: 如果构造函数被重载,将存在歧义。–实际上,C#(以及C和C ++)允许使用不同的签名,Main因此存在并解决相同的潜在歧义。 一种static方法意味着在初始化之前,没有对象可以被实例化。–这实际上是错误的,某些对象之前已实例化(例如,在静态构造函数中)。 因此,它们可以由运行时调用,而无需实例化父对象。–这根本没有答案。 为了进一步说明为什么我认为这是一个有效且有趣的问题: 许多框架确实使用类来表示应用程序,并使用构造函数作为入口点。例如,VB.NET应用程序框架使用专用的主对话框(及其构造函数)作为入口点1。 从技术上讲,Java和C#都不需要主要方法。好吧,C#需要一个才能进行编译,但是Java甚至不需要。而且在任何情况下都不需要执行它。因此,这似乎不是技术限制。而且,正如我在第一段中提到的那样,仅出于约定,它似乎不符合Java和C#的一般设计原理。 需要明确的是,使用静态方法并没有特定的缺点main,这很奇怪,这使我想知道其背后是否有某种技术原理。 我对主要来源或次要来源的明确答案感兴趣,而不仅仅是猜测。 1尽管有一个回调(Startup)可能会拦截它。
54 java  c#  history  entry-point 

10
如何改正大三,但鼓励他自己思考呢?[关闭]
我是一个小团队的负责人,每个人都有不到一年的软件开发经验。我绝对不会称自己为软件专家,但几年来我在编写软件方面学到了一些东西。 当我们进行代码审查时,我会做很多教导和纠正错误。我会说诸如“这太复杂和令人费解,这就是为什么”或“将这种方法移到一个单独的类中您会怎么想?”之类的话。我要特别谨慎地进行交流,如果他们有问题或反对意见,那就可以了,我们需要讨论。每当我纠正某人时,我都会问:“你觉得怎么样?” 或类似的东西。 但是,他们很少甚至不同意或询问原因。最近,我一直在注意到更多公然的迹象,表明他们在盲目同意我的说法,但没有形成自己的观点。 我需要一个能够学会自主做事的团队,而不仅仅是遵循指示。如何纠正初级开发人员,但仍然鼓励他自己思考? 编辑:这是以下这些明显迹象之一的示例,这些迹象表明它们没有形成自己的意见: 我:我喜欢您创建扩展方法的想法,但是我不喜欢您如何将大型复杂lambda作为参数传递。Lambda迫使其他人过多地了解该方法的实现。 Junior(误解了我):是的,我完全同意。我们不应该在这里使用扩展方法,因为它们会迫使其他开发人员对实现了解太多。 有一个误会,已经解决。但是他的发言中甚至没有逻辑上的要求!他以为自己是在反省我的逻辑,以为当他真的不知道为什么要说出来时才有意义。

17
如何处理评论中的重言式?[关闭]
有时,我遇到的情况是我正在编写的部分代码是(或似乎是)不言而喻的,其名称基本上会作为注释重复: class Example { /// <summary> /// The location of the update. /// </summary> public Uri UpdateLocation { get; set; }; } (C#示例,但请将该问题与语言无关)。 这样的评论是没有用的。我究竟做错了什么?是错误的名称选择吗?我怎样才能更好地评论这样的部分?我应该跳过诸如此类的评论吗?

6
函数和lambda有什么区别?
我对“功能”和“ lambda”有些困惑。我看过一些例子,它们表明scheme关键字的lambda工作方式与JavaScript关键字非常相似function,但是我真的不知道它们之间的关系。 有人告诉我说.net中的对象时,“功能”和“方法”可以互换使用。我想知道“ lambda”和“ function”是否同样含义相同。看到希腊字母lambda(λ)出现在此站点上的许多化身中,我不知道'lambda'是否具有某些深奥的含义。更让人困惑的是,在.net中,C#的功能部分将传递给另一个函数的函数表达式称为“ lambda表达式”,因此,这个词似乎无处不在。 我对“ lambda演算”一词也很熟悉。 函数和lambda有什么区别?

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.