软件工程

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

3
用类替换类型代码(从重构[Fowler])
此策略涉及替换以下内容: public class Politician { public const int Infidelity = 0; public const int Embezzlement = 1; public const int FlipFlopping = 2; public const int Murder = 3; public const int BabyKissing = 4; public int MostNotableGrievance { get; set; } } 带有: public class Politician { public MostNotableGrievance …
9 c#  refactoring 

1
IntelliJ与Maven编译
我有一个需要Hibernate jar的项目。 我将它们作为依赖项添加到pom.xml中,并且Maven可以很好地编译我的项目。 但是,在IDE中,所有对Hibernate API的注释和调用都标记为未解析(红色)。 我怎样才能使IntelliJ能够解决它们? 当我单击“生成项目”时,是否可以使用Maven?(Ctrl + F9) 另外,我对IntelliJ中的构面概念感到困惑。我是否需要它们,比如说JPA方面来启用Persistence Assistant等...,或者有一个选项可以让Maven照顾一下?

7
应该为错误重新打开案例,还是应该以新案例打开错误?
目前,在我的工作地点,我们使用FogBugz来管理我们不同Web应用程序的所有功能和错误。 当要将新功能添加到我们的一个Web应用程序中时,将创建一个新的Case。例如“创建CSV上传表单”。 然后,我处理案件,记录我花在该案件上的时间。完成此案例后,我将对其进行解决,然后将其分配回开箱器(通常是项目经理),然后由其关闭该案例。 如果该功能有任何错误,则我的项目管理器将重新打开该案例,并将其归还给我,并附上一系列漏洞的要点。 在我看来,我认为这些指向项目符号的错误应作为单独的错误案例打开,以便可以更轻松地对其进行跟踪,而不会因原始功能案例说明而混乱。 我的经理们不同意我的说法,如果在一种情况下全部花费在该功能上,则更容易计算出该功能所花费的总时间。 此外,他们认为,这对于我们的客户而言不会造成太大的混淆,因为该功能仅具有1个案例编号参考。但是,我要强调指出,这些错误应作为单独的案例处理,因为这是原始案例的完成后。 我是否正确地指出应该重新打开Bug作为新案例?每种管理方式的利弊是什么?

1
Prolog并行性
是否有任何序言解释器可以在功能上分解您的“程序”以提高效率? 我知道有一些关于Prolog解释器的研究,该解释器通过并行(一种典型的C程序员无法“看到”的)达到接近C的速度。有人知道这个话题吗?


2
淘汰过时的代码的最佳实践是什么?
我需要淘汰一种过时的方法。我知道这个[Obsolete]属性。Microsoft是否有推荐的最佳实践指南来执行此操作? 这是我目前的计划: 答:我不想创建一个新的程序集,因为开发人员将不得不为其项目添加新的引用,并且我希望如果老板和同事必须这样做,将会引起很多痛苦。我们也不维护多个程序集版本。我们仅使用最新版本。更改此做法将需要更改我们的部署过程,这是一个大问题(必须教人们如何使用TFS而不是FinalBuilder来做事情,并让他们放弃FinalBuilder) B.标记旧方法已过时。 C.因为实现正在更改(不是方法签名),所以我需要重命名方法而不是创建重载。因此,为了使用户知道正确的方法,我计划向[Obsolete]属性添加一条消息。这部分让我感到困扰,因为我所做的唯一更改就是将方法与连接字符串分离。但是,由于我没有添加新的程序集,因此无法解决此问题。 结果: [Obsolete("Please don't use this anymore because it does not implement IMyDbProvider. Use XXX instead.")]; /// <summary> /// /// </summary> /// <param name="settingName"></param> /// <returns></returns> public static Dictionary<string, Setting> ReadSettings(string settingName) { return ReadSettings(settingName, SomeGeneralClass.ConnectionString); } public Dictionary<string, Setting> ReadSettings2(string settingName) { return ReadSettings(settingName);// IMyDbProvider.ConnectionString …
9 .net 

1
如何开始使用TDD编码一些简单功能?
我基本上有TDD的要旨。我卖了它很有用,并且对MSTEST框架有了一个合理的命令。但是,到目前为止,我还不能毕业于将其用作主要开发方法。通常,我将其用作编写控制台应用程序作为测试驱动程序的替代方法(我的传统方法)。 对我而言,最有用的是它吸收回归测试作用的方式。 我还没有构建专门隔离各种可测试行为的工具,这是我所知道的另一大部分。 因此,这个问题是要寻求关于我可能为以下开发任务编写的第一个测试的指针:我想生成以生产者/消费者的方式封装任务执行的代码。 我停下脚步,并决定在编写此代码后写这个问题(想知道这次是否可以真正使用TDD) 码: interface ITask { Guid TaskId { get; } bool IsComplete { get; } bool IsFailed { get; } bool IsRunning { get; } } interface ITaskContainer { Guid AddTask(ICommand action); } interface ICommand { string CommandName { get; } Dictionary<string, object> Parameters { get; …
9 c#  tdd 

5
什么时候停止继承?
很久以前,我在Stack Overflow上问了一个关于继承的问题。 我说过我以OOP方式设计国际象棋引擎。因此,我继承了Piece抽象类的所有片段,但继承仍然存在。让我按代码显示 public abstract class Piece { public void MakeMove(); public void TakeBackMove(); } public abstract class Pawn: Piece {} public class WhitePawn :Pawn {} public class BlackPawn:Pawn {} 程序员发现我的设计超出了工程学,建议删除有色块类,并保留色块作为属性成员,如下所示。 public abstract class Piece { public Color Color { get; set; } public abstract void MakeMove(); public abstract void …

6
在不进行“太多”设计的情况下,我们如何在Sprint计划期间提供有效的时间估算?
我的团队正在跟上Scrum的发展步伐,但是我们大多数人对非敏捷或“伪”敏捷方法更加熟悉。对我们来说,最大的障碍是召开高效的Sprint Planning会议,在会议中我们将积压的项目分解为任务,并估算工时。(我使用的是VS2010 Scrum模板中的术语;如果我在某处使用了错误的单词,则表示歉意。) 当我们试图确定一项任务需要花费多长时间时,我们经常陷入在代码级设计功能的陷阱(表布局,接口等),以便弄清该任务需要多长时间。 。 我很确定这不是进行这种设计的合适位置。我们应该在sprint期间安排这些设计会议的任务。但是,我们在弄清楚如何为任务提出有意义的估算时遇到了麻烦。 有实践习惯/技术/等吗?在不知道您打算如何实现某个功能的情况下做出判断需要花费多长时间的判断?如果设计完成后我们的时间估算值将发生显着变化,那么我们如何才能提前适当地预算Sprint待办事项? 编辑: 请澄清一下,因为一些评论/答案非常有效,但我认为解决的是错误的问题。 我们知道我们正在做的事情是不正确的,我们应该在此设计的sprint中花费时间。从概念上讲,所有开发人员都明白这一点。如果我们开始进入杂草丛生,我们还将招募具有Scrum经验的团队成员,以保持我们的正常运转。 问题在于,如果不经过这个设计过程,我们将很难为任何事情提供具体的时间估算。我们一直在说这样的话:“好吧,如果我们以此方式设计,可能会花费8个小时,但是如果最终不得不以其他方式这样做,那大约需要32个小时,但是一旦开始尝试编写,它可能不会那么糟糕...”。 我还假设一旦我们有了一定的历史速度,这个过程就会变得更好,但是我们正在使用的许多技术和架构模式对我们来说都是新的。但是,如果潜在的错误估计仅是适应此过程的自然组成部分,那么我们将只需要重新调整自身以接受:)
9 scrum 

2
我可以从哪个开放源代码PHP项目中学习“完美的” OOP设计?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 我是OOP的新手,以身作则,我学得最好。 您可以说这个问题类似于我应该学习哪个Scala开源项目以学习最佳编码实践 -但使用PHP。 我曾经听说过Symfony具有最佳的“架构”(我不会假装我确切地知道这是什么意思),还有教义ORM。花数月时间阅读这些项目的源代码,试图推断出所使用的模式并学习新的技巧是否值得? 我看到相同数量的网页在分解和喜欢Zend的代码库(如果认为必要,将提供链接)。 您是否知道任何其他项目会使资深OOP开发人员流下喜悦的眼泪? 请让我补充一点,在这里根本不关心实用性和使用范围-我只想这样做: 选择一个开发人员认为比我更好,更强大的代码库的项目。 编写实现项目功能的代码。 比较结果并尝试了解我不知道的内容。 基本上是学术兴趣代码库。有什么建议吗?

4
在编码之前了解功能有多重要?
我为一家软件开发公司工作,该公司的开发工作已不存在。岸上团队处理支持并直接与客户交谈。我们从不直接与客户交谈,我们只是与岸上团队的人员交谈,他们直接与客户交谈。 当需求到达时,岸上团队与客户交谈并制作需求文件并通知我们。在研究了要求之后,我们制作了设计文件(我们遵循传统的瀑布模型)。 但是整个过程中存在一个问题:离岸团队或在岸团队中没有人完全了解应用程序的功能。我们只知道它是一个大型的复杂Web应用程序,可处理复杂的订单处理,目录管理,活动管理和其他活动。我们对设计文档感到困惑,因为要求不明确。然后,它会讨论在岸团队,离岸团队和客户之间的一系列问题/答案。我们经常被告知要从代码中了解功能。但这通常是不可行的,因为代码库很大,甚至了解一个简单的菜单项都需要几天甚至几周的时间。我们试图告诉客户给我们知识转移关于该应用程序,但无济于事。即使设计文件不完整或要求不明确,我们的经理也会经常告诉我们开始编码。我们将从对似乎很明确的需求部分进行编码开始,然后等待其余部分。 这通常会使部署推迟一个月。在极端情况下,我们在开发和生产中的错误率非常低,但是客户会说那不是他们要求的。那将开始一个非常规游戏和一系列变更请求,而我们最终将开发出非常不同的东西。 我的问题是,如果您不完全了解应用程序的功能,您将如何进行开发工作? 更新 开发方法并不是我真正的选择,我也不是我团队的负责人。这是它开始的方式。我试图告诉人们敏捷的优势,但无济于事。此外,我认为我的团队没有在敏捷环境中工作所需的思维定势。

12
您如何解释软件工程比其他工程领域更加专业?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 我与一个坚持认为任何优秀软件工程师都可以使用任何软件技术进行开发的人员一起工作,并且对特定技术的经验与开发优秀软件无关。他的类比是,您不必了解正在制造的产品,也不必知道如何构建生产该产品的装配线。 从某种程度上来说,赞美是“如果您擅长,您就擅长于一切”,这也是一种赞美,但是在某种程度上,它也使专业变得轻描淡写,如“ Codemonkey,使用吊索码”。没有某些软件框架的经验,您可能会很快遇到麻烦,这很重要。 我试图解释一下,但是他没有买。关于此的任何不同观点或想法都有助于解释我在一件事上的经历,并不能转化为所有事物?

4
GUI编程的Signals + Slots模型是否有其他实用选择?
如今,大多数GUI工具包都使用Signals + Slots模型。没错,是Qt和GTK +率先提出的。 您知道,小部件或图形对象(有时甚至是未显示的小部件)将信号发送到主循环处理程序。然后,主循环处理程序调用为该小部件/图形对象分配的事件,回调或插槽。virtual工具包通常已经提供了默认的(大多数情况下)事件处理程序来处理所有预定义的信号,因此,与以前的设计不同,开发人员必须自己为每个消息编写整个主循环和处理程序。 (例如WINAPI),开发人员只需要担心实现新功能所需的信号。 据我所知,现在大多数现代工具箱都使用了这种设计。有Qt,GTK +,FLTK等。还有Java Swing。C#甚至具有它的语言功能(事件和委托),并且Windows Forms已在此设计上开发。实际上,在过去的十年中,这种用于GUI编程的设计已经成为一种不成文的标准。由于它提高了生产率并提供了更好的抽象。 但是,我的问题是: 对于现代GUI编程,是否有并行或实用的替代设计? 即信号+插槽设计是镇上唯一实用的设计吗?用任何其他设计进行GUI编程是否可行?是否有任何其他现代(最好是成功且流行的)GUI工具箱都基于替代设计?

5
在传统项目开始后介绍敏捷开发
大约一年半以前,我进入一个声称从事敏捷开发的工作场所。我了解到,这个地方采用了几种敏捷实践(例如日常站立,冲刺计划和冲刺审查),但没有一个原则(及时/足够的心态,尽早暴露失败,丰富的沟通)。 现在,我承担了使团队更加敏捷的任务,并向我保证,开发人员和业务团队已完全同意我的要求。作为一个试点计划,他们给了我一个项目,该项目刚刚完成了15个月的需求收集,有110页的“分析与设计”文档(被认为是“一成不变的”),而且我无法找到最终结果。用户(仅限于实际上不会使用该产品的用户经理组成的委员会)。 我从小处着手,为他们提供了前5个冲刺的预期可交付成果的列表(未定义未来的冲刺),第一个冲刺的目标列表,并且剖析了A&D文档以获取足够的用户案例来满足第一个冲刺的目标。 从那时起,他们就问为什么我们对所有sprint都没有所有要求,为什么我没有开始为第三个sprint(他们认为更重要,但基于第一个sprint的成果) 2个sprint),并要求获得整个IT团队认为繁忙的工作或与我们无关的更多文档(例如,预先编写用户手册,预先记录所有sprint中的所有数据字段等) “前期”工作)。 作为一个新的项目经理,这对我来说是很艰难的,但是我已经有效地实现了一些改进,例如故事管理的scrumban,结对编程,以及让业务预先为我们提供了客户验收测试(作为需求文档的一部分) 。 所以我的问题是: 我该怎么做才能更有效地将变革引入抵制企业? 我可以在IT方面引入其他实践来帮助向企业展示敏捷的好处吗? 文档的负担使我们感到窒息-企业仍然将其视为风险管理策略,而不是风险。我们可以采取什么措施来减轻他们对文档的关注和要求(特别是文档的数量及其对所有这些文档的需求)? 我们与公司位于不同的建筑物中,位于大约3个街区之外,他们拒绝让该项目的人员同居b / c,因为该人员“在他们在我们公司时将无法从事其他项目建造。” 他们希望我们总是走到那里,把我们的问题捆绑在一起,这样我们就可以立即问他们,而不会因为“不断的打扰”而浪费那个人的时间。我们如何做才能与他们进行更丰富的沟通? 任何其他建议也将不胜感激。 谢谢!


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.