软件工程

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

15
几乎每个报告的错误都是高优先级错误[关闭]
我在处理多个软件项目时注意到一种模式:报告的大多数错误都具有高/非常高的优先级。我问了一些同事为什么会发生这种情况,他们提到如果一个bug的优先级不高,那么该Bug很少会引起开发人员的注意,这确实是有道理的。 因此,我想知道这个问题是否很普遍,或者我是否运气不好。我在Google上进行了快速搜索,发现一些团队实施了错误报告指南或拥有单独的“错误分类”团队。如果您已经面对并解决了这个问题,那么对您有用的方法是什么? 该问题专门针对“优先通胀”问题:如果您遇到这种情况,那么采取哪些措施可以有效解决此问题。

5
当最终用户的命名法改变时,我们应该在多大程度上重命名代码和数据?
很久以前,我们添加了一项功能,使用户在将图像添加到工作流队列后可以“接受”图像。原来,我们使用了错误的术语,并且用户实际上“批准”了该图像。 在我们的界面上更改“接受接受”很容易,只需替换一个单词即可。但是,我们从CSS类名称到数据库值都使用“ accept”一词对所有层进行了编程。 使按钮变为绿色的CSS类:“ .accepted”; 验证并绑定DOM节点上的类属性的模型方法:“ isAccepted”; JavaScript状态属性:具有“未审阅”,“已接受”和“已发布”的数组; Mysql状态列:ENUM,具有“未审阅”,“已接受”和“已发布”; 测试名称; 替换大多数出现的接受批准很简单(特别是在进行测试时)。迁移数据要困难一点,特别是因为它需要与部署同步。 这个特定的案例很简单,但是在我的职业生涯中,我遇到过类似但更复杂的案例。当文件也被重命名并且在数十台服务器上进行部署时,或者当代理缓存时,将涉及memcached和mysql。 除了接口之外,在所有其他层上都保留“接受”是一个坏主意,因为加入该团队的新程序员可能无法了解导致该决定的历史原因,并且如果接受->赞成,则在含义上是相近的词语被重命名为“排队参加管理层下次地位会议”,这当然没有任何意义。而且,如果我们在这里和那里折衷,就会感觉到,在一些迭代中,用户界面的概念不会影响系统内部,并且我当然不希望在其中一半输出与其内部没有关系的系统上工作。 那么,您是否总是在需要时重命名所有内容?如果这发生在您身上,并且您认为这种权衡不值得,那是不是又回来咬了您?代码注释或开发人员文档是否足以避免此问题?


11
为什么要“在GitHub上分叉我”?[关闭]
我了解GitHub的工作原理,但令我感到困惑的是,为什么最近几乎每个OSS项目的主页上都有一个“在GitHub上叉我”链接。例如, http://jqtjs.com/,http://www.daviddurman.com/flexi-color-picker/,等等。 为什么这么常见?他们是否想要/需要代码验证,检查他们可能不知道怎么做的安全性/性能改进? 是否表明这是一个协作项目-欢迎您进行改进? 他们是在GitHub工作还是想推广他们的服务?奇怪的是,我认为我最近没有看到“ Bitbucket上的Fork项目”徽标。 我对该徽标的第一个反应是,可能需要对该项目进行修改(分叉),以便将其与任何有用的功能集成在一起;或者,他们鼓励零散的代码库,鼓励每个人自己创建项目。但是我不认为这是意图。

3
与静态方法相比,Scala的伴随对象有哪些优势?
Scala没有静态 -keyword,但是通过随播对象具有类似的功能。在幕后,伴随对象被编译为具有静态方法的类,因此所有这些都是语法糖。这种设计选择的优点是什么?劣势?其他的languanges有类似的构造吗?
50 scala 

11
如果我需要设计来开始测试,我不明白TDD如何帮助我获得良好的设计
我试图围绕TDD,特别是开发部分,全神贯注。我看过一些书,但是我发现的书主要涉及测试部分-NUnit的历史,为什么测试很好,红色/绿色/重构以及如何创建字符串计算器。 好东西,但这只是“单元测试”,而不是TDD。具体来说,如果我需要一个设计来开始对其进行测试,我不理解TDD如何帮助我获得一个好的设计。 为了说明这一点,请想象一下这三个要求: 目录需要有产品列表 目录应记住用户查看过的产品 用户应该可以搜索产品 在这一点上,许多书从书本上摘下来,只是跳入“测试ProductService”,但他们没有解释如何得出结论,即首先有ProductService。这就是我要理解的TDD中的“开发”部分。 需要有一个现有的设计,但是实体服务之外的东西(也就是说:有一个Product,所以应该有一个ProductService)找不到地方(例如,第二个要求要求我有一个用户,但是我应该在哪里提醒该功能?搜索是ProductService的功能还是单独的SearchService?我怎么知道应该选择哪个?) 根据SOLID,我将需要一个UserService,但是如果我设计一个没有TDD的系统,则可能会得到一堆完整的Single-Method Services。TDD并不是一开始就让我发现自己的设计吗? 我是.net开发人员,但Java资源也可以使用。我觉得似乎没有真正的示例应用程序或书籍可以处理真正的业务应用程序。有人可以提供一个清晰的示例来说明使用TDD进行设计的过程吗?
50 java  c#  .net  tdd 

14
RESTful API设计。如果没有行,我应该返回什么?
我目前正在使用Slim Framework为社交网络编码API。我的问题是:当json结构中没有要返回的行时,最佳实践是什么? 可以说,此调用/ v1 / get / movies从表电影名称返回2行: [ {"name": "Ghostbusters"}, {"name": "Indiana Jones"} ] 但是,然后我调用了/ v1 / get / books,该表中没有行。我应该只返回一个空结构吗? [ ] ...或者消息和错误代码会更好吗? [ "errors": { "message": "no matches found", "code": 134 } ] 哪个更好的做法?(该API将在iOS和Android应用中使用)谢谢!

9
为什么==运算符字符串值比较不能与Java兼容?
每个熟练的Java程序员都知道您需要使用String.equals()来比较字符串,而不是==,因为==会检查引用是否相等。 在处理字符串时,大多数时候我都是在检查值相等性,而不是引用相等性。在我看来,如果该语言允许仅使用==比较字符串值,则将更加直观。 作为比较,C#的==运算符检查字符串 s的值相等。并且,如果您确实需要检查引用是否相等,则可以使用String.ReferenceEquals。 另一个重要的一点是,字符串是不可变的,因此允许使用此功能不会造成任何损害。 有什么特殊原因不能在Java中实现?

4
具有大型系统的实体框架-如何划分模型?
我正在使用具有1000多个表,另外几百个视图和几千个存储过程的SQL Server数据库。我们希望开始在新项目中使用Entity Framework,并且正在制定策略。我最想知道的是如何最好地将表拆分为不同的模型(如果我们先编写代码,则为EDMX或DbContext)。我可以马上想到一些策略: 按模式拆分 我们将表拆分成大概十二种模式。我们可以为每个架构创建一个模型。但是,这并不是完美的,因为dbo最终仍然非常大,具有500多个表/视图。另一个问题是,某些工作单元最终将不得不进行跨越多个模型的事务,这增加了复杂性,尽管我认为EF使这一过程变得相当简单。 按意图 拆分模型不必担心架构,而是按意图拆分模型。因此,对于每个应用程序,项目,模块,屏幕,我们将具有不同的模型,具体取决于我们希望获得的粒度。我看到的问题是,在某些情况下不可避免地要使用某些表,例如User或AuditHistory。我们是将它们添加到每个模型中(违反我认为的DRY),还是将它们添加到每个项目使用的单独模型中? 完全不要分裂-一个巨大的模型 从开发的角度来看,这显然很简单,但是从我的研究和我的直觉来看,这似乎可以在设计时,编译时和运行时都表现出色。 在如此大的数据库上使用EF的最佳实践是什么?具体来说,人们在针对大量数据库对象设计模型时会使用哪些策略?是否有我没有想到的选项比上面的选项更好? 另外,这在诸如NHibernate的其他ORM中是否存在问题?如果是这样,他们是否提出了比EF更好的解决方案?

8
错误修复任务的故事要点:它适合Scrum吗?
我只是想知道我们是否应该将故事点分配给错误修复任务。我们的问题跟踪软件JIRA没有Bug类型问题的故事点字段(仅适用于Story和Epic)。 我们是否应该将Bug问题类型添加到Story Points字段的适用问题类型中?优缺点都有什么?它适合Scrum吗?
50 agile  scrum  bug  user-story 


8
Scrum-如何将部分完整的用户故事延续到下一个Sprint,而不会导致积压
我们正在使用Scrum,偶尔发现我们无法在计划的sprint中完成用户故事。无论如何,我们都会以真正的Scrum风格交付软件,并考虑在下一个Sprint计划会议期间的下一个Sprint中包括用户故事。鉴于我们要继续执行的用户故事已部分完成,我们如何在下一个Sprint计划会话中对其进行正确估算?我们考虑过: a)向下调整故事点的数量以仅反映完成用户故事所需的工作。不幸的是,这会使报告产品积压工作变得混乱。 b)关闭部分完成的用户故事,然后提出一个新故事来实施该功能的其余部分,这将减少故事点。这将影响我们回顾性地查看在该冲刺中未完成的工作的能力,这似乎很耗时。 c)不用理会a或b,并在Sprint Planning期间继续猜测,诸如“用户故事可能是X故事点,但我知道它已经完成了95%,所以我确定我们可以适应它”。

6
单元测试是否应该存储在存储库中?
我是一个成长中的程序员,他最终将我存储在GitHub上的库的单元测试付诸实践。 在我看来,我可能会在测试库中包含测试套件,但是当我环顾其他项目时,包含测试似乎是命中注定的。 这是不好的形式吗?是不是用户只对工作代码感兴趣,是否仍将在自己的框架中进行测试?

7
与我从未见过的一群人一起编程
我已经从AP计算机科学课分配了一个小组项目,并且我需要与其他三个人一起工作。我以前从未与他们交谈过,我不知道他们的技能水平,而我所拥有的只是他们的电子邮件地址。总结起来,作业是这样的: “作为一个团队,您将至少完成一个课程的三个模块。...” 我将尝试成为“队长”,因为他们都没有尝试彼此联系,但我很好奇:该怎么做?我已经给他们发送了电子邮件,并询问他们是否有比彼此发送电子邮件更喜欢的交流方式,但是一旦我们真正开始该项目,我就必须弄清楚谁在做什么。 我该怎么办?我如何“负责”并领导三个我从未认识的人? 这是实际作业的摘录: 因此,您需要在本周初讨论每个团队成员将在此项目中扮演的各种角色。您可以通过Pronto(或Blackboard IM),电子邮件,Wiki,Google组,博客或您认为合适的任何其他方式进行通信。如果小组成员在一周结束前仍未加入小组,请告知您的教练,他们将提供其他指导。 ... 在项目结束时还将进行团队评估,您将在其中评估每个团队成员对该项目完成的贡献以及建议的等级。 编辑:许多人建议我在咖啡厅见他们,或类似的东西。唯一的问题是,我们所有人都处在不同的状态。我还发现其中一个不允许使用Facebook / Skype / twitter,因此我不得不求助于Yahoo Messenger和电子邮件。

7
我不是一个优秀的程序员(逻辑上),应该如何解决?[关闭]
好的,这是我的问题: 我在一家大公司工作,有些是如何找到工作的(坦率地说,因为面试很容易)。不是我不了解我的东西,我很擅长理解java,它是库等。 但是,每当我尝试解决一些逻辑问题时,我都会发现很难提出解决方案。 例如,conversion of decimal to roman当我看到解决方案时,我发现这是一个简单的问题。但是经过1-2小时的试用后,我无法实现它! 我觉得我很笨,不值得当软件工程师。解决难题的能力应该是优秀的程序员的本性。但是,当我尝试解决一些难题时,我无法找到解决方案,而只是将其用谷歌搜索!....我讨厌那个! 在工作中遇到问题时(例如实施xyz工具功能),我相当快,对此我很尊重,但是对此我并不感到骄傲。因为当我尝试解决任何数学或逻辑方面的挑战性问题时,我感到很困惑。我仍然觉得我爱我做的(作为一名工程师)正在做的事情,但是对于我无法解决我朋友提出的一些棘手的逻辑问题,我感到非常难过。 我感到沮丧:( TL; DR:我从实用的角度理解东西(在产品中实现功能),但是当尝试解决ProjectEuler上的问题时,我感到非常遗憾!而且我需要动脑筋! 因此,我的问题是: 我应该如何解决?我应该从解决(强迫自己)项目欧拉问题开始吗?即使我需要几个小时才能解决一些基本问题? 还是我应该回到基础知识并学习一些基础数学? 我真的没有找到解决难题的乐趣。但是我想让自己开心!而且我认为,如果我能更好地理解它们,我会喜欢的! PS:我从没受过CS的教育(我的本科生是电气的)。但是,这并不是成为一个笨拙的开发人员的借口。 谢谢!

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.