软件工程

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

8
替代“通过/损坏的构建”指示器?
当在每次提交时执行测试的持续集成时,通常的最佳实践是使所有测试始终通过(也就是“不破坏构建”)。 我发现一些问题: 例如,不能通过创建与票证相对应的测试来帮助开源项目。我知道如果我向包含失败测试的开源项目提出“拉取请求”,则该构建将被标记为失败,并且该项目将不希望将其合并到其存储库中,因为这会“破坏构建”。 而且我不认为在您的仓库中测试失败是一件坏事,就像在跟踪器中遇到未解决的问题一样。这些只是等待修复的事情。 公司也是如此。如果使用TDD,则无法编写测试,提交并编写满足测试要求的逻辑代码。这意味着,如果我在笔记本电脑上编写了4-5个测试,则在休假前我无法提交它们。没有人可以收回我的工作。我什至不能与同事“共享”他们,例如通过电子邮件发送给他们。这也阻止了一个人编写测试,而另一个人编写模型。 话虽如此,我是否滥用/误解了构建过程/持续集成?在我看来,“通过” /“未通过”是一个过于狭窄的指标。 有没有办法使持续集成和TDD兼容? 也许有一个标准的解决方案/实践来区分“新测试”(可能失败)和“回归测试”(应该不会失败,因为它们曾经工作过)?

1
在生产环境中运行哪个Java版本的注意事项
有些人掌握了技术的最前沿-更新某些事物的日期。在生产中,这不合适。 研究当前版本(Java 7)是否准备好投入生产会产生大量旧材料,这些旧材料可能不再正确(在撰写本文时,Java 7已经使用了一年半的时间,这似乎已经很长了) 。 为了确定将生产环境升级到更高版本的Java是否合适,我需要考虑哪些因素?


6
数据库规范化后是否还需要索引
完成良好的归一化之后,还需要对表建立索引吗?这将如何影响性能?良好的规范化后,它甚至会以某种方式影响性能吗? 如果您已经具有主键和外键,通常会索引哪些列? 规范化数据库似乎已经有效。但是,我可能已经跳过了索引如何影响数据库。这仅在使用查询时有效吗?如何运作/执行并改善数据库?


8
技术面试中与OO设计相关的问题[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 我最近参加了很多访谈,并且公司要求他们多次回答“设计[插入模型]”问题。 如今,这在行业中很正常吗?我进入软件界已有二十多年了,参加了我的部分采访,但是我看到这种采访模式只是在最近才出现。 我觉得这个问题很开放。例如:我被要求绘制一个类图以“设计停车场”。我不确定面试官期望的详细程度。这是在网上测试中,我应该附上一个visio图,所以我不能问他们对他们的期望是什么。 您是否在面试过程中使用了这类问题?它们仅与类图相关,还是您还询问顺序,流程图和ERD(当然取决于职位的性质),它们在招聘过程中是否有效? *编辑凯文的回应* 例如:一个完整​​的问题可能是“设计可用于查找空位的停车场管理系统” 我可以用2班来完成,ParkingLot而Slot我也可以继续添加IVehicle和Vehicle及Car和Motorcycle类。我在哪里划界线? public class ParkingLot { IVehicle Vehicle {set; get;} List<Slot> GetEmptySlots() { }; } public class Vehicle : IVehicle { Slot SlotNum {set; get;} } public class Slot { int Row {set; get;} int Column {set; get; } }

3
我应该直接实现接口还是让超类来实现?
两者之间有区别吗 public class A extends AbstractB implements C {...} 与... public class A extends AbstractB {...} abstract class AbstractB implements C {...} 我知道在两种情况下,类A最终都将符合该接口。在第二种情况下,AbstractB可以在中提供接口方法的实现C。那是唯一的区别吗? 如果我不想提供任何的接口方法的实现 AbstractB,我应该使用哪种风格?使用一个或另一个具有隐藏的“文档”目的吗?

7
为什么Scrum指南不说测试员?
我一直在阅读scrum.org上的《 Scrum指南》,它说: 开发团队不包含专门用于特定领域(例如测试或业务分析)的子团队。 在其直译中,这意味着没有令人困惑的测试人员。他们如何建议呢?
14 scrum 

1
如何正确地对MIT许可下的库再许可?
如何正确地对MIT许可下的库再许可。 我正在使用和扩展库。麻省理工学院的许可证规定,我可以自由对图书馆进行再许可。 我可以简单地说一下: <Software library> is copyright <original author> and licensed under the MIT license. <orignal license> Extensions to <Software library> are copyright <me> and licensed under the GPL license, or commercial license if applicable. <GPL, or commercial license>

3
用Java枚举实现单例的缺点是什么?
传统上,单例通常实现为 public class Foo1 { private static final Foo1 INSTANCE = new Foo1(); public static Foo1 getInstance(){ return INSTANCE; } private Foo1(){} public void doo(){ ... } } 使用Java的枚举,我们可以实现单例为 public enum Foo2 { INSTANCE; public void doo(){ ... } } 与第二版一样出色,它有什么缺点吗? (我考虑了一下,我会回答我自己的问题;希望您有更好的答案)
14 java  singleton  enum 

2
为什么使用C ++库如此复杂?
首先,我想指出的是,我热爱C ++,并且我是认为C ++比Java编写容易的人之一。除了一件小事:库。 在Java中,您只需将一些jar添加到构建路径即可。 在C ++中,通常必须为头文件和库本身设置多个路径。在某些情况下,您甚至必须使用特殊的构建标志。我主要使用Visual Studio,代码块,而根本没有使用IDE。在谈论使用外部库时,所有这三个选项没有太大差异。 我不知道为什么没有比这更简单的选择了?就像拥有一个特殊的.zip文件一样,它可以将您需要的所有东西都放在一个地方,因此IDE可以为您设置构建标志进行所有工作。有没有技术上的障碍?
14 java  c++  libraries 

8
是否有非CRUD方法的示例?
我是一名程序员,但也曾担任过档案管理员。作为档案管理员,保存数据非常重要。 在数据操作方面,我经常与同事争论。我不太喜欢CRUD中的U和D。宁愿更新一条记录,我也喜欢添加一条新记录并引用旧记录。这样,您就可以建立变更历史。我也不喜欢删除记录,而是将它们标记为无效。 有这个用语吗?基本上只创建和读取数据?有这种方法的例子吗?

1
为什么将代码段称为文本段?
包含代码的可执行文件.text部分有时称为部分。在分段存储器体系结构中,映射为代码的段有时称为文本段。Unix错误消息“文本文件正忙”(ETXTBSY)表示“此文件是正在执行的程序”。 是怎样的文字来意味可执行(机器)码? 理想的答案是:解释单词及其含义之间的联系;提供该术语的起源或至少历史的引文;给出一些社区使用它的想法。

5
是否有“实用”类值得关注?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 我有时会创建“ Util”类,这些类主要用于保存似乎并不真正属于其他地方的方法和值。但是每次创建这些类之一时,我都会想:“哦,哦,我以后会后悔的……”,因为我在某处读到不好。 但另一方面,似乎有两个令人信服的案例(至少对我而言): 包中多个类中使用的实现机密 提供有用的功能来扩展类,而不会使其界面混乱 我要毁灭了吗?你说的话 !!我应该重构吗?

4
将模板方法与策略相结合
我的软件工程课上的一项作业是设计一个可以玩不同形式的特定应用程序的应用程序。有问题的游戏是Mancala,其中一些游戏称为Wari或Kalah。这些游戏在某些方面有所不同,但对于我来说,重要的是要知道这些游戏可能在以下方面有所不同: 移动结果的处理方式 确定游戏结束的方式 确定获奖者的方式 设计该功能的第一件事是使用策略模式,我在算法(游戏的实际规则)上有所不同。设计看起来像这样: 然后我对自己想,在Mancala和Wari的游戏中,确定获胜者的方式是完全相同的,并且代码会重复。我不认为这从定义上讲违反了“一条规则,一个地方”或DRY原则,因为Mancala规则的变化不会自动意味着在Wari中也应更改规则。然而,从我教授的反馈中,我印象深刻地找到了另一种设计。 然后我想到了这个: 每个游戏(Mancala,Wari,Kalah等)都将具有每个规则界面类型的属性,即WinnerDeterminer,如果有Mancala 2.0版本与Mancala 1.0相同,除了如何确定获胜者之外,使用Mancala版本。 我认为将这些规则作为策略模式实施当然是有效的。但是,当我想进一步设计时,真正的问题就来了。 在阅读有关模板方法模式的信息时,我立即认为它可以应用于此问题。用户进行移动时所执行的操作始终相同,并且顺序相同,即: 在洞中放石头(所有游戏都一样,因此将在模板方法本身中实现) 确定举动的结果 确定游戏是否由于上一步而结束 如果游戏结束,确定谁赢了 最后三个步骤全部属于上述我的策略模式。合并这两项时,我遇到很多麻烦。我发现一种可能的解决方案是放弃策略模式并执行以下操作: 我真的没有看到策略模式与此之间的设计差异吗?但是我确定我需要使用模板方法(尽管我可以肯定必须使用策略模式)。 我也无法确定谁将负责创建TurnTemplate对象,但是使用策略模式,我觉得我拥有对象族(三个规则),可以使用抽象工厂模式轻松创建对象族。然后MancalaRuleFactory,我将拥有一个,WariRuleFactory等等,他们将创建规则的正确实例并将其交给我RuleSet。 假设我使用了策略+抽象工厂模式,并且我有一个RuleSet对象,其中包含用于这三个规则的算法。我觉得仍然可以使用模板方法模式的唯一方法是将此RuleSet对象传递给我TurnTemplate。然后出现的“问题”是,我永远不需要的具体实现TurnTemplate,这些类将变得过时。在我受保护的方法中,TurnTemplate我可以调用ruleSet.determineWinner()。结果,TurnTemplate该类将不再是抽象的,而是必须变得具体,那么它仍然是模板方法模式吗? 总而言之,我是在以正确的方式思考还是在错过简单的东西?如果我处在正确的轨道上,如何将策略模式和模板方法模式结合在一起?

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.