软件工程

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

3
持续集成的简单说明
您将如何定义持续集成以及CI服务器包含哪些特定组件? 我想向市场部门的某人解释什么是持续集成。他们了解源代码控制-即他们使用Subversion。但我想向他们正确解释什么是CI。在维基百科的文章从来没有正确定义它,在Martin Fowler的文章仅给出以下,这基本上是同义反复其次是“一体化”的模糊解释: 持续集成是一种软件开发实践,团队成员经常集成他们的工作,通常每个人至少每天集成一次-导致每天多次集成。每个集成都通过自动构建(包括测试)进行验证,以尽快检测到集成错误。 更新:我给他们发了这张图片,我找不到一个更简单的图片。 更新2:从市场营销工作组反馈(针对存在3个问题的时间): 我实际上很喜欢这三个答案–出于不同的原因。我想登录只是为了感谢所有人! 显然他不能-所以代表他:) 更新3:我已经了解了Wikipedia文章,其中确实包含一些原则,当您仅使用标题时,它们是一个不错的清单: 维护代码库 自动化构建 使构建自检 每个人每天都致力于基线 每次提交(到基线)都应该构建 保持快速构建 在生产环境的克隆中进行测试 轻松获取最新交付物 每个人都可以看到最新版本的结果 自动化部署

10
在C ++中对向量使用列表的意义是什么?
我已经运行了3个涉及C ++列表和向量的不同实验。 事实证明,即使在中间涉及很多插入操作,带有向量的操作也更加有效。 因此,出现了一个问题:在哪种情况下列表比矢量有意义? 如果向量在大多数情况下似乎更有效率,并考虑其成员的相似程度,那么列表还有哪些优势? 生成N个整数并将其放入容器中,以便容器保持排序状态。通过逐个读取元素并在第一个较大的元素之前插入新的元素,已天真地执行了插入操作。 与向量相比,有了清单,尺寸增加时,时间就会流逝。 在容器的末尾插入N个整数。 对于列表和向量,时间增加了相同的数量级,尽管向量快3倍。 在容器中插入N个整数。 启动计时器。 使用list.sort来排序容器,使用std :: sort来对容器进行排序。停止计时器。 同样,时间以相同的数量级增加,但使用向量平均要快5倍。 我可能会继续进行测试,并找出几个清单可以证明更好的例子。 但是你们阅读此消息的共同经验可能会提供更有成效的答案。 您可能遇到过这样的情况,其中列表更易于使用或执行得更好?

4
用Java处理调试输出的正确方法是什么?
随着我目前的Java项目变得越来越大,我感到同样需要在代码的多点插入调试输出。 为了适当地启用或禁用此功能,具体取决于测试会话的打开或关闭,我通常private static final boolean DEBUG = false在测试要检查的类的开头放置a ,然后以这种方式简单地使用它(例如): public MyClass { private static final boolean DEBUG = false; ... some code ... public void myMethod(String s) { if (DEBUG) { System.out.println(s); } } } 等等。 但这并不能使我感到高兴,因为它当然有效,但是如果您不仅仅盯着其中的几个,可能会有太多的类将DEBUG设置为true。 相反,我(就像-我认为-许多其他人一样)不希望将整个应用程序置于调试模式,因为输出的文本数量可能很庞大。 那么,有没有一种正确的方法来处理这种情况,或者最正确的方法是使用DEBUG类成员?

4
使用GIT管理多个项目人员
我是GIT / GitHub的新手(从昨天开始新手)。我想知道用Github管理同一项目中的多个人的最佳方法是什么。目前,我正在与四个开发人员一起管理一个项目。 我该如何进行工作流程并确保一切都同步? (注意:所有开发人员都将拥有一个通用帐户。) 每个开发人员都需要位于不同的分支吗? 我将能够处理2个使用同一文件的人吗? 请发表详细的答案,我不是一个害羞的读者。我需要很好地理解这一点。
32 git  github 

5
我是一个gituri用户,对mercurial的分支感到困惑。我应该如何跟踪小变化?
我以前一直使用git,但是我想为python做贡献,所以现在我必须学习mercurial,我发现它非常令人沮丧。 因此,我做了几个小补丁,并希望将它们作为提交记录在本地Mercurial存储库中。显然,有四种方法可以处理水银的分支。1和4对我来说完全是荒谬的,命名分支似乎是重量级的,我觉得我不应该将它们用于快速1提交修复,所以我使用了书签。 现在,我的补丁程序被拒绝了,我想从存储库中删除我的一个书签分支。好的,在git中,我只是强行删除我的分支而忘了它,所以我删除了书签,现在出现以下问题: TortoiseHG hg log仍然显示commit和defaultbranch有2个头。如果我理解正确,那么没有其他插件您将无法删除hg中的提交。 Mercurial不仅具有散列,而且具有修订号。当我添加了一些自己的提交时,所有之后提交的提交都具有与主要中央存储库不同的修订号。 我hg update在拉动master书签后自动将其移动到最新提交,但是在TortoiseHG中找不到该方法。 我究竟做错了什么?这是正常现象吗?应该,我应该忽略这些问题吗?或者我应该如何与分支机构合作?



10
为什么在面试过程中很难回答“给您带来有关C#的五件事”的问题?[关闭]
在第73播客中,乔尔·斯波斯基(Joel Spolsky)和杰夫·阿特伍德(Jeff Atwood)讨论了“每个人都应该讨厌自己喜欢的编程语言的五件事”: 如果您对当前的工具链感到满意,则无需切换。但是,如果您不能列出您最不喜欢的编程语言的五件事,那么我认为您还不了解它。最好知道这些替代方法,并且对所使用的任何方法都保持批判的眼光。 很好奇,我问了我面试的任何候选人这个问题。他们中没有人能够引用他们至少讨厌C#¹的一件事。 为什么?这个问题有什么困难?正是由于面试压力大,被访者无法回答这个问题? 这个问题有什么问题使面试不好吗? 显然,这并不意味着C#是完美的。我自己列出了我不喜欢C#的五件事: 泛型中缺乏可变数量的类型(类似于params参数)。 Action<T>, Action<T1, T2>, Action<T1, T2, T3>, ⁞ 严重? Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16> 缺少对度量单位的支持,例如在F#中。 缺少只读属性。private readonly每当我想要只读属性时,都会写一个后备字段。 缺少具有默认值的属性。是的,我知道我可以在无参数构造函数中对其进行初始化,并从所有其他构造函数中调用它。但是我不想。 多重继承。是的,它会引起混乱,在大多数情况下您不需要它。它在某些(非常罕见)的情况下仍然有用,并且混淆也适用于该类(该类在C#中已解决),该类继承了多个包含相同名称的方法的接口。 我敢肯定,这个清单还远远不够完整,还有很多要强调的地方,尤其是比我的要好得多的地方。 ¹一些人批评.NET Framework中的某些程序集,或者该框架中缺少某些库,或者批评CLR。这不算什么,因为问题是关于语言本身的,尽管我可能会接受有关.NET Framework核心否定性问题的答案(例如,诸如以下事实这样的事实:没有通用接口TryParse,所以如果您想将字符串解析为几种类型,则必须对每种类型重复一次),关于JSON或WCF的答案完全是题外话。
32 c#  interview 

10
从微软技术转向Linux,NodeJS和其他开放源代码框架以节省启动资金是否值得?[关闭]
我目前正在参与一家初创公司,我是目前唯一参与其中的开发人员,其他人此刻将所有技术决定权交给我。 对于我的日常工作,我每天在使用Microsoft技术的软件公司工作,我们使用.NET,SqlServer,Windows Server等。但是,我意识到作为一家初创公司,我们需要降低成本,并且简要了解Windows托管的成本我很震惊地看到专用服务器的一些价格。我发现最便宜的是每月100英镑。另外,如果将来业务需要扩展,而我们最终需要多台服务器,则最终可能每年要花掉£000的£10的SQL Server / Windows Server许可费用。 然后,我快速查看了专用服务器的Linux托管价格,发现价格比Windows托管低waaaaaay。一个地方以每月不到20英镑的价格提供一台带有2核的机器。 这让我思考也许要走的路是在Linux上开源。 当我在工作中编写大量Javascript时(目前我正在开发一个单页面主干应用程序),我认为也许NodeJS和类似Express的Web框架可以使用。然后,我以为不是使用SQL,为什么不使用像MongoDB这样的开源NoSQL数据库,它对NodeJS有很好的支持? 我唯一关心的是,应用程序将要进行的一些工作将是动态地构建图像以及其他与图像相关的其他东西,例如,相当占用CPU的东西-所以我正在考虑也许可以用C ++编写任何CPU繁重的东西并将其作为Node中的模块使用。 这就是背景知识-但Linux基本上适合以下方面: 托管NodeJS / Express网站? 编译C ++节点模块? 使用像MongoDB这样的NoSQL DB? 转向这些不熟悉的技术以节省资金是一个好主意吗? 3个月更新 我在过去的几个月里一直在努力,所以我想如果有人感兴趣的话,我会进行更新。 最后,出于时间原因,我决定不使用NodeJS和Linux堆栈。我在一边进行启动,所以我每天工作9个小时,然后回家工作直到启动晚。以这种方式工作时,我显然需要尽可能提高效率,否则我将永远也不会最终交付产品。 在采纳了关于该线程的一些建议之后,我确实申请了Microsoft BizSpark,并被接受。这意味着我现在可以免费使用Visual Studio许可证,Windows Server许可证等。太棒了 希望在我们需要开始支付所有费用时,我们将交还足够多的款项,这将使其不成问题。 但是,不要以为我只是在使用Microsoft技术,因为我尝试了尽可能使用开放源代码的东西。我完成此操作的主要地方是我的数据层,在这里我决定使用PostgreSQL和MongoDB。我还在前端使用BackboneJS。 以下是我当前正在使用的技术/框架的摘要: 标准数据库资料:PostreSQL 日志记录和数据存储:MongoDB ORM:实体框架5 核心程式库:.NET(C#) Web框架:ASP.NET MVC3 UI:Razor视图引擎/ BackboneJS

2
使用Git时,建议使用master分支进行主动开发吗?
首先,在某些背景下,我们正在将所有项目团队转移到使用git的过程中,并且正在制定有关如何组织存储库的准则,以便还可以监视某些分支机构的持续集成和管理。自动部署到测试服务器。当前,正在开发两种模型: nvie.com文章对成功分支产生了重大影响,其中master分支代表最稳定的代码,最新分支用于前沿代码,而集成分支则可以进行质量检查。 替代模型,其中master分支表示最前沿的开发代码,集成分支用于代码的质量保证测试,以及生产分支,用于生产稳定的代码,可以部署。 在这一点上,有关master分支代表什么的部分语义上的问题,但是在master分支上进行主动开发实际上是一种好习惯还是不是那么重要?
32 git  branching 


12
代码是否正在审查良好做法?
当我工作的公司雇用新的经理时,他们为我们提供了在每次会议上概述某人的代码的机会。我们每两周开会一次,因此每次开发人员要在投影机上展示他/她的代码时,其他人都将讨论它。 我认为这会很棒:每个开发人员在编写代码时都会更加小心,我们可以更好地分享我们的经验。但是不知何故,我们忘记了这一要约,而要约仍然是要约。 这有什么好处,有什么缺点吗?


4
为什么F#具有交互模式而不是C#?
F#带有交互式REPL,开箱即用。C#没有任何种类,实际上如果不建立完整的项目就很难玩(尽管LINQpad可以工作,并且也可以通过powershell来完成)。 这些语言在本质上有什么不同,这些语言允许F#拥有交互式控制台,但是很难为C#实现它? 由于多年以后,人们仍然会提出这个问题,我应该指出,现在有很多选择。您可以使用Powershell(预装在每台现代Windows机器上)与.Net框架一起使用。或者,您可以使用LINQpad原型化任意c#代码。或者,您可以使用ScriptC,也可以使用在线jsfiddle类型的环境,例如Complify.net或Jsil。很多选择。
32 c#  .net  tools  f# 

6
让用户编写体面而有用的错误报告
有谁知道一个好办法,让用户写一个半体面(读:有用的)错误报告? 我们想提出一些对大多数用户有意义的内容(易于阅读和理解),同时也向开发人员提供有用的信息。 当我单击蓝色按钮时,它不起作用!啊,我刚丢了一个星期的工作……努力工作。 其实不是很有用。 我开始修正列表,但考虑与你们一起检查是否已经存在类似的方法。

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.