软件工程

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


5
IIS为什么默认为每1740分钟回收一次应用程序池?
为什么IIS在给定时间后默认默认回收应用程序池?除了大多数Web应用程序可能不谨慎管理内存外,还有其他特定原因吗?鉴于您正在正确管理应用程序的内存,可以安全地将其关闭吗?关闭回收或继续回收有哪些潜在的不利方面和向上的好处?
22 asp.net  memory  iis 

2
关于在我的网站上使用的双重许可(MIT / GPL)JavaScript的困惑
我已经阅读了所有可以找到的帖子,但仍不确定答案。 我想在我的网站上使用jQuery插件,该插件在MIT和GPL下获得了双重许可。 双重许可是否意味着只要一个或另一个满足我就可以了,还是必须两者兼而有之? 我已经读到,在某人的浏览器上加载的GPL javascript不会算作重新分发,因此,我不必在我的网站的其余部分使用GPL许可证(提供源代码)。这是真的? 我的搭档认为我应该完全删除版权并更改变量名称,因为这将在商业网站上进行。这是道德的吗?我尊重花时间编写代码的人。我应该联系他们,看看该插件是否可以通过商业许可获得? 预先非常感谢您帮助澄清。因为这是我的第一个网站,所以我认为问这些问题比在黑暗中开枪更好。

5
您如何改进和版本化接口?
假设您有一个界面IFoo: public interface IFoo { void Bar(string s); int Quux(object o); } 在API的第2版中,您需要Glarg向该接口添加方法。在不破坏现有API用户和保持向后兼容性的情况下,该如何做?这主要是针对.NET,但也可以应用于其他框架和语言。

10
可空类型是否比魔术数字更可取?
最近我一直在和一位同事辩论。我们专门使用C#,但这可以应用于具有可空类型的任何语言。假设您有一个代表最大值的值。但是,此最大值是可选的。我认为可为空的数字是可取的。我的同事援引先例,赞成使用零。当然,诸如网络套接字之类的东西通常使用零来表示无限超时。如果我今天要编写处理套接字的代码,我个人会使用可为空的值,因为我认为它可以更好地表示没有超时这一事实。 哪个代表更好?两者都需要条件检查其含义为“ none”的值,但是我相信可以为null的类型可以更好地传达意图。

5
为什么缺点列表与函数式编程相关联?
我注意到,大多数功能语言都使用单链接列表(“ cons”列表)作为其最基本的列表类型。示例包括Common Lisp,Haskell和F#。这与主流语言不同,后者的本地列表类型是数组。 这是为什么? 对于Common Lisp(是动态键入的),我得到的想法是,缺点非常普遍,足以成为列表,树等的基础。这可能是一个微小的原因。 但是,对于静态类型的语言,我找不到很好的推理,甚至可以找到反参数: 功能性风格会促进不变性,因此链表的插入容易程度较弱, 功能风格鼓励不变性,因此也鼓励数据共享。数组比链表更容易“部分”共享, 您也可以对常规数组进行模式匹配,甚至更好(例如,您可以轻松地从右向左折叠), 最重要的是,您可以免费获得随机访问, 并且(一个实际的优势),如果该语言是静态类型的,则可以采用常规的内存布局并从高速缓存中提高速度。 那么为什么偏爱链表?

20
UML图对于成功的项目有多重要?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 我在一个项目的中间,被要求写UML图(用例,类图等)。该项目不是很复杂。 我想知道这是否浪费我的时间?我是否应该做其他有趣的事情,例如编写代码?在什么情况下不经过所有概念阶段就不能建造东西吗?一切都与复杂性有关吗?如果是这样,如何衡量呢?
22 uml  modeling 

9
说服一个孤独的开发人员使用单独的构建工具,而不是IDE一键式构建
此问题是从Stack Overflow 迁移而来的,因为可以在Software Engineering Stack Exchange上回答。 迁移 7年前。 在Java和Scala编程的多年中,我从未使用过Ant,Maven,Gradle或任何这些Java构建工具。在我工作过的所有地方,都有一个构建经理来负责所有这些工作-我将使用IDE在本地进行编译以进行开发和单元测试,然后检查源代码,并通知构建经理完成了必要的工作。为共享环境编译每个人的文件。 现在,我处于合同之间,我一直在从事我自己的自筹资金项目,现在正好可以实际赚钱。我什至有潜在的投资者在排队,并计划在未来几周内向他们展示Beta版本。 但是一直以来,我只是单击IDE上的build按钮,它会创建Jar文件,并且效果很好。当然,传统的观点建议我“应该”编写自己的Ant / Maven / Gradle脚本并使用它而不是IDE,但是在我的情况下(单独工作)它的具体优势是什么? 我已经阅读了一些有关如何使用这些构建工具的文章,看起来我将编写数百行XML(或Groovy或其他内容)以一键完成IDE的工作(IDE生成的该项目的Ant XML超过700行)。它看起来容易出错并且很耗时,对于我的情况来说是不必要的。更不用说学习曲线了,这将使我为使产品准备向人们展示而正在做的所有其他工作都浪费了时间。

6
在其他客户项目中重用代码是否合法?
我正在作为移动应用程序的独立软件开发人员。客户要求我开发一个移动应用程序。因此,目前我正在计算为该项目撰写报价的时间和精力。 该应用程序本身仅会使用一定的时间,因为它与某个事件相关,在此之后将毫无用处。但是,该应用程序的基本功能对于希望为其活动使用类似应用程序的其他客户可以重用。 目前,我想知道是否可以为客户开发应用程序,让他为其他客户的应用程序开发并重用部分源代码吗? 那么,应对这种情况的最佳方式是什么? 该应用程序的源代码属于谁? 当客户为开发付费时,我是否必须将源代码提供给客户? 如果需要,是否仍可以保留它的副本并在以后重用? 我是否必须要求客户重用代码? 我是否需要在这里使用某种许可模型。并且让第一个客户只支付开发的一部分,以便我可以重用代码而无需担心吗? 我希望我能阐明我的情况。我期待着您的答案。
22 legal  code-reuse 

4
有没有关于敏捷与瀑布的效率/效果的研究[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 2年前关闭。 已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 在前一天的一次会议上,有人声称与瀑布相比,敏捷的开发时间效率只有60%。我不希望验证或反驳此主张。我很想知道是否有任何研究比较这两种方法。 有没有比较这两者的研究?

6
Lisp宏有多有用?
Common Lisp允许您编写执行所需源转换的宏。 Scheme为您提供了一个卫生的模式匹配系统,您还可以执行转换。宏在实践中有多有用?保罗·格雷厄姆(Paul Graham)在击败平均水平中说: Viaweb编辑器的源代码大概是20-25%的宏。 人们实际上最终会用宏做什么事情?
22 lisp  scheme  macros 

11
在没有API文档的情况下进行编程真的是一项必备技能吗?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 我今天勉强通过了Java编程考试。我不得不回答一些关于线程的一般问题,这些问题做得很好,并且编写了一个更糟糕的线程程序。我必须将笔记本电脑连接到投影仪屏幕并立即编写程序。我的第一次尝试是使用匿名类,但我忘记了确切的语法。也许是因为有些激动,或者是因为最近两周我主要使用php进行编码。然后我问是否可以使用API​​文档。答案是“否”。所以我决定走另一条路,实现了Runnable。该程序正在执行最后要求的操作。当然,考官注意到我的第一次失败,这极大地影响了我的分数。令我惊讶的是它不允许使用API​​文档。 因此,我的问题是:没有API文档就可以完美地进行编码真的重要吗?我应该发展这项技能吗?在现实世界和工作环境中真的重要吗?在编程课程中,我专注于学习模式,开发编写良好的设计应用程序的技能,使用API​​的技能并快速找到必要的信息。我并不是想学习如何在没有API文档的情况下进行编程。在工作面试中必须具备(没有API文档的编码)吗?


1
GNU LGPL v3与GNU LGPL v2.1的缺点?
此问题是从Stack Overflow 迁移而来的,因为可以在Software Engineering Stack Exchange上回答。 迁移 8年前。 首先,我意识到这是一个编程问答站点,而不是提供法律建议的地方。...只是试图基本了解使用LGPLv3库的不利之处。 GNU LGPL v2.1和GNU LGPL v3有什么区别? 特别是,我知道常规GPLv3具有许多反DRM和反专利条款。原则上,我对这些条款没有任何要求,但是如果我选择使用LGPLv3库,这些条款将突然适用于主应用程序。 LGPL v2.1的规则似乎仅适用于您使用或修改的库。它没有说明主要应用程序。(假设没有静态链接等) 因此,在我工作的利基市场软件提供商中,我们经常使用LGPL许可的库(并对此做出贡献),而无需开源我们的主要应用程序。 LGPLv3是否会发生变化? 这个问题/programming/1108238/differences-between-gnu-lgpl-v2-1-and-gnu-lgpl-v3得到了几个答案,但是都没有解决主应用程序的任何新义务可能有。 澄清一下:我是在问LGPL v3,而不是普通的GPLv3。Tivoization /专利授权的任何要求是否从LGPLv3库“泄漏”到主机应用程序?

6
连续交付在实践中如何工作?
连续交付听起来不错,但是我多年的软件开发经验表明,在实践中它是行不通的。 (编辑:为了明确起见,我总是有很多测试会自动运行。我的问题是关于如何使每次签入都充满信心,我知道这是CD的完整格式。替代方法不是一年周期每周两次(如果正确完成,有些人可能会认为它仍然是CD),两周或一个月的迭代;在每个迭代的末尾都包含老式的质量检查,以补充自动化测试。 无法全面覆盖测试。对于每件事,您都必须投入大量时间-时间就是金钱。这是有价值的,但是可以花费时间以其他方式为质量做出贡献。 有些事情很难自动测试。例如GUI。甚至Selenium也不会告诉您您的GUI是否不稳定。没有笨拙的固定装置,很难测试数据库访问,甚至无法覆盖数据存储中的奇怪情况。同样的安全性和许多其他事情。只有业务层代码才可以有效地进行单元测试。 即使在业务层中,大多数代码也不是简单函数,其参数和返回值可以很容易地隔离以进行测试。您可能会花费大量时间来构建模拟对象,这可能与实际实现不符。 集成/功能测试是对单元测试的补充,但是它们需要大量时间才能运行,因为它们通常涉及在每个测试中重新初始化整个系统。(如果不重新初始化,则测试环境会不一致。) 重构或任何其他更改都会破坏很多测试。您花费大量时间修复它们。如果只需要验证有意义的规范更改,那很好,但是测试常常由于无意义的低级实现细节而失败,而不是真正提供重要信息的东西。通常,调整主要集中在重新测试内部,而不是真正地检查正在测试的功能。 错误的现场报告无法轻松地与代码的精确微版本相匹配。

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.