软件工程

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

2
为什么Scala会返回但没有中断并继续
Scala没有break或continue,因此某些循环行为需要更多的思考。 尽早结束循环需要尾递归,异常或scala.util.control.Breaks(使用异常)。 这样做的理由是,就像一样goto,它们是使流量模糊的流程构造,可以用更好,更令人惊讶的方式来完成。 但似乎可以使用相同的论点return。 为什么斯卡拉故意忽略break和continue,但不return?

2
ASP.NET MVC应用程序是否应该直接使用实体框架作为模型?
我正在Visual Studio 2013(MVC 5)中构建我的第一个MVC应用程序,但我对设置模型的最佳方法尚不清楚。 我已经从现有数据库中使用代码优先生成了一个实体框架模型。我的第一个直觉是创建一些中间类,这些中间类将成为视图使用的模型,并使这些类与实体框架类一起工作。 当我编写中介类时,我意识到我只是在重新实现EF类已经用偶尔的私有setter或从一种数据类型转换为另一种数据类型所做的许多事情。因此,这似乎是一种浪费。 是否直接将实体框架类用作MVC应用程序的模型是一般规则?还是构建这些中间课程缺少一些好处?

2
报告Haskell错误的最干净方法
我正在学习Haskell,并且遇到了三种不同的方法来处理我编写的函数中的错误: 我可以简单地编写error "Some error message.",从而引发异常。 我可以让我的函数return Maybe SomeType,在这里我可能无法返回我想返回的内容。 我可以使用函数return Either String SomeType,在这里我可以返回错误信息或首先要返回的内容。 我的问题是:我应该使用哪种处理错误的方法,为什么?根据上下文,也许我应该使用不同的方法? 我目前的理解是: 在纯功能代码中处理异常是“困难的”,在Haskell中,人们希望将事物保持尽可能纯的功能。 Maybe SomeType如果函数失败或成功(即,失败的方式没有不同),则返回是正确的做法。 Either String SomeType如果函数可能以各种方式中的任何一种失败,则返回是正确的做法。

4
如何使用单元测试和TDD来测试主要依赖数据库CRUD操作的应用程序?
在工作中,我的项目之一主要是获取从外部客户端传入的数据并将其保存在数据库中。这是一个使用JPA的Java企业应用程序,我们的大多数逻辑都围绕CRUD操作展开。 我们的大多数错误都以一种或另一种方式涉及JPA。 示例1:如果单击保存按钮两次,JPA可能会尝试第二次将同一实体插入数据库,从而导致主键冲突。 示例2:您从数据库中检索一个实体,对其进行编辑,然后尝试更新其数据。JPA可能会尝试创建一个新实例,而不是更新旧实例。 解决方案通常需要添加/删除/更改JPA批注。其他时候,它与修改DAO逻辑有关。 我无法弄清楚如何使用单元测试和TDD对我们的代码充满信心。我不确定这是因为单元测试和TDD不合适,还是我错误地解决了这个问题。 单元测试似乎不合适,因为我只能在运行时发现这些问题,并且需要部署到应用服务器以重现这些问题。通常需要涉及数据库,而我认为这超出了单元测试的定义:这些是集成测试。 TDD似乎不合适,因为部署+测试反馈循环是如此之慢,以至于我效率低下。部署+测试反馈循环需要3分钟以上的时间,这就像我专门针对所编写的代码运行测试一样。要运行所有集成测试,需要30分钟以上的时间。 在此模型之外有代码,我总是尽可能地进行单元测试。但是,我们的大多数错误和最大的时间浪费总是涉及JPA或数据库。 还有另一个类似的问题,但是如果我遵循建议,我将包装代码中最不稳定的部分(JPA)并测试除此以外的所有内容。就我的问题而言,我将处于同样的糟糕境地。打包JPA之后的下一步是什么?海事组织,这个问题(也许)是回答我的问题的步骤,而不是答案。
22 java  unit-testing  tdd  jpa 

7
在同一冲刺中进行编码和测试
如果直到冲刺结束才完成全部或大部分编码,如何在与编码相同的冲刺中处理测试?(我指的是冲刺中单个PBI的“汤对坚果”开发和测试。) 我在网上看到的大多数答案都涉及QA自动化,但这实际上是不可能的,因为您通常需要功能性UI来记录或创建自动化测试。我只有故事板随着我开发功能和发现新需求而不断发展。 就我而言,我正在开发一个新的桌面应用程序。桌面应用程序通常无法很好地进行自动化测试。我有一些自动化的单元测试,但它们不是QA专业人员执行的手动功能/集成测试。 因此,我现在的状态是明天的sprint结束,我仍然需要完成编码,而且我的质量检查人员还没有要测试的东西,也不知道如何测试如果不握住我的手给我的东西。 我确定我不是第一个遇到这种困境的人。 过去,我做过一个管道:在当前的sprint中,测试团队测试在上一个sprint中已实现的功能。在我目前的工作中,PM将这种方法称为“瀑布”,因此是不可接受的。


6
CSV是XML和JSON的良好替代方案吗?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 5年前关闭。 CSV是否被视为针对XML和JSON的编程语言的不错选择? 我通常使用XML和JSON(有时是纯文本文件)作为平面文件存储。但是,最近我在PHP中遇到了CSV实现。虽然我通常看到CSV用于Excel文件中的输入,但是我从未在编程中使用它。它在任何方面都比XML或JSON更好吗?

3
如何实施加权洗牌
我最近写了一些我认为效率很低的代码,但是由于它只包含几个值,所以我接受了它。但是,我仍然对以下方面的更好算法感兴趣: X个对象的列表,每个对象都分配有一个“权重” 权重总和 生成一个从0到总和的随机数 遍历对象,从总和中减去它们的权重,直到总和为非正数 从列表中删除该对象,然后将其添加到新列表的末尾 项目2,4和5都需要n时间,因此这是一种O(n^2)算法。 这可以改善吗? 作为加权随机播放的示例,元素具有更大的重量,位于前部的机会更大。 示例(我将生成随机数以使其真实): 6个权重为6,5,4,3,2,1的对象; 总和是21 我选择了19 19-6-5-4-3-2 = -1:,因此2进入了第一位置,权重现在为6,5,4,3,1; 总和是19 我选择了16 16-6-5-4-3 = -2:,因此3进入第二位置,权重现在为6,5,4,1; 总和是16 我选择了3 3-6 = -3,因此6排在第三位,权重现在为5,4,1;总和是10 我选择8:,8-5-4 = -1因此4排在第四位,权重现在为5,1;总和是6 我选择5:,5-5=0因此5排在第五位,权重现在为1;总和是1 我选择了1 :1-1=0,因此1移到最后一个位置,我没有重量了,我完成了
22 algorithms 

7
传播模式改变了对象模型。
这是一个常见的情况,总是让我感到沮丧。 我有一个带有父对象的对象模型。父级包含一些子对象。这样的事情。 public class Zoo { public List<Animal> Animals { get; set; } public bool IsDirty { get; set; } } 每个子对象都有各种数据和方法 public class Animal { public string Name { get; set; } public int Age { get; set; } public void MakeMess() { ... } } 当子级更改时(在这种情况下,当调用MakeMess方法时),父级中的某些值需要更新。假设当Animal的某个阈值变得混乱时,则需要设置Zoo的IsDirty标志。 有几种处理这种情况的方法(我知道)。 1)每个动物都可以有一个父Zoo参考,以便交流更改。 …

5
仅在本地计算机上使用git是否合理?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 仅在本地使用git可以吗?我不想为提供私有存储库的服务付费(例如Github),但我认为git是组织我的封闭源代码项目的好方法。

2
如何创建将修复测试视为优先事项的环境?
我是一家中型公司的软件工程师。我们在TeamCity上运行着一个相当强大的测试平台。它会在每次签入时进行单元测试,并每天运行单元测试/ BVT。 问题是-我们有很多损坏的单元测试。 通常,如果单元测试经常中断且无法维护,我会提出毫无意义的建议。无法查看更改是否引起了回归,从而消除了单元测试平台的大部分价值。 我想种下一种会养成良好习惯文化的种子-破坏测试时将其修复,将其视为有价值的东西,将测试的固定与其他工作一起放在优先位置。 我已经尝试过贿赂(烘焙食品!),只是简单地询问,并与团队负责人交谈。每个人都说这是一个好主意,但我认为这是唯一对此做任何事情的人。 鼓励他人修复测试并在冲刺中优先考虑修复的最佳方法是什么? 如果有比较主观的方式提出这个问题,我很乐意接受任何提示。

7
您在敏捷的前几个迭代中提供了什么?
据我了解,敏捷方法论的思想是,您交付的是功能性的东西,并且您经常交付。递增后,应用程序进入其最终形状递增。 但是在早期的迭代中,您可能会构建应用程序所依赖的框架或基础,因此它很重要,但对用户不可见。 在这些最初的迭代中,什么交付给客户?在构建脚手架代码时,如何显示正确方向的进度?

2
具有两个python进程访问它的SQLite:一次阅读,一次写作
我正在开发一个包含两个组件的小型系统:一个从互联网资源中轮询数据,然后将其转换为sql数据以将其持久化在本地;第二个从本地实例读取该sql数据,并通过json和一个平稳的api提供服务。 我本来打算使用postgresql保留数据,但是由于应用程序将要存储的数据量非常小,无法提供服务,因此我认为这太过分了。SQLite是否可以胜任?我喜欢占用空间小的想法,并且不需要为此任务维护另一台sql服务器,但是我担心并发性。 似乎在启用预写日志记录的情况下,可以在不将任何进程锁定在数据库之外的情况下同时进行SQLite数据库的读写。 如果只有一个SQLite实例读取并且另一个写入,则单个SQLite实例能否维持两个并发进程对其进行访问?我开始编写代码,但想知道这是否是SQLite的错误应用。

2
这类列表/地图有数据结构吗?
也许有一个我想要的名字,但是我没有意识到。我需要与LinkedHashMapJava中类似的东西,但是如果指定的键没有值,它会返回“上一个”值。 也就是说,我有一个由整数键存储的对象列表(在我的情况下以时间为单位): ; key->value 10->A 15->B 20->C 因此,如果我要查询键0-9的值,它将返回null。特殊的部分是,如果我查询10 <= i <= 14,它将返回A。或者,对于i> = 20,它将返回C。 是否有数据结构?

9
能够阅读代码,但主要为编写代码而苦苦挣扎
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 5年前关闭。 我最近第一次参加编程考试...而且我几乎失败了。根本没有做得很好。大学时代以外,我只能怪自己,我几乎什么也没做。 现在,我又在夏季临近时又来了一次,我不允许这种情况再次发生。几周以来,我一直在阅读,阅读和阅读更多内容。我一直在处理我错过的旧事物和我们正在做的新事物。因此,很明显,我对语言的理解有很大的不同。但是,仅此而已。我可以阅读代码,现在我对代码中发生的事情有所了解...但是当涉及到我自己编写代码时,我却一无所知。就像我永远不知道该采取什么方法,也永远无法真正完全理解这些问题一样。 我每天都做大量的阅读工作(过去一个月左右的时间大约是5-6个小时)……但是打开IDE时,我总是注定要死,这确实很无用。尤其是因为我了解节点,列表,数组列表,接口等方面的知识,但除了在有关页面的页面上阅读它们之外。我可以指出程序中正在发生的所有事情,因此给预采样代码添加注释就可以了……但是编写自己的代码则是另一回事了。

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.