软件工程

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

6
云计算只是资源租赁的一种方式吗?
我工作的公司最近在Windows Azure中托管了一项Web服务,并宣布了这一点。现在,在线贸易杂志说很多无意义的内容,例如“ X公司迁移到云”,“ X公司将桌面放到云中”等等。 看起来有很多材料(从Wikipedia开始)很冗长,并且谈论了很多有关“服务”和“入门价格低”的东西,但是我已经读了所有这些,并且看不到它们是怎么回事。对于外行而言,在云中的服务与Stack Exchange之间划清界限可能是有帮助的,Stack Exchange也是一项服务,但可以在同一位置的实体服务器上运行。 现在,根据我对Windows Azure的经验,真正的区别如下。借助云,服务所有者可以按需租用硬件,网络带宽和使用中间件(例如,Azure角色中使用的Windows 2008)使用中间件的权利,并且还提供一些维护帮助(例如,正在运行某个角色的计算机崩溃而另一台计算机崩溃了)会自动找到并重新部署角色)。没有云,服务所有者将不得不自己处理所有这些。 这是正确的区分吗?

5
如何在测试抗文化中开始测试?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 我要坦白:正式的自动化测试从来都不是我编程背景的一部分。我现在在一家非常大的公司工作,有很多开发人员(其中大多数是某种类型的Web开发人员),很明显,他们中的大多数人都没有测试*。(*我不会继续正式发言;请推断出来。) 如果我等待组织的支持开始测试,那将永远不会发生。如果我试图通过推动管理层的测试来“从内部改变事情”,那么在改变发生之前,我将精疲力尽。我需要立即开始测试。 但是对于TDD及其同类产品,我将最终获得大量测试代码以及​​生产代码。我们的版本控制系统(全部为集中式)并不是为了存储测试代码而组织的。我必须在我的工作站上找到所有放置的地方。 是否有可能在一种不重视或不提供工具的文化中开始个人软件测试实践?当官方工具和组织没有测试,框架和自动化的地方时,您使用什么技术和工具来进行测试?
20 testing  tdd 

5
单元测试是否会导致过早的泛化(特别是在C ++中)?
初步说明 我不会区分不同种类的测试,在这些站点上已经有一些与此有关的问题。 我会采取什么样的存在,并且说:单位的“测试应用程序的最小单位可分离”的意义测试从这个问题实际上导出 隔离问题 程序的最小可隔离单元是什么。好吧,正如我所见,它(高度?)取决于您所使用的语言。 Micheal Feathers谈到接缝的概念:[WEwLC,p31] 接缝是一个您可以更改程序行为而无需在该位置进行编辑的位置。 而且,在不进行细节讨论的情况下,我了解到在单元测试的上下文中存在的缝隙—在程序中可以使“测试”与“单元”进行交互。 例子 单元测试-尤其是C ++中的单元测试-要求被测试的代码添加更多的接缝,这对于给定的问题是严格要求的。 例: 在非虚拟实现就足够的地方添加虚拟接口 拆分-generalizing(?)-一个(较小的)类,进一步“恰好”以方便添加测试。 将单个可执行项目拆分为看似“独立”的库,“公正”以便于为测试而独立地编译它们。 问题 我将尝试一些可能会问相同问题的版本: 单元测试是“仅”对应用程序代码进行结构化的一种方式,这对单元测试是有益的,还是实际上对应用程序结构有利。 是需要的代码泛化作出任何它的单位可测试非常有用,但单元测试? 添加单元测试是否会强制一个泛化? 从问题域的角度来看,形状单元测试对代码的“总是”作用力是否也对代码总体而言是一种良好的形状? 我记得有一条经验法则,直到您需要/直到有第二个地方使用该代码时,它才会泛化。使用单元测试,总是有第二个地方使用代码-即单元测试。那么,这个理由足以概括吗?

2
为我的图书馆实施的“异常数量”是多少?
我一直想知道应该为软件的各个部分实现并抛出多少个不同的异常类。我的特定开发通常与C ++ / C#/ Java有关,但是我认为这是所有语言的问题。 我想了解抛出很多不同异常的情况,以及开发人员社区对好的库的期望。 我看到的权衡包括: 更多的异常类可以为API用户提供非常精细的错误处理级别(容易发生用户配置或数据错误,或者找不到文件) 更多的异常类允许将特定于错误的信息嵌入到异常中,而不仅仅是字符串消息或错误代码 更多的异常类可能意味着更多的代码维护 更多的异常类可能意味着该API对用户的访问性降低 我希望了解异常用法的场景包括: 在“配置”阶段,可能包括加载文件或设置参数 在“操作”类型阶段,库可能正在运行任务并正在做一些工作,也许在另一个线程中 不使用异常或较少异常(作为比较)的其他错误报告模式可能包括: 更少的异常,但是嵌入了可以用作查找的错误代码 直接从函数返回错误代码和标志(有时无法从线程返回) 发生错误时实施事件或回调系统(避免堆栈展开) 作为开发人员,您希望看到什么? 如果有很多异常,您是否还要分别处理错误? 根据操作阶段,您是否倾向于错误处理类型?

6
传统团队使用分布式版本控制的头痛?
尽管我在个人项目中使用并喜欢DVCS,并且可以完全看出它如何使其他人对项目的贡献进行管理(例如,典型的Github方案),但对于“传统”团队而言,似乎存在一些问题。 TFS,Perforce等解决方案采用的集中式方法。(“传统”是指办公室中的一组开发人员在一个项目上工作,没有一个人“拥有”,可能每个人都在使用相同的代码。) 我已经预见了其中的几个问题,但请考虑其他因素。 在传统系统中,当您尝试将更改签入服务器时,如果以前有人签入了冲突的更改,则您将被迫合并,然后才能签入。在DVCS模型中,每个开发人员都会签入他们的证书。本地更改,并在某个时候推送到其他回购。然后,该仓库中有一个由2个人更改的文件分支。看来现在必须由某人负责处理这种情况。团队中的指定人员可能没有足够的整个代码库知识,无法处理所有冲突。因此,现在增加了一个额外的步骤,即有人必须与这些开发人员之一联系,告诉他进行合并并再次推送(或者您必须构建一个自动化该任务的基础结构)。 此外,由于DVCS倾向于使本地工作变得如此便捷,因此开发人员很可能会在推送之前在其本地存储库中积累一些更改,从而使此类冲突更加常见和更加复杂。 显然,如果团队中的每个人都只在代码的不同区域工作,这不是问题。但是我很好奇每个人都在使用相同代码的情况。集中式模型似乎迫使人们快速而频繁地处理冲突,从而最大程度地减少了进行大型痛苦合并或让任何人“警惕”主仓库的需求。 因此,对于与办公室中的团队一起使用DVCS的那些人,您将如何处理此类情况?您是否发现您的日常(或更可能是每周)工作流程受到负面影响?在工作场所推荐DVCS之前,我还有其他注意事项吗?

9
仅使用功能集中通用代码是否是一种好习惯?
我经常遇到这个问题。例如,我目前正在编写一个读取函数和一个写入函数,它们都检查是否buf为NULL指针以及mode变量是否在一定范围内。 这是代码重复。可以通过将其移入其自身的功能来解决。但是我应该吗?这将是一个非常贫乏的功能(不会做很多事情),而是局部化的(所以不是通用的),并且不能很好地独立运行(除非您知道它的位置,否则无法确定您的需求)用过的)。另一个选择是使用宏,但我想在这篇文章中谈谈功能。 那么,您应该使用类似这样的功能吗?优缺点都有什么?

4
业务规则引擎和约束编程语言之间的关系
此问题是从Stack Overflow 迁移而来的,因为可以在Software Engineering Stack Exchange上回答。 迁移 8年前。 如果看过(可能是较旧的)Drools手册或某些其他规则引擎的手册,则其增值插图之一就是解决难题,例如Miss Manners难题(Drools手册)。现在,使用Prolog或较新的约束编程语言自然地解决了这些难题,有人想知道为什么有人会为此目的使用Drools。在这种情况下,Prolog和CPL所带来的附加价值是他们能够自然地将难题表达为一组逻辑谓词并自动搜索解决方案的空间(在这方面CPL效率更高)。但是,诸如Drools之类的产品的附加价值是什么(我的意思是,除了拿起Excel文件并将其转换为一组规则之外)。 更具体地说,Prolog实现了回溯搜索,CLP实现了具有约束传播的回溯搜索,因此,不是搜索单个变量的整个笛卡尔积,而是修剪掉该乘积空间的大部分。这使它们有效和有用。文献中充分讨论了Prolog和CLP。 另一方面,虽然很明显Rete算法以某些数据结构的形式缓存规则集,但是据我所知,如果某些输入已更改,则可以更有效地评估输出,并给出有效地更新此数据结构以进行增量更改的方法,(对我而言)很难理解基本思想,甚至更难理解其有效性(与Prolog和CLP相比)?不幸的是,很难找到在更广泛的上下文中查看Rete算法的良好参考。 不幸的是,在这方面,Drools的文档提供的信息很少。我能找到的最多的是“ Rete算法,Leaps算法及其后代(例如Drools的Reteoo(和Leaps))提供了非常有效的方式来将规则模式与您的域对象数据进行匹配。当您拥有不会完全改变(因为规则引擎可以记住过去的比赛。这些算法已经过战斗验证”。非常高效-相比之下呢?经战斗证明-可以指向现实世界的应用程序吗? 如果有人可以对此主题提供更多的启示或提供有效的参考,我将不胜感激。

7
您可以推荐哪些电子用户故事映射工具?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 敏捷软件开发严重依赖于称为用户故事的工作项类型。例如,您有一个积压的用户故事,您可以选择其中一些在下一个冲刺期间进行处理。 但是,您在哪里以及如何找到要添加到待办事项列表中的用户故事?有一种流行的技术叫做故事映射。杰夫·帕顿(Jeff Patton)发明了它,这是有关如何做的权威指南。 问题是,那里有哪些电子工具可以支持Patton的故事映射技术? 我进行了一些研究,找到了Pivotal和Rally插件(但我都不是两者的客户),并且我目前正在尝试SilverStories。 还有哪些其他工具?你用了什么?您(不)推荐什么?为什么? 更新:一些发表评论的人似乎倾向于一个答案,即使用电子工具根本不可能应用这种技术,我们应该接受这一点。有人不能写出来作为答案吗? 更新(根据亚历克斯·费曼的评论来澄清问题):问题在于确定故事映射的选项。由于Jeff Patton的技术显然可以在带有胶粘物的白板上完成,因此问题集中在电子工具可能提供的其他选项上。(过早)对任何特定工具或工具类别的承诺不是这个问题的重点。

4
什么是第一个分层文件系统?
此问题是从Stack Overflow 迁移而来的,因为可以在Software Engineering Stack Exchange上回答。 迁移 8年前。 “包含目录和文件的目录”似乎已经存在了很长时间,但是必须首先存在。
20 history 

5
如何与喜欢竞赛编码员的老板/经理打交道
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 4年前关闭。 在我们公司最近进行了重组之后,我有了新的直线经理。他通常还不错,不像上一个那样偷偷摸摸。“偷偷摸摸的”我不是说他是一个邪恶的经理-我只是用这个术语来指代一个将大部分信息留给自己并且不与其他团队成员共享以便成为唯一“去”的人。人”-您明白了。 但是尽管如此,我还是设法与前任经理保持了良好的关系-而且我的工作效率很高。 我的新老板比较开放,这是一件好事,但我真的很讨厌他的素质-他喜欢与编码员竞争-通过将相同的任务交给不同的开发人员来尽快解决问题。您可能已经了解,信息在我们这样的环境中无法自由流通。因此,我的经理在10分钟前与之交谈的那个人可能正在就我现在正在处理的同一问题开始工作。它发生了几次,每次我听到可能有人在同一问题上工作时-我确实去问了我的经理-谁是这个问题的负责人-但是他通常在回答中都非常回避。 所以我的问题是-如何阻止我的经理这样做?在由六名开发人员组成的小型团队中,我是最资深的团队,通常我不参加赛车比赛,但是当它轰动我时,我的确感到不解。 还有一件事:我并不是在暗示我的经理是个坏老板,我也不相信这个世界是公平的,也不应该是公平的,我只是想找到一种方法让他停止竞逐我。一心一意。

12
面试某人的一般Unix技能[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 您将如何测试声称拥有* nix shell经验的开发人员(为清楚起见,我们不想测试某人是否可以在* nix上进行开发,仅测试他们是否了解命令行方式)。 我当时正在考虑让它们解决从日志文件中获取信息的问题,这将涉及cat,grep,cut,...等一些基础知识,再加上管道。 您还要求什么其他基础知识?再一次,这不是采访将要针对* nix系统开发的人,也不是针对* nix系统管理员的面试,而是针对经常需要在* nix系统上做一些工作的普通开发人员。
20 interview  linux  unix  shell 

8
高级Web开发人员在团队中的角色是什么?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 与其他3名Web开发人员组成的团队一起,我已经获得一年的首席Web开发人员的头衔。这是我的第一份工作。 我很确定我的角色是来自管理层。我很好奇其他高级开发人员的工作。我主要是好奇其他人作为其他组织的负责人/高级开发人员应承担的责任;因为我只在中小型公司工作过。 (a)一个组织的高级/主要Web开发人员会期望得到什么(无论规模大小)? (b)网站开发负责人和高级网站开发人员之间有区别吗? 我回顾了一些主题,只有一个主题在讨论您何时应该称自己为高级开发人员,而没有全面讨论高级开发人员应如何与其团队合作。

7
如果/ else阻止如何将真值表变为最小
如何获取真值表并将其转换为压缩的if块? 例如,假设我有一个真值表,其中A和B是条件,而x,y和z是可能的动作: A B | x y z ------------- 0 0 | 0 0 1 0 1 | 0 0 1 1 0 | 0 1 0 1 1 | 1 0 0 如果阻塞,则可以转换为以下内容: if(A) { if(B) { do(x) } else { do(y) } } else { do(z) } 这是一个简单的示例,但是我经常遇到几种情况,这些情况以不同的方式组合在一起会产生不同的输出,并且很难找出最紧凑,最优雅的方式在if块中表示其逻辑。

5
您是否从私有方法中抛出argumentsexception或argumentsnullexception?
我刚刚回顾了一段时间后写的一些代码,可以看到我有几个私有方法,如果方法参数存在问题,它们会抛出argumentsnullexceptions和/或argumentsexceptions。 我想我的理由是,如果将来有人尝试“滥用”该方法,则可以帮助将来证明该应用程序。但是,由于这是一个私有方法,可能调用此方法的人员可以看到相关的注释和代码,因此不必抛出此代码。拥有它们当然不会有任何伤害,尽管确实会增加混乱。 我的感觉是,这些异常通常在将公开公开的API之类的东西上更有用。
20 exceptions 

6
如果市场营销和UI命名发生变化,是否应该更改实体的内部命名(类,方法,数据库表等)?
此问题是从Stack Overflow 迁移而来的,因为可以在Software Engineering Stack Exchange上回答。 迁移 8年前。 我们拥有长寿的产品已有8年之久。随着时间的流逝,概念和实体的名称会发生​​变化。我们是否应该进行工作以重命名所有代码库,数据库表和列以匹配这些新名称? 是否已对此研究或一些最佳实践进行了研究? 谢谢

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.