软件工程

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

9
冲刺应该有多放松(或没有放松)?
完成分配给冲刺的故事的态度应该是什么?显然,您想优先考虑在sprint中完成它们,但是对我而言,敏捷的全部要点是动态的:您不想故意拖延或使其“错过”在sprint中完成用户故事的机会,但是在当出现意外情况,而那些故事没有完成并被推送到下一个冲刺的同时,您也不希望感觉自己做错了什么。那不应该是令人恐惧或消极的经历,对吗? 缺少冲刺承诺是否可以接受负面/恐怖经历?当出现必须处理的意外任务(例如生产支持)时,开发人员是否应该对错过的冲刺承诺负责?
12 agile  sprint 

2
Webkit作为.Net / Mono中的GUI
我想制作一个跨平台应用程序,该应用程序还将有一个网站,桌面应用程序(Windows,iOS,Linux)将与服务器进行对话,并使用户数据保持同步。 到目前为止,我看到的选择是: 为这三个操作系统中的每一个编写一个本机GUI,所以我将拥有3个GUI代码库(和一个后端系统) 使用类似GTK的工具,这样我就可以在所有提及的平台上使用一个受支持的系统。 但是我无法找到更多信息的第三个窗口(可能是因为我对C#和.Net还是陌生的,所以我没有搜索正确的术语)是要有一个内置了嵌入式WebKit实例的窗口,这将允许我使用与网站相同的GUI系统。这将使客户端应用程序和网站看起来彼此尽可能接近,从而使用户熟悉该界面。 WebKit的最后一个选项是否合理?我已经非常了解JavaScript / HTML,并且如果我可以使用该知识来创建界面,那将很棒。这也是允许用户使用插件自定义界面的好方法,并且他们可以使从本地到Web的任何UI首选项保持同步。
12 c#  .net  javascript  gui  mono 

6
谁负责修复漏洞?
开源项目中出现过几次这样的情况: 我注意到我们的部署中存在一个错误,并找出了一个快速的补丁程序。(例如,仅注释掉我们实际上不需要的代码。) 我花了一些额外的精力来找出真正的错误,提出一个补丁,然后通过Git pull请求或类似的方式提交它。 我的拉取请求被拒绝。补丁可能是不完善的(例如,本来不应该包含的行),也许违反了编码风格,也许还有其他影响。也许我在Git中做错了-拉取请求应该已经重新设置了基础。维护人员提供有关如何改进补丁程序的反馈,并要求我重新提交它。 在这一点上,我对应该走多远感到困惑。就我而言,我没有问题:我已在步骤1中修复了该问题。我已经报告了该问题,甚至还采取了措施将其修复。但是我不认为这是“我的”请求请求,因此我不认为应该负责改善补丁。 让我烦恼的一种特殊情况是,在讨论了我的补丁程序的失败之后,我们在邮件列表中就正确的补丁程序达成了共识(即,它的行为方式,有时包括每行阐明的代码)。然后,我仍然有责任实际生成并提交补丁。 在这些情况下是否有标准礼节?他们如何解决?我的反应异常吗?您需要多长时间才能接受错误修复? (请注意,当我说“开放源代码项目”时,其中一些很小,但可能不是业余爱好-只是几个组织使用的小型软件项目,这些组织将开发人员的资源投入到他们的工作中。是“修复补丁并重新提交”,请理解我对雇主有​​责任从事对他们有利的工作。花时间修复不影响我们的错误是错误的……)

14
如何使新团队成员了解该项目的最新动态?[关闭]
按照目前的情况,这个问题并不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 我们将为软件团队雇用1-2名新工程师(由3名开发人员和1名测试人员组成)。 将他们整合到团队中的步骤是什么? 我的想法是: 阅读文档(编码标准,我们使用的开发方法学中的文档) 让他们阅读现有代码 给他们分配一些简单的任务 最后,让他们负责代码部分 我们还能做什么? 该项目在医疗领域(超声系统),已经进行了5年。我们每年发布一次,当我们要增加1-2名工程师时,我们将完成一个发布。 该项目处于维护阶段(重构旧代码,并添加新功能)。事情几乎按计划进行(或多或少)。
12 team  integration 

5
是否应该将抽象类中的所有公共方法标记为虚拟?
最近,我不得不在正在使用的某些OSS上更新抽象基类,以便通过将它们虚拟化来使其更具可测试性(我不能使用将两个接口组合在一起的接口)。这让我开始思考是否应该标记我需要虚拟的所有方法,还是应该标记每个公共方法/属性都是虚拟的。我通常同意Roy Osherove的观点,即每种方法都应该虚拟化,但是我遇到了这篇文章,使我开始思考是否需要这样做。为了简单起见,我将限于抽象类,但是(我确定所有具体的公共方法都应该是虚拟的都是值得商de的)。 我可以看到您可能希望在哪里允许子类使用方法,而不希望它覆盖实现。但是,只要您相信将遵循Liskov的替代原则,那为什么不容许它被取代呢?通过将其标记为抽象,无论如何都在强制某种重写,因此,在我看来,抽象类内部的所有公共方法都应确实标记为虚拟。 但是,我想问一下是否有我可能没有想到的事情。应该将抽象类中的所有公共方法设为虚拟吗?

3
错误或错误作为第一个参数的不同回调?
几天前,我们(和JS SO聊天室)与@rlemon讨论了他的Little-XHR库有关错误处理的问题。 基本上,我们想确定应该使用哪种错误处理模式: xhr.get({ // Some parameters, and then success: function(data) {}, failure: function(data) {} }) 要么: xhr.get({ // Some parameters, and then callback: function(err, data) {} }) 一个更像jQuery,而另一个更像Node。有人说第一种模式使您更多地考虑处理错误。我认为相反,因为您可能会忘记其他回调函数,而参数始终位于第二个模式中。 关于这两种模式有什么意见/优势/缺点吗?

2
git,maven和jenkins-版本,开发和发布构建工作流程
使用git,maven和jenkins进行以下操作的首选方式是: 我正在开发一个应用程序,我想维护它的“ dev”和“ release”分支。我希望詹金斯同时建立两者。发行工件可能具有1.5.2之类的版本,而dev-builds仅为0.0.1-SNAPSHOT。我不想有2个不同的pom.xml文件。 我查看了配置文件,但是它们似乎无法更改工件版本。我研究的一种方法可能是在测试版本中添加“限定符”。当然,我可以重命名该文件,因为关于此的真实工件信息并不重要,因为该应用程序是独立的。 这样做的首选方式是什么?还是您会怎么做?

3
实现与C ++ 11的前向兼容性
我在大型软件应用程序上工作,该应用程序必须在多个平台上运行。其中一些平台支持C ++ 11的某些功能(例如MSVS 2010),而某些则不支持任何功能(例如GCC 4.3.x)。我希望这种情况会持续数年(我的最佳猜测:3-5年)。 鉴于此,我想设置一个兼容性接口,以便(尽可能)人们可以编写C ++ 11代码,而这些代码仍可以用较旧的编译器进行编译,而只需很少的维护。总体而言,目标是尽可能合理地最小化#ifdef,同时仍在支持它们的平台上启用基本的C ++ 11语法/功能,并在不支持它们的平台上提供仿真。 让我们从std :: move()开始。实现兼容性的最明显方法是将这样的内容放入公共头文件中: #if !defined(HAS_STD_MOVE) namespace std { // C++11 emulation template <typename T> inline T& move(T& v) { return v; } template <typename T> inline const T& move(const T& v) { return v; } } #endif // !defined(HAS_STD_MOVE) 人们可以这样写 …
12 c++  c++11 

3
有没有像Head First系列这样教的算法书?[关闭]
按照目前的情况,这个问题并不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 作为Java程序员,我需要学习算法(用于编程挑战)。我读了一些Head First Series(我拥有的JAVA),他们对大脑很友好。因此,我想知道是否有任何一本简单易懂的算法书籍,并且涉及每个算法的症结所在。
12 java  books  algorithms 

5
学习数学的长期进攻计划?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,以使它成为软件工程堆栈交换的主题。 4年前关闭。 我是一名网络开发人员,希望将自己的技能扩展到与编程相关的数学上。 作为第二职业,我在上大学时会遇到一些工作要求。 我原本希望我的教育会教给我应用数学所需的技能,但是我很快发现它过于容易测试的基于广度的方法在投入的时间上效率很低。 例如,在我的微积分2课程中,我获得的唯一对远程有用的思维扩展经验就是曲线下的体积和面积。剩下的只是单调的荣耀代数,虽然对我来说很容易,但是可以通过Wolfram alpha这样的软件在几秒钟内完成。这不是我学习数学的想法。 所以在这里,我是一个沮丧的学生,正在寻找一种方法,以专注于应用,理解和最大程度地消除不必要的乏味来提高我对数学的理解。 但是,考虑到这种方法,我找不到一个好的长期学习策略。 因此,对于那些志趣相投的人,您将如何去学习必要的数学运算法则,而又不必过多地担心计算机可以做得更好呢?
12 education  math 

14
可选要求的更好用词?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 6年前关闭。 对于软件工程中的可选要求,哪个词更好?这句话是矛盾的。我在先前的项目中使用了“非核心要求”。

4
开发经理应如何处理代码“ Goal Tending”?
首先让我创造一个名词: 代码目标:早上检查代码,然后静静地检查其他开发人员前一天在文件中所做的所有更改(尤其是您最初开发的代码文件),并修复格式,逻辑,重命名变量,重构长方法等),然后将更改提交给VCS。 我已经确定了这种做法的优点和缺点: Pro:经常保持代码质量/可读性/一致性 Pro:由于其他开发人员对原始代码不太熟悉,因此已修复了一些错误。 缺点:经常是那些追求目标的开发人员的时间浪费。 缺点:偶尔会引入一些错误,这些错误会引起开发人员的愤怒,他们以为他们前一天编写了没有错误的代码。 骗局:其他开发人员对过多挑剔的行为感到恼火,并开始不喜欢为目标投标人的代码做出贡献。 免责声明:公平地说,我实际上不是开发经理,而是实际上正在执行“目标管理”的开发人员。 在我的辩护中,我认为这样做是有充分理由的(为了使我们的超大型代码库保持良好运转),但我非常担心它还会带来负面气氛。我也绝对担心我的经理将需要解决这个问题。 那么,如果您是经理,您将如何解决这个问题? 更新:我并不是说这个问题太过本地化,但是有人问过,所以也许会有一些启发性的背景。三年前,我被分配了一个巨大的项目(200K LoC),直到最近(一年之前),该项目中才添加了其他开发人员,其中一些人不熟悉体系结构,其他人仍在学习该语言(C#)。我通常必须回答产品的整体稳定性问题,当对代码库的核心体系结构部分进行令人惊讶的更改时,我尤其紧张。养成这种习惯的原因是,起初我对其他开发人员的贡献感到乐观,但是他们犯了太多错误,这些错误导致了严重的问题,直到几周后才发现。通常这些“

6
JavaScript命名约定
我来自Java,对JavaScript还是陌生的。我注意到许多使用单个字符参数名称的JavaScript方法,例如以下示例。 doSomething(a,b,c) 我不喜欢它,但是一位JavaScript开发人员说服我这样做是为了减小文件大小,并指出必须将JavaScript文件传输到浏览器。 然后我发现自己正在与另一位开发人员交谈。他向我展示了Firefox将截断变量名以更快地加载页面的方式。这是Web浏览器的标准做法吗? 使用JavaScript编程时应遵循的最佳实践命名转换是什么?标识符长度重要吗?如果有,程度如何?

3
WCF数据服务(OData)与ASP.NET Web API?超媒体?
我正在设计一个由REST服务和各种客户端(Silverlight,iOS,Windows Phone 7等)组成的分布式应用程序。我已经准备好决定要使用WCF数据服务(OData)来实现我的REST服务,但是现在MVC 4 Web API令我质疑该决定。 我喜欢OData的是免费获得的URI查询和超媒体功能。我不喜欢OData有效负载的详细程度;导线上出现了许多不必要的字符。 我喜欢Web API的原因是有效负载更加简洁,并且具有OData的URI查询功能,但是似乎缺少超媒体(至少是开箱即用的)。我的老板也在推动Web API的开发,因为“微软的力量正在支持它,而OData并没有受到人们的青睐。” 所以我有两个问题: 1)谁能评论Web API和OData的支持/牵引? 2)是否期望Web API在发布时间之前就本机支持超媒体,或者我应该研究任何现成的实现或示例? 谢谢!

2
Java为什么不对基元使用基数排序?
java.util.Arrays.sort(/* int[], char[], short[], byte[], boolean[] */) 被实现为“优化的快速排序”,而不是基数排序。 我前一阵子做了速度比较,使用n> 10000之类的东西,基数排序总是更快。为什么?
12 java  sorting 

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.