软件工程

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

8
有什么好的单元测试来覆盖滚动模具的用例?
我正在努力掌握单元测试。 假设我们有一个模具,其默认面数可以等于6(但可以是4、5面,等等): import random class Die(): def __init__(self, sides=6): self._sides = sides def roll(self): return random.randint(1, self._sides) 以下是有效/有用的单元测试吗? 测试6面模具的1-6范围内的辊 测试6面模具的0卷 测试6面模具的7卷 测试3面模具的1-3范围内的辊 测试3面模具的0卷 测试一卷4的3面模具 我只是认为这些都是浪费时间,因为随机模块已经存在了很长时间,但是我认为如果随机模块得到更新(比如我更新了我的Python版本),那么至少我会被覆盖。 另外,在这种情况下,我是否还需要测试模具辊的其他变化,例如3,还是覆盖另一个已初始化的模具状态好吗?

2
修复重要错误时的语义版本控制
我目前管理的图书馆有很多公共用途,并且我对语义版本化有疑问。我想重构该库的一个相当重要的部分,该部分执行不正确-始终执行不正确。但是,这样做将意味着更改公共API,这是一个重大决定。 我要进行的更改围绕如何使用迭代器展开。当前,用户必须执行以下操作: while ($element = $iterator->next()) { // ... } 至少在PHP的本机Iterator接口中,这是不正确的。我要替换为: while ($iterator->valid()) { $element = $iterator->current(); // ... $iterator->next(); } 类似于: foreach ($iterator as $element) { // ... } 如果您查看Tom的语义版本控制指南,他清楚地指出,对公共API的任何更改(即那些不向后兼容的更改)都应证明是主要版本的合理性。因此,该库将从1.7.3跳到2.0.0,对我来说,这是一个太远的步骤。我们只是在谈论一个已修复的功能。 我确实有计划最终发布2.0.0,但是我认为这是您完全重写该库并实现了许多公共API更改的时候。引入此重构是否需要发行主要版本?我真的不知道它是如何工作的-我更愿意将其发布为1.8.0或1.7.4。有人建议吗?

7
是否应根据案件的稀有性或处理困难来安排陈述?
在我现在正在编写的一些代码中,我有类似以下内容: if (uncommon_condition) { do_something_simple(); } else { do(); something(); long(); and(); complicated(); } 我的一部分认为“编写的方式很好。应该先处理简单的案例,然后再处理更复杂的案例。” 但是另一部分说:“不!else代码应该放在之下if,因为它if是用于处理异常情况,else并且用于处理所有其他情况。” 哪个是正确的或更可取的?

5
Java Web应用程序文件夹结构
作为J2EE的初学者,我最近开始使用J2EE的核心:Servlets&Jsps从头开始开发自己的项目。 我无法评估我的项目文件夹结构是否正确。这是我的项目文件夹结构。 在问问题之前,我承认我无法回答,也无法证明有人问我为什么使用这种文件夹结构。问题:将我的jsps放在web-inf之外是一个好兆头。如果没有,为什么会这样呢?如果是,为什么? J2EE Web应用程序是否有任何标准的文件夹结构约定,我知道maven提出了一些标准,但是我们仍然可以根据我认为的要求进行自定义。 我做了一些谷歌搜索,找到了两个参考 1 2 答案不在同一页上,因此无法得出任何结论。 布局J2EE Web应用程序的文件夹结构时要考虑哪些要点,重要的是,应该将Jsps静态内容放入&为何?

4
如何在一个测试是另一测试的设置的地方构造测试?
我正在通过仅使用公共API 集成测试系统。我有一个看起来像这样的测试: def testAllTheThings(): email = create_random_email() password = create_random_password() ok = account_signup(email, password) assert ok url = wait_for_confirmation_email() assert url ok = account_verify(url) assert ok token = get_auth_token(email, password) a = do_A(token) assert a b = do_B(token, a) assert b c = do_C(token, b) # ...and so on... 基本上,我正在尝试测试单个事务的整个“流程”。流程中的每个步骤都取决于后续的上一个步骤。因为我将自己限制在外部API上,所以我不能只是将值插入数据库中。 …
18 testing 

2
MIT许可证中的归属要求有哪些?
choicealicense.com声称MIT许可证是“简短而明确的许可许可证。它使人们能够对您的代码进行任何操作,并带有适当的出处,并且没有保证”(强调我的意思)。但是,在阅读许可证时,我看不到任何声称原始作者的署名必须在任何地方的信息,那么他们从哪儿来的呢?

5
找到了一个更好的解决工作中问题的方法-我应该阻止在线发布代码片段吗?
我认为我们大多数程序员都是使用Stack Overflow解决每天的问题:寻找一种有效的算法来完成某件事。 现在想象一个情况:您有一个要解决的问题。谷歌搜索了一下,发现了一个StackOverflow问题,但到目前为止您对答案并不满意。因此,您必须进行自己的研究:您需要这样做,因为要在公司的应用程序中进行。 最终,几个小时后,您找到了更好的解决方案。您很高兴,已将其添加到公司的代码库中,然后要向以前发现的问题提交带有代码段(仅几行)的答案,以帮助他人。 但是请稍等:该公司的软件是封闭源代码,您可以日以继夜地工作。 那么这是否意味着我不应该在余生中在工作中或家中都张贴该问题的答案,因为我在工作中解决了该问题,并且公司拥有该段代码?
18 legal 

4
经验有多大的不同?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 6年前关闭。 我看到很多工作需要至少x年的经验。问题是您如何知道候选人何时具备所需的工作经验?您对具有x年经验的人有何期待(编辑:有效地,如何不依靠技能检查来检查简历是否在说谎)?具有x年工作经验的人可以做y年(y <x)的人做不到的事情(编辑:假设他们具有相似的技能)? 可能有些情况是,有些具有y年经验的热情的程序员具有丰富的知识并且从事过多个项目,而另一些具有x年的经验(x> y)的程序员却只从事过很少的项目,却没有那么多的经验。 为什么不能将其简化为“如果您了解这项技术并且知道如何做这些事情(例如设计,交流,估算等),那么您就适合我们的工作”吗? 我知道您不能聘请具有1年经验的应届毕业生担任企业架构师一职,但我也发现几乎所有广告都要求经验的事实存在问题。恕我直言,首先应该考虑热情。 首先,我不知道该问题是否适合该网站,但是由于有招聘和经验标签,因此我相信它在这里占有一席之地。

6
为小型团队规划编程的最佳方法?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 6年前关闭。 我是一家小型创业公司的总监。当前,我们有两名正在构建Web应用程序平台的程序员(一名经验丰富,一名经验较少)。 迄今为止最大的挑战之一是规划过程。程序员通常负责计划自己的工作,但我们不断超出自己设定的期限。例如,他们估计一项任务需要2天,而最终需要8天。 对我而言,很难为他们提供计划支持,因为我缺乏准确估算某个任务将持续多长时间的技术知识。 你有什么主意吗: 这是什么原因,对于程序员来说这很常见吗? 我可以做些什么来支持他们的计划?有没有对小型团队的程序员有用的方法或工具?
18 php  planning 

5
为什么要使用内存数据库进行集成测试?
当我看到许多用于测试的内存数据库实现时,我真的很困惑,因为我还从集成测试最佳实践中听到很多信息,即运行测试的环境应尽可能类似于生产环境,包括操作系统,库,数据库引擎等。 我在这里想念什么?
18 testing 

4
Python装饰器和Lisp宏
在查看Python装饰器时,有人声明,它们与Lisp宏(尤其是Clojure)一样强大。 看一下PEP 318中给出的示例,在我看来,它们只是在Lisp中使用普通的旧高阶函数的一种奇特方式: def attrs(**kwds): def decorate(f): for k in kwds: setattr(f, k, kwds[k]) return f return decorate @attrs(versionadded="2.2", author="Guido van Rossum") def mymethod(f): ... 在任何示例中都没有看到任何代码转换,如Clojure Macro的解剖中所述。另外,Python缺少同源性 可能使代码转换变得不可能。 那么,这两个如何比较,您能说他们在做事上大致相等吗?证据似乎与此相反。 编辑:根据评论,我正在寻找两件事:比较“功能强大”和“易于处理”。
18 python  lisp  clojure  macros 

5
在编程工作中,错过最后期限是否很常见?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 6年前关闭。 已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 那是我在oDesk的自由职业者的工作。在给定的时间内,我已经完成了一些工作,但这是我第一次错过截止日期。这项工作非常漫长,我尽力了,但我仍然错过了最后期限。现在,我很害怕。我错过了最后期限是我的错。 我的问题是:这是一个大问题,还是在编程工作中普遍错过最后期限,所以我不必为此担心太多吗?

6
处理遗留代码是否能帮助一个程序员发展?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 我是一名Java开发人员,拥有超过一年的经验,这使我比初级人员高一些,但是还不是中级开发人员。最近,为我提供了一个长期项目,该项目涉及研究现有银行应用程序代码4个月,然后在需要时进行更改。作为一个经验不足的程序员,我正在寻找开发方法,我不知道这样的项目会给什么。 对于初学者来说,您是否认为处理大型且可能不太好的书面申请是一种好习惯?

4
使用TFS跟踪生产支持中的错误
我刚搬到一家新公司,他们正在使用TFS 2010(几个月后的2012)作为他们的版本控制系统,最近开始将其用作开发人员的工作跟踪系统。 但是,似乎没有供开发和测试之外的人员使用的错误跟踪系统。生产支持正在获取有关问题的报告,即时进行修复,并立即向其用户报告。这需要进行更改,但是我真的不希望有一个完善的系统来跟踪错误和跟踪开发人员的工作。 有没有一种方法可以像FogBugz一样创建一种非常轻巧的将错误输入TFS的方法?登录TFS来填写错误报告似乎很繁重,您必须将其与特定的应用程序关联。支持人员可以执行此操作,但是我希望能够对项目进行分类,并可能将关联更改为应用程序以外的其他内容。 我过去曾经使用过FogBugz,并且在添加错误时,可以根据需要添加很多/小项,以便至少将其记录下来,然后当您对票进行分类时,可以将其弹回以获取更多信息。 。

2
这是什么类型的问题,解决这个问题我需要知道什么数学?
蘑菇栽培需要相当精确的底物(又名生长培养基)的化学成分。让我们假装我们正在种植香菇,这是其基材的必需成分: Nitrogen | Benzene | Toluene | Dioxygen Diflouride 5% | 5% | 10% | 80% 我们想用我们知道的化学成分的现有材料创建合适的基材。 Material | Nitrogen | Benzene | Toluene | Dioxygen Diflouride apples | 5% | 0% | 5% | 90% oranges | 20% | 20% | 50% | 10% Etc... 如何计算呢?它使我想起了在高中求解矩阵的过程。这是矩阵可以完成的事情吗?这个问题叫什么?我需要知道什么来解决它?

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.