软件工程

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

4
如果每个测试只能有一个断言;如何测试多个输入?
我正在尝试建立一些测试用例,并且已阅读到您应该尝试限制每个测试用例的断言数量。 所以我的问题是,测试带有多个输入的功能的最佳方法是什么?例如,我有一个函数,可分析用户的字符串并返回分钟数。字符串可以采用形式"5w6h2d1m",其中w, h, d, m对应于星期,小时,天和分钟数。 如果我想遵循“每个测试规则1条断言”,我将不得不对每种输入变化进行多次测试?这似乎很愚蠢,所以我只有这样: self.assertEqual(parse_date('5m'), 5) self.assertEqual(parse_date('5h'), 300) self.assertEqual(parse_date('5d') ,7200) self.assertEqual(parse_date('1d4h20m'), 1700) 在一个测试用例中。有没有更好的办法?

2
建立一个扔掉vs第二系统效果
一方面,有一条建议说“建一个要扔掉”。只有在完成软件系统并查看最终产品之后,我们才能意识到设计阶段出了什么问题,并了解我们应该如何真正做到这一点。 另一方面,存在“第二系统效应”,它表示设计的同一类型的第二系统通常比第一个系统差。有许多功能不适合第一个项目,而被推入第二个版本通常会导致过于复杂和过度设计。 这些原则之间不是在这里有些矛盾吗?对这些问题的正确看法是什么,两者之间的边界在哪里? 我认为,这些“好的做法”是在弗雷德·布鲁克斯(Fred Brooks)的开创性著作《神话人月》中首次得到推广的。 我知道其中一些问题已通过敏捷方法解决,但从深处看,问题仍然是原则。例如,在上线之前,我们不会对3个Sprint进行重要的设计更改。

5
什么是第三方代码?
受此问题启发使用第三方库-始终使用包装器吗? 我想知道人们实际上认为第三方库是什么。 来自PHP的示例: 如果我正在使用Zend框架构建应用程序,是否应该将Zend框架库视为第三方代码? C#中的示例: 如果正在构建桌面应用程序,是否应该将所有.Net类都视为第三方代码? Java示例: 是否应将JDK中的所有库都视为第三方库? 有人说,如果一个库是稳定的并且不会经常更改,那么就不需要包装它。但是我看不到如何包装不依赖第三方代码的类。

2
NASA是否许可开发的软件?
NASA提供了一个名为Panoply的可视化软件。有一个“ 信用和确认”页面,该页面确认并列出软件依赖项的许可证,但不提供有关其自身许可证的信息。 我看过NASA生产的其他软件,包括GISS的源代码,找不到任何有关许可证的信息。 在全球气候模型EdGCM Global 的常见问题解答中,我可以找到最接近的信息,该代码表示​​代码位于“公共领域” NASA的标准做法是将代码发布到公共领域? 有例外吗? 我是否可以假定Panoply是公共领域,并且可以不受软件依赖许可证的约束而不受限制地使用? 是否存在没有特定的权限来重用代码是否值得关注(此问题是在另一个问题的答案中提出的) 这种做法在政府机构中有多普遍?

6
抽象类,接口和何时使用它们之间有什么区别
最近,我开始全神贯注于OOP,现在到了这样的地步,我越了解抽象类和接口之间的差异,就越会感到困惑。到目前为止,都无法实例化。接口或多或少是结构的蓝图,它们通过能够部分实现代码来确定骨架和摘要是否不同。 我想通过我的具体情况了解更多有关这些的信息。这是我第一个问题的链接,如果您需要更多背景信息:新班级的良好设计模型是什么? 这是我创建的两个类: class Ad { $title; $description $price; function get_data($website){ } function validate_price(){ } } class calendar_event { $title; $description $start_date; function get_data($website){ //guts } function validate_dates(){ //guts } } 因此,如您所见,这些类几乎是相同的。这里没有显示,但也有其他的功能,like get_zip(),save_to_database()跨越我的课是常见的。我还添加了其他类“汽车”和“宠物”,这些类具有所有常用方法,并且当然具有这些类的特定属性(例如,里程,重量)。 现在,我违反了DRY原则,并且正在多个文件中管理和更改相同的代码。我打算开设更多课程,例如船,马或其他。 那么这是我要使用接口或抽象类的地方吗?根据我对抽象类的了解,我将使用超类作为模板,并将所有常见元素内置到抽象类中,然后仅添加将来类中特别需要的项目。例如: abstract class content { $title; $description function get_data($website){ } function common_function2() { } function common_function3() …

1
参数和参数之间有区别吗?
可能是这样的:参数表示来自调用方POV,参数表示在过程内部,或相反。 还是没有区别? 更新资料 在瑞典语中,我们说“ anropsparametrar”,即“正在调用过程的参数”,而不会说“ anropsargument”(“正在调用过程的参数”)。

1
REST插入的正确响应-完整的新记录,还是仅记录ID值?
我正在构建一个REST API,该API允许插入(POST,而不是幂等)和更新(PUT,幂等)请求,以向我们的应用程序添加/更新数据库。 我想知道是否有关于在POST(插入)操作的响应中将哪些数据发送回客户端的标准或最佳实践。我们需要至少发送回一个记录ID值(例如,您的新记录是记录#1234)。 我们应该以全部对象回应吗?(例如,它们基本上与从“ GET / object_type / 1234”请求中获得的响应相同) 我们是否应该仅使用新的ID值进行响应?(例如,“ {{id:1234}”,这意味着如果他们想获取整个记录,则需要执行额外的HTTP GET请求以获取完整记录) 重定向标头将它们指向完整对象的URL? 还有其他东西吗?
15 rest 

6
在没有更多经验丰富的开发人员的情况下,如何在进行实际项目时提高技能?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,以使它成为软件工程堆栈交换的主题。 4年前关闭。 我是一家小公司的首席开发人员,使用C#和ASP.Net。我们的团队很小,只有2-3人,没有太多的开发和设计经验。我没有机会向更多的高级开发人员学习,我的团队中没有人可以指导我并帮助我选择最佳方法,因为我自己会照顾大部分项目。 在没有更多经验丰富的开发人员的情况下,如何在实际项目中工作时提高软件开发技能?

6
为什么极限编程(XP)已过时而支持敏捷,看板等?
我喜欢XP(极限编程),尤其是在同一屏幕上有2个程序员的部分,因为通常只有您解释自己在做什么,而结对编程会迫使您解释自己在做什么,这样才能更快地找到问题的解决方案在做。 在过去的10年左右的时间里,XP的工作方式似乎已经过时,倾向于使用工作方法:敏捷和/或看板。为什么?因为XP在我看来是一种很好的工作方式,并且与编程有关,而敏捷和看板则与过程有关。

6
我们应该排除代码进行代码覆盖率分析吗?
我正在开发几个应用程序,主要是遗留应用程序。当前,它们的代码覆盖率非常低:通常在10%到50%之间。 自几周以来,我们与班加罗尔团队进行了周期性讨论(开发的主要部分在印度境外进行),以排除Cobertura的软件包或类(我们的代码覆盖率工具,即使我们当前正在迁移到JaCoCo)也是如此。 他们的观点如下:由于他们不会在应用程序的某些层上编写任何单元测试(1),因此应将这些层简单地排除在代码覆盖率范围之外。换句话说,他们希望将代码覆盖率度量标准限制为已测试或应该测试的代码。 同样,当他们为复杂的类进行单元测试时,由于在大型应用程序中所带来的好处-仅在代码覆盖率方面-不会被注意到。减少代码覆盖范围的范围将使这种工作更加明显。 这种方法的好处是我们将有一个代码覆盖率度量,它指示我们认为可测试的应用程序部分的当前状态。 但是,我的观点是我们在某种程度上伪造了数字。该解决方案是轻松实现更高级别代码覆盖率的简便方法。令我困扰的另一点是:如果我们显示从一个星期到另一个星期的覆盖率增加,我们如何分辨这个好消息是由于开发人员的良好工作还是仅仅是由于新的排除因素? 此外,我们将无法确切知道代码覆盖率度量中考虑的内容。例如,如果我有10,000行代码应用程序,且代码覆盖率达到40%,则可以推断出40%的代码库已经过测试(2)。但是,如果我们设置排除条件会怎样?如果现在代码覆盖率达到60%,我该如何准确扣除?我的“重要”代码库中有60%经过测试了吗?我怎么能够 就我而言,即使我们对此不太满意,我还是希望保留“真实的”代码覆盖率值。此外,借助Sonar,我们可以轻松地在代码库中导航,并知道任何模块/包/类的代码覆盖范围。但是,当然,全球代码覆盖率仍然很低。 您对该主题有何看法?您如何处理项目? 谢谢。 (1)这些层通常与UI / Java bean等有关。 (2)我知道那不是事实。实际上,这仅意味着我的代码库的40%

3
为应对挑战做好准备[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,以使它成为软件工程堆栈交换的主题。 5年前关闭。 几天前,我发现了Codility,并尝试了他们的挑战。我必须说。我把盘子放在盘子后面。我不确定是什么问题,但是我会舔伤口,等待解决方案出来,然后将其与自己的解决方案进行比较。同时,我想为下一个挑战做好准备,因此我正在阅读他们以前的博客文章,并了解如何解决他们先前的问题。我有很多新的事情都还没听说过(笛卡尔树,各种排序算法等)。 因此,如何应对这些挑战(尤其是O(x)的时间和空间复杂性)。我应该读些什么,以准备完成这样的任务?
15 skills 

7
为什么不提交未解决的更改?
在传统的VCS中,我可以理解为什么您不提交未解决的文件,因为您可能会破坏构建。但是,我不明白为什么您不应该在DVCS中提交未解析的文件(其中有些实际上会阻止您提交文件)。 相反,我认为你的版本库应该从被锁定推和拉,但不承诺。 在合并过程中能够提交有几个优点(如我所见): 实际的合并更改在历史记录中。 如果合并很大,则可以进行定期提交。 如果您犯了一个错误,那么回滚会很容易(不必重做整个合并)。 在将文件标记为已解决之前,可以将其标记为未解决。这将防止推/拉。 您还可能有一组变更集充当合并,而不是一个变更集。这样一来,您仍然可以使用的工具git rerere。 那么,为什么要对未解决的文件进行提交以防止/阻止呢?除了传统之外,还有其他原因吗?

5
AI的最新编程语言?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,以使它成为软件工程堆栈交换的主题。 5年前关闭。 几十年来,用于AI的编程语言选择是Prolog或LISP,还有其他一些不太知名的语言。它们大多数是在70年代之前设计的。 在其他许多领域特定的语言上发生的变化很多,但是在AI领域却没有Web特定语言或脚本等出现那么多。 是否有最新的编程语言旨在改变AI中的游戏并从以前的语言中学习不足?

5
一种从方法返回多个返回值的方法:将方法放入表示返回值的类中。这是一个好的设计吗?
我需要从一个方法返回2个值。我的方法如下: 创建一个具有2个字段的内部类,这些字段将用于保留这2个值 将方法放在该类中 实例化该类并调用该方法。 该方法中唯一要更改的是,最后它将为实例的字段分配这两个值。然后,我可以通过引用该对象的字段来解决这些值。 这是一个好的设计,为什么?

9
如何说服非技术客户他们的应用规范需要简化?
通常,我遇到的情况是,新客户使用的应用程序实际上具有数百个不必要的功能,很显然,要使项目有成功的机会,就必须彻底简化事情。您如何说服客户采取更可行的最低可行产品(MVP)方法并进行简化? 编辑: 因此,当前的最佳答案是为客户提供庞大应用程序的时间/成本估算。我不太喜欢这个答案,因为它不能解决这种情况下的真正问题。那就是-选择一个大型应用程序然后尝试从头开始构建它是一个不好的做法。最初建立一个小型,简单的MVP基础时,我感到更加自在。然后在基础上逐个添加一些小功能。那么,如何说服客户以这种方式开发软件呢?

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.