软件工程

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

3
在C ++或MATLAB中实现技术论文算法
我是电气工程专业的本科生。我已经阅读了许多有关信号和图像处理算法(重构,分段,滤波等)的技术论文。这些论文中显示的大多数算法都是在连续时间和连续频率上定义的,并且经常根据复杂的方程式给出解决方案。您将如何在C ++或MATLAB中从头开始实施技术论文,以便复制在该论文中获得的结果? 更具体地说,我正在看Wang等人的论文“通用锥束重建算法”(IEEE Trans Med Imaging。1993; 12(3):486-96),我想知道如何开始?实现他们的算法?公式10为您提供了处重建图像的公式。您将如何编码?您是否有一个遍历每个体素并计算相应公式的for循环?您将如何在该公式中编写函数的函数代码?您将如何在任意点评估函数? 我读过冈萨雷斯和伍兹写的《数字图像处理》一书,但我仍然茫然。我还阅读了有关数字食谱的系列丛书。那是正确的方法吗? 您从研究论文中编程算法有什么经验?有任何提示或建议吗?
14 c  algorithms  matlab 

5
为什么不将JavaScript用于经典应用程序开发(编译软件)?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 在使用JavaScript进行Web开发的这些年中,我得出的结论是,它是一种不可思议的强大语言,您可以用它来做令人惊奇的事情。 它提供了丰富的功能,例如: 动态打字 一流的功能 嵌套函数 关闭 作为方法起作用 作为对象构造函数 基于原型 基于对象(几乎所有内容都是对象) 正则表达式 数组和对象文字 在我看来,使用这种语言几乎可以完成所有事情,您还可以模拟OO编程,因为它提供了极大的自由度并提供了许多不同的编码样式。 通过更多面向软件的自定义功能(I / O,文件系统,输入设备等),我认为使用它来开发应用程序将非常有用。 尽管据我所知,它仅在Web开发或现有软件中仅用作脚本语言。 直到最近,也许要感谢V8引擎,它已被更多地用于其他类型的任务(例如,请参见node.js)。 为什么到现在为止仅将其降级为仅用于Web开发?是什么使它远离软件开发?

5
对故事的Scrum重新估计
每天,站起来后,我和我的团队都会更新每个故事的估算值。我觉得我们的操作方式有问题,因此需要您的帮助。 这是我们如何做到: 故事A估算:24小时(每天8小时-我们使用“理想天数”作为衡量标准) 第N天:开发人员在早上开始处理故事A(一天结束前要完成8个小时的工作) 第N + 1天:故事A重新估算= 16小时(从第N天开始,从故事A中取出一个工作日) 第N + 2天:故事A重新估算= 8小时(从第N + 1天开始,从故事A中取出一个工作日) 第N + 3天:故事A现在应该完成。但事实并非如此。开发人员认为还需要3个小时才能完成。我们在白板上更新故事并进行相应的燃尽。 第N + 4天:故事A花了整整一天而不是3个小时!现在完成了。5小时的差额在我们的计划中完全无法解决。 我们应该如何每天重新评估我们的故事?
14 scrum  estimation 

6
为什么这么多图书馆没有/缺少文档?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 与没有项目设计或体系结构文档的开源项目如何成功一样?问题,我很好奇:为什么如此众多的库缺少最终用户文档? 我的看法是这样的: 大多数人都认为阅读源代码比编写源代码更困难。 如果没有文档,则必须阅读该库的源代码才能使用该库。 因此,使用未记录的库比从头开始重新创建库要耗费更多的工作。 因此,如果您想让人们使用您的图书馆,那么最好确保它已被记录在案。 我知道许多开发人员不喜欢编写文档,并且我同意这可能是乏味的工作。但这是必不可少的工作。我什至要说,拥有一个好的文档比拥有世界上最好的程序员接口更重要。(人们一直使用糟糕的库;很少使用未记录的库) 哦,请注意,当我说文档时,是指真实的文档。不是Sandcastle / Javadoc / Doxygen样板。

5
是否应该测试算法复杂度?如果是这样,怎么办?
假设我正在实现一些简单的操作,例如搜索排序的列表/数组。该函数(在c#中)看起来类似于: static int FindIndex(int[] sortedList, int i); 我可以根据功能来实现和测试它,但是出于显而易见的原因,我通常宁愿二进制搜索胜于线性搜索或某些故意的愚蠢行为。 所以我的问题是:我们是否应该尝试编写能够在算法复杂度方面保证性能的测试,如果可以,如何做? 我已经开始在这个问题的“您应该”部分的两边都进行争论,但是我想看看人们在没有我的争论的情况下会怎么说。 就“如何”而言,这变得非常有趣:)您可以看到参数化比较运算符并进行测试,该测试的比较运算符对比较进行计数或类似的操作。但是仅仅因为你能做并不意味着你应该... 有没有其他人考虑过(可能)?谢谢。

3
实现“持续”交付的提示
一个团队经常(每周一次)遇到发布软件的困难。以下是典型的发布时间表: 在迭代过程中: 开发人员在基于master分支的短时(强烈执行)功能分支的待办事项上处理故事。 开发人员经常将其功能分支拉入集成分支,该集成分支会自动不断构建和测试(就测试覆盖范围而言)。 测试人员可以自动将其集成到暂存环境中,并且每周进行多次,从而可以持续运行他们的测试套件。 每逢星期一: 有一次发布计划会议,以确定哪些故事是“已知的好”(基于测试人员的工作),因此将在发布中。如果故事存在已知问题,则将源分支从集成中撤出。 在本周一,不得将任何新代码(仅测试人员要求的错误修复)用于集成,以确保测试人员具有稳定的代码库来减少发布。 每逢星期二: 测试人员已经在可能的时间范围内尽可能多地测试了集成分支,并且没有已知的错误,因此将发行版剪切并缓慢地推送到生产节点。 在实践中这听起来不错,但是我们发现很难实现。小组看到以下症状 在生产环境中发现了在过渡环境中未发现的“细微”错误。 最后一分钟的热修复程序一直持续到星期二。 生产环境中的问题需要回滚,这会阻止继续开发,直到成功完成实时部署并且可以更新master分支(并由此分支)为止。 我认为测试覆盖范围,代码质量,快速回归测试的能力,最新更改和环境差异都在这里发挥作用。谁能提供有关如何最好地实现“连续”交付的任何建议?

9
一位程序员,多种语言-名称难题
当您使用多种编程语言工作时,会遇到问题... 一种语言的有效名称(标识符)在另一种语言中无效。例如... var new function this是JavaScript中的关键字,但您可以在Python中自由使用它们。同样list dict def可以在JavaScript中使用而不会出现问题。 这是非常普遍的事情,程序员通常会在使用多种语言进行编程时很快熟悉它们。 但是,在进行协作时,必须为团队成员制定一些规则/准则,以确保代码的一致性和统一性。对于团队来说,这个问题比简单地记住在编程时记住什么是有效以及什么不是有效更为重要。 所以,我的问题是,您采用什么策略... 只需将您使用的所有语言中出现的所有保留字合并起来,向所有人分发一份清单,然后放弃使用? 接受多样性并在“上下文切换”时加倍努力 采取一种可以使用另一种语言的语言的中间立场,反之亦然 (注意:我只在这个问题上谈论Python和JavaScript ...但是请更广泛地回答这个问题) -更新- 感谢所有的答案。因此,我看到的普遍共识是,无论程序员使用其他语言做什么,都允许程序员使用任何名称-只要名称具有描述性,就不会受到伤害。
14 polyglot 

3
单元测试的正交性与单元测试的简洁性
我正在为视频游戏的转向系统编写单元测试。系统具有多种行为(由于原因A避免了该区域,由于原因B避免了该区域,每个行为都向该区域的地图添加了一些上下文。然后,一个单独的函数解析该地图并产生所需的运动。 我在决定如何编写行为的单元测试时遇到了麻烦。正如TDD所建议的,我只对行为如何影响所需的运动感兴趣。例如,避免-原因-A会导致移动远离建议的不良位置。我实际上并不在乎行为如何或为何为地图添加上下文,仅是所需的运动远离该位置。 因此,我对每种行为的测试都建立了行为,将其写入地图,然后执行地图解析功能来计算出所需的动作。如果该运动满足我的要求,那么我很高兴。 但是,现在我的测试取决于行为是否正常运行以及映射解析功能是否正常运行。如果解析功能失败,那么我将获得数百个失败的测试,而不是几个。许多测试写作指南都建议这是一个坏主意。 但是,如果我通过模拟映射直接针对行为的输出进行测试,那么我肯定与实现紧密结合了吗?如果我可以通过使用稍微不同的行为从地图上获得相同的期望运动,则测试应该仍然可以通过。 所以现在我正遭受认知失调。构造这些测试的最佳方法是什么?
14 tdd  unit-testing 


5
单元测试是MVC模式的主要目标吗?
最近在一次采访中,一个问题是“我们为什么要使用MVC?” 我刚刚回答说,它与许多现实世界中的系统非常接近!解释了它在可维护性,可伸缩性等方面所具有的好处。但是他们并没有说服他们,最后告诉我说MVC主要是因为它“使易于单元测试”而被使用。 虽然我知道他们的观点是正确的,但我仍然怀疑这是否是主要原因,因为(i)即使我决定不编写单元测试用例,MVC还是一个可能的选择(ii)许多有单元测试用例的GUI系统都没有按照MVC。 因此,问题是“单元测试是MVC模式的主要目标吗?” 编辑:我认为他们可能会提到测试驱动开发/编写NUnit测试用例的简便性。这是因为我们可以为模型编写测试用例(前提是视图恰好反映了模型的状态变化)-如果我错了,请纠正我。
14 mvc 


4
功能范式与底层硬件是否过于分散,以至于总体上效率不高?
受到SO中一个问题的启发:https://stackoverflow.com/questions/6623391/how-to-gain-control-of-a-5gb-heap-in-haskell 关于FP的众多优点和缺点可能是一个漫长的辩论,但就目前而言,我想将FP 的范围缩小到现代硬件上FP的主要效率。 论文: 功能范式意味着不变性和无状态性(?),但是我们运行功能性程序的硬件是有状态的有限自动机。将“纯功能”程序转换为“有状态硬件”表示形式后,程序员几乎无法控制,带来了开销(?),并限制了硬件功能(?)的使用。 我在质疑的陈述中是对还是错? 是否可以证明FP确实/不暗示对现代通用计算机体系结构的主要性能损失? 编辑: 正如我已经在回答某些评论时所说的那样,问题不在于实现性能和细节。这与是否存在主要开销有关,在有状态自动机上运行FP可能会带来这些开销。

7
可以在合同定义的项目中使用敏捷软件开发吗?
我最近与一位开发人员就敏捷软件开发进行了交谈。虽然我理解该原理,但似乎不断变化的需求为该项目带来了持续发展的潜力。但是,至少在我工作的地方,项目需要完成,因为这是合同。 也就是说,第一次迭代可能需要几个月的时间,因为对于某些项目,客户不能使用不完整的应用程序。对于某些项目,我认为您需要先定义完成,然后可以将其分解为多个迭代,并在每次迭代后完善定义。但是您必须始终具有此定义。 如果敏捷软件开发包含不断变化的需求,您如何知道它的结尾?当最终结果总是变化时,您如何为项目预算? 敏捷软件开发是否与敏捷产品有关,而不是与敏捷产品有关?
14 agile 

3
AVL树与现实世界
在学校里,我们被教导了如何在插入或删除时平衡AVL树。 这种类型的知识实际上如何在现实世界中有用?有人可以举例说明这种知识何时真正有用吗? 据我所知,在工作场所几乎没有这样的细节…… 我可以看到关于算法和某些数据结构的详细知识多么重要,但是对诸如AVL树旋转(以及类似的详细概念)之类的细节却不那么重要。 谢谢!

8
值得成为计算机语言多语言吗?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 您经常会听到程序员应该学习许多不同的语言来提高自己的水平。我仍在上学,没有丰富的编程经验(一年多一点)。但是,提高编程技能的崇高意图变成了某种OCD:我觉得直到学习所有相对已知的编程语言,我才会冷静下来。 这是一个问题本身:能够使用多种语言的编程语言实际上会对您有帮助吗?(我不是说通常的“程序员应该至少了解所有范例”,我的意思是实际上您通常会听到的所有语言)?有没有类似的经历?它对工作/技能/职业有帮助吗?您多久可以运用这些技能?

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.