软件工程

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

14
如何学习做出更好的估计?[关闭]
我估计不足。当有人问我要花多长时间时,我什至不敢猜测,因为我将完全失去能力。通常我太乐观了,应该将我的猜测乘以一个较大的X因子... 如何学习做出更好的估算?我的大学没有教它,即使我们为所有的劳动都有最后期限,但我从未想过实际花费多长时间。我应该。为了大家的缘故(尤其是我的)。


4
为什么我们需要依赖注入的框架?[关闭]
我一直在阅读有关控制反转原理和依赖注入作为其实现的更多信息,并且我确信我理解它。 似乎基本上是在说“不要在类中声明类成员的实例化”。相反,实例化应该通过构造函数传递并分配;从外部来源“注入”到班级中。 如果就这么简单(看起来如此),为什么我们需要像spring或guice这样的带有注释的框架?我在这里缺少基本的东西吗?我真的很难理解依赖注入框架的用途。 编辑:关于可能的重复,我相信我的问题更加独特,因为它询问的是一般的DI框架,而不仅仅是Spring。Spring不仅是一个DI框架,所以有很多人想要使用Spring的原因都与DI无关。

1
语义版本控制如何应用于没有API的程序
在http://semver.org/(我认为这是版本控制中使用最广泛的约定)中,建议在引入破坏/修改API的更改时增加主版本号。 虽然有两种相关的情况,但我看不到如何应用此准则: 如果我的代码不提供任何API怎么办?我应该如何版本代码? 如果我的代码在开发的后期开始提供API,该怎么办?


6
处理重构大文件的最佳方法是什么?
我目前正在做一个更大的项目,不幸的是其中有些文件的软件质量准则并不总是遵循的。这包括大文件(读取2000-4000行),这些文件显然包含多个不同的功能。 现在,我想将这些大文件重构为多个小文件。问题是,由于它们很大,因此不同分支上的多个人(包括我)正在处理这些文件。因此,我无法真正从开发和重构中分支出来,因为将这些重构与其他人的更改合并将变得很困难。 当然,我们可以要求每个人重新合并以开发,“冻结”文件(即,不再允许任何人对其进行编辑),重构然后“取消冻结”。但这也不是一件好事,因为这将要求每个人在重构完成之前基本上停止对这些文件的工作。 因此,有没有一种方法可以重构,不要求其他人停止工作(很长时间)或合并其功能分支以进行开发?


9
具有自定义属性的JS布尔运算是否不好?
在JS中,您可以返回具有自定义属性的布尔值。例如。当Modernizr测试视频支持时,它返回true,false但是返回的布尔值(布尔是JS中的第一类对象)具有指定支持哪种格式的属性。起初它使我感到有些惊讶,但后来我开始喜欢这个主意,并开始怀疑为什么它似乎很少使用? 它看起来像是一种优雅的方式来处理所有这些情况,在这些情况下,您基本上想知道某件事是对还是错,但是您可能对无需定义自定义返回对象或不准备使用回调函数就可以定义的一些其他信息感兴趣。接受更多参数。这样,您可以保留非常通用的功能签名,而不会影响返回更复杂数据的能力。 我可以想象有3种反对的说法: 当最好使任何界面清晰明了而不棘手时,这是不常见/意外的。 这可能是一个稻草人的论点,但由于它有点极端,我可以想象它在某些JS优化器,uglifier,VM中或在稍作清理语言规范更改后悄然适得其反。 有更好的方法-简洁,清晰和通用-完全相同。 所以我的问题是,有什么充分的理由要避免将布尔值与其他属性一起使用?他们是把戏还是款待? 绘制扭曲警告。 以上是最初的问题。正如Matthew Crumley和senevoldsen都指出,这是基于错误的(虚假的?)前提。按照优良的JS传统,Modernizr所做的只是一种语言技巧而又是一种肮脏的手段。归结为具有原始bool的JS,如果将其设置为false,即使在尝试添加道具后(它会默默失败),布尔对象仍将为false;而布尔对象可以具有自定义道具,但成为对象始终是真实的。Modernizr返回布尔布尔值false或真实布尔值对象。 我最初的问题是假设技巧不一样,因此最流行的答案涉及(完全有效的)编码标准方面。但是,我发现揭穿整个窍门的答案最有帮助(以及反对使用该方法的最终论点),因此我接受其中一个。感谢所有参与者!

13
期望Any()* not *引发null引用异常是否不合理?
当你创建一个扩展方法就可以了,当然,调用它null。但是,不像一个实例方法调用,调用它在空不具有扔NullReferenceException- >您必须检查和手动把它。 为了实施Linq扩展方法,Any()Microsoft决定他们应该抛出一个ArgumentNullException(https://github.com/dotnet/corefx/blob/master/src/System.Linq/src/System/Linq/AnyAll.cs)。 我不得不写信 if( myCollection != null && myCollection.Any() ) 作为此代码的客户端,我期望eg ((int[])null).Any()应该返回false吗?

6
为什么不从数据库以字符串形式返回日期?
在典型的Web应用程序中,从强类型的数据库层中检索日期(例如,在c#中为System.DateTime,与System.String相反)。 当日期需要表示为字符串时(例如,显示在页面上),则在表示层中完成从DateTime到字符串的转换。 为什么是这样?为什么将DateTime转换为数据库层上的字符串是一件坏事? 另请参阅聊天中激烈的辩论,以及引发所有这些问题的原始问题。

5
自旋锁与轮询有何不同?
自旋锁和轮询是同一件事吗? 维基百科: 自旋锁是一种锁,它使试图获取它的线程在循环中反复等待(“自旋”),而反复检查该锁是否可用 这听起来非常像: while(!ready); 我被教导要避免轮询,因为它是完全次优的。那么,自旋锁是否适合不良的旧民意测验?自旋锁与轮询有何不同?
41 locks  kernel  polling 

6
为什么我们使用“冲刺”一词?
敏捷宣言的创始原则之一是 敏捷过程促进可持续发展。赞助者,开发者和用户应该能够无限期地保持恒定的步伐。 Scrum团队使用术语sprint来指工作周期(也称为迭代)。 但这对我来说没有意义。根据谷歌的冲刺是: 在短距离内全速运行。 换句话说,这是不可持续的。为什么Scrum团队使用sprint这个词?在我看来,这与敏捷的基本原则之一相抵触。

7
如果应用程序仅在本地执行操作,使用数据库服务器是否有意义?
我已经看到一些应用程序,它们基本上是在系统本地运行的应用程序软件(因此它们在网络上没有太多通信)。这些应用程序似乎依赖于数据库服务器来存储其数据。 应用程序的一个示例是Amarok(Linux上的流行音乐播放器)。我不知道他们是否仍会这样做,但我记得曾经有一段时间安装Amarok意味着您必须安装MySQL服务器并使其始终在后台运行。 与使用较小的嵌入式SQL解决方案(例如sqlite)相比,将服务器用于本地存储有什么优势?我说的是一般的应用程序软件,不一定是amarok(这只是一个例子)。与嵌入式数据库相比,在任何情况下使用数据库服务器都有意义吗?

13
为什么在声明变量时必须指定数据类型?
在大多数编码语言(如果不是全部)中,您需要声明变量。例如在C#中,如果它是一个数字字段,则 int PhoneNumber 如果我用正常的英语,我不需要申报PhoneNumber为int使用它。例如,如果我请朋友萨姆给我他的电话号码,我会说: “山姆给我电话号码” 我不会说 “ Char(20)Sam给我int电话号码” 为什么我们必须完全指定数据类型?

13
编译一个随机陌生人的源代码有多安全?[关闭]
假设我正在审查求职者发送的证明其技能的代码。显然,我不想运行它们发送的可执行文件。不太清楚,我宁愿不运行其代码的编译结果(例如,Java允许在注释中隐藏可运行的代码)。 编译他们的代码呢?我需要编译器警告,但是如果它们的代码包含一些巧妙的字符序列,这些序列会利用我的编译器并且我的编译器危害了我的机器,该怎么办? 当我用Google搜索“编译器漏洞”时,得到的所有信息都与编译器优化和代码发布有关,以及所发出的代码是否与原始源代码一样安全。 编译器是否通常经过验证,以确保它们在编译一些巧妙的代码时不会危害用户计算机?从陌生人那里编译一段代码有多安全?

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.