软件工程

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

2
登录JSON对性能的影响
我看到越来越多的有关登录JSON的文章。您也可以在NodeJS博客上找到一个。为什么每个人都这么喜欢它?我只能看到更多的操作参与其中: 正在创建几个新对象。 字符串化对象,涉及计算字符串长度或多个字符串分配。 GC创建的所有废话。 使用JSON日志记录和常规字符串日志记录时,是否有任何性能测试?人们在企业项目中是否使用JSON(用于记录)?
22 logging  json 

3
签署CLA如何防止开源项目中的法律问题?
例如:yeoman。它已获得BSD许可。该CLA形式(贡献者许可协议)不是项目具体的,它可以以电子方式签署。 签署此协议如何以及如何阻止哪些问题? 我贡献的大小有多重要? 为什么有些项目要求签署的CLA接受补丁,而另一些则不需要?(例如,node.js与rails)

5
您如何跟踪敏捷团队的需求文档?
我知道用户故事在敏捷世界中占主导地位,但是如何存储这些工件,以便加入团队的新开发人员可以赶上需求? 如果用户故事稍后更改,该如何更新并将其保留为工件呢?我已经看到许多团队只是打开一个新的票证/功能请​​求/错误报告,而不是跟踪原始故事。

7
软件腐烂主要是指性能还是凌乱的代码?
维基百科对软件腐烂的定义集中在软件的性能上。这与我习惯的用法不同。在代码的整洁和设计方面,我想的更多,在代码具有所有标准质量特征(可读性,可维护性等)方面。现在,当代码变得不可读时,性能可能会下降,因为没人知道发生了什么。但是术语“软件腐烂”是否对性能有特别的提及?还是我认为它是指代码的整洁性对吗?或者这可能是该术语在多种意义上被普遍使用的情况-从用户的角度来看,这与性能有关;但是对于软件工匠而言,它必须更专门地处理代码的读取方式?

5
在什么时候异步读取磁盘I / O比同步更有效?
假设有一些代码可以读取多个使用者的文件,并且文件的大小是任意的:异步读取文件的效率如何提高?或者换一种说法,要同步读取文件,文件必须快到多小? 我注意到(也许我不正确),当读取非常小的文件时,异步读取它们比同步读取(尤其是.NET)需要更长的时间。我假设这与设置时间有关,例如I / O完成端口,线程等。 有什么经验法则可以帮助您吗?还是取决于系统和环境?
22 efficiency  async  io 

6
对象应该知道自己的ID吗?
obj.id似乎相当普遍,似乎也落入了对象可能了解的自身范围之内。我发现自己在问为什么我的对象应该知道自己的ID? 它似乎没有理由拥有它吗?存在它的主要原因之一是检索它,因此我的存储库需要知道它,然后将其用于数据库交互。 我还曾经遇到一个问题,我想将对象序列化为RESTful API的JSON,其中id似乎不适合有效负载,但是仅URI并将其包含在对象中使事情变得更加困难。 对象应该知道它自己的ID吗?为什么或者为什么不? 更新: 条款 id:对象的标识符属性。用数据库术语来说,代理键不是自然键。 对象:系统中的实体或其他可唯一标识的对象。

5
最终用户如何应对这种不幸的非假设情况?
我在一家中型公司工作,但IT力量很小。 去年(2011年),我编写了一个受大量最终用户欢迎的应用程序。去年年底,我们赶到了最后期限,但最终并未将某些功能(从现在开始我称为funcA)添加到应用程序中。因此,此应用程序自2011年底以来一直在现场/生产中运行,我可能会添加,没有任何问题。 昨天,一群最终用户开始抱怨应用程序中从未使用过的funcA不再起作用。我们在这家公司的工作重点是,如果某个应用程序被破坏,则必须在确定优先级的项目之前先对其进行修复。 我已经比较了代码和查询,自2011年以来没有区别,这就是proofA。然后,我能够让一位最终用户承认它从未使用过proofB,但是从那以后,那个最终用户又回过头来说它以前已经在工作……我相信最终用户的群体已经吸收了她。我还查看了该项目的注释,该注释包含有关该项目的要求和每日更新,其中特别指出“ proofC由于时间限制而未实现”。 我已经与其中许多人进行了交谈,我看到它们可能会在哪里混淆,因为它们与编程背景相距甚远,但是我也知道它们足够聪明,可以在小组中采取行动,从而绕过项目优先顺序以获取他们想要使他们的工作更轻松的功能。 最糟糕的部分是,即使没有代码或查询的更改,现在团队思考开始起作用,而我的老板和IT主管实际上开始相信他们。就检查逻辑状态而言,它非常干and,直到1 = 1时,funcA将不起作用。 因此,这是对方案的描述的结尾,但是由于此原因,我试图在性能指标上不加赘述,这实际上将使我不得不解决不存在的生产问题,而该问题很可能会接管1个月。

6
仍然使用Subversion的特定原因?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 我想为我的公司选择一个版本控制系统。到目前为止,我知道我有Git,Subversion和Mercurial。 这些天来,我发现Git是最常用的,所以我不禁要问:仍然有任何特定的原因仍然需要使用Subversion,还是应该直接使用Git?

8
为什么源代码控制系统仍大多以文件为后盾?
似乎更多的源代码控制系统仍将文件用作存储版本数据的手段。Vault和TFS使用Sql Server作为它们的数据存储,我认为这对于数据一致性和速度会更好。 因此,为什么SVN,我相信GIT,CVS等仍然将文件系统用作本质上的数据库(我问这个问题,因为我们的SVN服务器只是在正常提交期间损坏了自己),而不是使用实际的数据库软件( MSSQL,Oracle,Postgre等)? 编辑:我想问我的问题的另一种方式是“为什么VCS开发人员推出自己的结构化数据存储系统而不使用现有的结构化数据存储系统?”


7
工作流工具的价值是什么?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 我是Workflow开发的新手,我认为我并没有真正了解“大局”。或者换句话说,这些工具目前并没有在我的脑海中“点击”。 因此,似乎公司喜欢创建用于描述流程的业务图纸,并且在某个时刻有人决定可以使用像状态机这样的程序来实际控制线和方框(如图表)中的流程。十年后,这些工具非常庞大,极其复杂(我的公司目前正在使用WebSphere,并且我参加了一些培训,这是一个怪兽,甚至像Activiti这样的工作流工具的所谓“极简主义”版本也是如此。庞大而复杂,尽管不如WebSphere afaict的野兽那么复杂)。 用这种方法最大的好处是什么?我可以理解简单的折线图和箱形图很有用,但是据我所知,这些东西目前是可视化的编程语言,带有条件和循环。在这里,程序员似乎在行和框层中进行了大量工作,在我看来,这就像是一种非常糟糕的,非常基础的可视化编程语言。 如果要走的那么远,为什么不只使用某种脚本语言呢?人们有没有为此把婴儿和洗澡水一起扔出去?线条和盒子的事物是否被带到了荒谬的水平,或者我只是不理解所有这些的价值? 我真的很想看到使用此技术的人们对此进行辩护并理解其用途的理由。我看不到其中的价值,但我认识到我对此也很陌生,可能还不太了解。
22 java  workflows  soa  bpm 

4
为什么将某些东西放在堆栈上称为“推”?
根据http://dictionary.reference.com 推 动词(与宾语一起使用) 用力压迫或压迫(事物)以将其移开。 通过施加力以特定的方式移动(某物);推; 开车:把东西推开;推开门。 通过推开障碍来实现或完成:通过人群。 使延伸或投射;推力。 敦促或敦促采取某种行动或方针:他的母亲强迫他找工作。 该IMO适合FIFO队列。对此有解释吗?

6
我应该如何测试我的测试代码?
大多数软件开发人员都同意的几件事之一是,除非您对其进行测试,否则您不应依赖于代码才能正常工作。如果您不对其进行测试,则可能包含隐藏的错误,这些错误只会导致您日后要做更多的工作。 我知道如何测试我的普通代码,但是我应该如何测试我的测试代码,以确保它们可以有效地发现并报告出现的错误?我个人非常愚蠢,无法编写本应通过的错误测试用例,因此一开始就破坏了我编写测试的目的。幸运的是,我及时发现并修复了错误,但是根据测试的口头禅,如果没有一套自己的测试来确保它能够正常工作,似乎没有一套完整的测试套件。 在我看来,执行此操作的最佳方法是确保错误代码的测试失败。*如果我花2分钟的时间交替向代码中添加错误并确保失败,那么我应该有一个可以接受的信心,即测试“工作”。这使我想到第二个问题:有什么好的方法可以引入bug以确保它们被测试用例捕获?我是否应该随机注释掉语句,if-else否定条件来确保运行错误的分支,并更改带有副作用的代码的执行顺序等,直到我满意我的测试将抓住大多数常见的错误?专业开发人员如何验证他们的测试确实按照他们的预期去做?他们只是假设测试有效,还是花时间测试它们?如果是这样,他们如何测试测试? 我并不是在建议人们花太多时间测试他们的测试,然后再测试他们的测试,以至于他们从来没有真正编写过真正的代码,但是我做的愚蠢的事情让我觉得我可以从中受益进行“元测试”,并且对实现此目标的最佳方法感到好奇。:D *我可以检查在测试“无错误”代码时测试是否通过,但是使用代码作为测试规范似乎倒退了……

16
如何确定编程是否适合我?[关闭]
想要改善这篇文章吗?提供此问题的详细答案,包括引文和答案正确的解释。答案不够详细的答案可能会被编辑或删除。 关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 7年前关闭。 已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 我具有IT背景,并且非常有信心,直到有机会进行编程(C#)的工作。我之前从未编程过,而我正在编程的软件是我从未使用过的程序(3D建模软件)。 从那以后已经六个月了,我想放弃。我没有接受太多的培训...在过去的6个月中,大约进行了3周的培训。 我认为我会擅长编程,但是这种经验使我重新考虑了自己的决定。我不确定是我还是这种挫败感是正常的。 如何确定编程是否适合我?
22 learning 

4
如何编写机器人(和其他机械设备)的单元测试?
我是高中机器人俱乐部的成员,并且负责对机器人进行编程。我不断听到各种各样的成年人的建议是,我应该编写单元测试来帮助验证我的代码。代码基础变得越来越大,我同意单元测试对帮助我更快地发现错误确实很有帮助。 但是,我不完全确定如何实现这一目标。据我所知,单元测试是通过采用一个函数(或代码的子系统)并向其提供一组输入以确保每次输出都具有相同的输出来完成的。我目前拥有的代码不会进行繁琐的数据处理,而是直接操作机器人上的硬件组件。大多数复杂性来自确保电子设备健全,当前代码与机器人上的实际硬件相匹配等等。通常,我只能通过将代码加载到机器人本身来查看是否存在问题,并尝试运行它。 通过扩展,如何为旨在操作任何机械设备的代码编写单元测试?在我看来,您只能通过肉眼观察机器的运行来捕获错误。 还是我只是误解了单元测试应该如何工作? (如果重要的话,这里是代码,它是用C ++编写的,我正在参加FRC)

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.