软件工程

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

12
为什么一个班级除了“抽象”或“最终/密封”之外,什么都不应该?
经过10年以上的Java / C#编程,我发现自己创建了以下任一文件: 抽象类:合同,并非原样实例化。 期末/密封班:实现不打算用作其他任何东西的基类。 我想不出任何简单的“类”(即既不是抽象的也不是最终的/密封的)是“明智的编程”的情况。 为什么一个班级应该不是“抽象”或“最终/密封”之外的任何东西? 编辑 这篇很棒的文章比我能更好地解释我的担忧。

6
我应该使用哪种语言来命名我的业务类别?
我要求有关此问题的最佳实践。我认为,这仅在客户公司严格属于国家/地区语言而不是英语时才是问题。 如果客户有很多主要是非常特定于域的(例如,德语)表达式,并且混合了一些较小的特定于域的命名。我们的代码注释的语言,类/方法/变量名是英语。您会翻译所有域名专用名称吗?
29 naming 

11
在与基类相同的文件中声明接口,这是一种好习惯吗?
为了可互换和可测试,通常具有逻辑的服务需要具有接口,例如 public class FooService: IFooService { ... } 在设计方面,我同意这一点,但是困扰我这种方法的一件事是,对于一项服务,您需要声明两件事(类和接口),而在我们的团队中,通常需要声明两个文件(一个用于类,一个用于接口)。另一个不适之处是导航困难,因为在IDE(VS2010)中使用“转到定义”将指向该接口(因为其他类均引用该接口),而不是实际的类。 我以为将IFooService与FooService放在同一文件中会减少上述怪异现象。毕竟,IFooService和FooService非常相关。这是一个好习惯吗?IFooService必须位于其自己的文件中有充分的理由吗?

3
如何去“接管”一个开源项目?
有一个我感兴趣并经常使用的开源项目。它已获得Apache License 2.0的许可,并且基本上不再具有任何活动。它托管在Google Code上,我有兴趣继续开发它。我是开源过程的新手,我正在尝试找出适当的方法来解决此问题。我可以检查一下并将其推送到github,以便继续在那里进行开发吗?我应该先联系项目“所有者”吗?另外,即使我要进行更改,我是否也将所有作者信息保留在类的顶部,等等(我假设答案是肯定的)? 另外,我实际上如何遵守“所有修改均明确标记为修改人的工作”的许可要求?我所做的任何更改都会发表评论吗? 对于这里的正常课程/标准有什么指导将不胜感激?

4
在更正错误时,我们是否应该始终对它们进行单元测试?
纠正错误时,鼓励我在这里工作,首先编写一个因给定错误而失败的测试,然后修复代码,直到测试通过。这遵循TDD惯例,应该被认为是很好的惯例,但是我注意到它往往会产生与实现非常接近的神秘测试。 例如,我们在发送作业,达到某个状态,中止并重试时遇到问题。为了重现此错误,编写了一个包含线程同步的大量测试,其中包含大量的模拟和其他东西。它确实可以完成工作,但是现在我正在重构代码,我发现删除此庞然大物非常诱人,因为要适应新设计,确实需要很多工作(再次)。它只是在单个特定情况下测试一个小功能。 因此,我的问题是:如何测试难以重现的错误?您如何避免创建测试实现的东西,并损害重构和可读性?
29 testing  tdd 

3
Schema.org与微格式
它们都具有相同的目的:为语义标记提供词汇。模式已得到认可和标准化……但是微格式标准是通过开放社区流程进行的。 模式使用文档中的微数据,而微格式则用于类。(值得注意的是:微数据意味着一个元素必须是单个itemtype,而微格式允许将多个类应用于同一元素。我可以使用类而不是微数据标记xFolk + hAtom。) 这是黑白情况吗?谷歌说我不能同时使用两者,因为它可能会混淆解析器。 对此有什么共识?

7
在工作中使用个人代码是否合乎道德?
我正在工作的一个辅助项目中,我发现使用我自己(在工作之外)开发的一些代码来加快我的开发是有益的。我的副项目正在开发一个C ++ GUI应用程序,以使我们的高级用户可以对几个不同平台(DB2,Oracle,SQL Server和MySQL)上的数据库运行查询(由我构建)。过去,我通常只是应要求自行运行这些文件,或为它们构建Excel VBA应用程序。现在,我已经为几个不同的人构建了多个VBA应用程序,我发现有必要构建一个仅读取自定义.sql文件并针对各种数据库执行的中央应用程序。 我正在构建的应用程序是C ++,并使用LGPL跨平台GUI工具包。但是,多年来,我有很多代码是在我自己的库中基于休闲,非工作相关项目构建的。可以在工作中使用此代码,这样可以节省我(和公司)时间吗?如果是这样,我可以将所有错误修复和增强功能移植回我的个人库吗?似乎有一条我不知道何时要越过的线。 我只想补充一点,没有任何个人代码与任何业务逻辑有关。它们只是基本的实用程序类/包装器。

1
什么时候应该使用文档数据库,关系数据库和图形数据库?[关闭]
为了讨论的目的,让我们考虑一个FourSquare方案。 情境 实体: 用户数 地方 关系: 签到:用户<->地点,很多对很多 朋友:用户<->用户,多对多 数据库设计 这些很可能有错误,请指出。 关系数据库管理系统 表格: 用户数 地方 签到(交界处) 朋友(交界处) 优点: CAP:一致性,可用性 缺点: CAP:分区容限,也称为分片 方案=不灵活的结构 复制不良? 图形 对象: 用户数 地方 边缘: 朋友:用户<->用户 签到:用户->地点 包含时间戳 优点: CAP:一致性,可用性? 无模式,易变的对象和边缘 图形遍历查询,例如: 聚类 寻找一群朋友 寻找类似人喜欢的餐厅 还有其他常见/有用的查询吗? 缺点: CAP:分区容忍度? 文件/物件 3个独立的数据库? 用户数 朋友清单 签到 时间戳记 用户 地点 地方 优点: …

8
使用CI工具运行流程是否合理?
在我的公司中,我们经历了不同的Cron工作(在多个系统上)的泥潭,并且手动启动了流程,这些流程使我们的业务正常运转,这是多年的权宜之计和后来的疏忽的结果。 有一天,出于明显的原因,我们将需要提出一个更加集中的解决方案。 我们一直在考虑的一个想法是使用我们的持续集成软件(Jenkins)运行这些过程,这似乎是合乎逻辑的。 我的问题是:其他公司也在这样做吗?这是普遍接受的做法吗?这是否与名称中隐含的CI工具的定义不冲突?还有其他选择吗? 注意:https: //wiki.jenkins-ci.org/display/JENKINS/Meet+Jenkins 詹金斯声称,它专注于“监视外部运行的作业的执行情况,例如cron作业和procmail作业”。我不确定这是否正是我在说的。

6
单元测试的预期结果应该硬编码吗?
单元测试的预期结果应该硬编码还是可以依赖于初始化变量?硬编码或计算结果是否增加了在单元测试中引入错误的风险?我还没有考虑其他因素吗? 例如,这两种格式中哪一种是更可靠的格式? [TestMethod] public void GetPath_Hardcoded() { MyClass target = new MyClass("fields", "that later", "determine", "a folder"); string expected = "C:\\Output Folder\\fields\\that later\\determine\\a folder"; string actual = target.GetPath(); Assert.AreEqual(expected, actual, "GetPath should return a full directory path based on its fields."); } [TestMethod] public void GetPath_Softcoded() { MyClass target = …
29 c#  unit-testing 

9
接口命名:前缀“ Can-”与后缀“ -Able”
通常使用“ -able”作为接口的后缀,例如 可序列化可打印可枚举可饮用可射击可旋转 我以为'Can-'可能会更好,因为它可能更具描述性。是的,它比较罗y,给接口名称增加了干扰。特别地,可以使用被动动词。 例如,“ 1可射击”表示该物体能够射击(枪支可以实现这一目标),或者它可以被射击(目标板可以实现这一目标)。使用“ Can-”前缀,前者将为“ CanShoot”,后者将为“ CanBeShotAt”或“ CanShootAt”。 例如2文档“ CanBePrinted”和打印机“ CanPrint” 或者,我们应该坚持使用“ -Able”并让文档提供上下文吗? 任何意见。
29 api  interfaces 

14
为什么富代码格式更不常见?
我正在阅读《代码完成》,在有关布局和样式的章节中,他预测代码编辑器将使用某种格式的富文本格式。这意味着,而不是像这样的代码 Procedure ResolveCollisions { Performs a posteriori collision resolution through spatial partitioning algoritm } ( CurrentMap : SpriteContext, PotentialColliders: SpriteList ) var Collider : Sprite, Collidee : Sprite, Collision : SpriteCollision begin DoStuff(); end. 它可能看起来像这样: 程序 ResolveCollisions 通过空间划分算法执行后验碰撞解决 参量 CurrentMap : SpriteContext PotentialColliders : SpriteList 局部变量 Collider : Sprite Collidee …


10
我无法编程,因为我使用的代码使用旧的编码样式。这对程序员来说正常吗?
我是程序员,是第一份真正的工作,但是由于使用的编码风格,我无法解决任何问题。这里的代码: 没有评论 没有功能(依次执行50、100、200、300或更多行) 使用很多if带有很多路径的语句 有变数,就没有任何意义(例如:cf_cfop,CF_Natop,lnom,r_procod) 使用旧的语言(2002年的Visual FoxPro 8),但2007年有新版本。 我感觉自己已经回到了1970年。对于熟悉OOP,干净代码,设计模式等的程序员来说,以这种老式方式进行编码遇到麻烦是正常的吗? 编辑:所有的答案都很好。对于我的(未)希望,看来世界各地有很多这种代码库。所有答案中提到的一点是重构代码。是的,我真的很喜欢这样做。在我的个人项目中,我总是这样做,但是...我无法重构代码。程序员仅可在其设计任务中更改文件。 旧代码中的每个更改都必须在代码中保留注释(即使使用Subversion作为版本控制),还要保留与该更改相关的元信息(日期,程序员,任务)(这变得一团糟,其中的代码包含3条使用过的代码行和50条代码旧行评论)。我认为这不仅是代码问题,而且是软件开发问题的管理。

4
单元测试新手的单元测试最佳实践
近年来,我只为大型项目或小型工具中的人员编写了小型组件。我从来没有编写过单元测试,而且似乎总是像学习如何编写它们并实际上使一个人测试花费了很多时间,而不是简单地启动程序并进行真实测试。 我将要开始一个相当大的项目,该项目可能需要几个月的时间才能完成,尽管我会像往常一样尝试在编写元素时对其进行测试,但是我想知道单元测试是否可以节省时间。 我只是想知道是否有人可以提供很好的建议: 我是否应该在项目开始时就进行单元测试,并可能采用TDD方法。 在完成每个部分后,我是否应该随身编写测试? 我应该完成项目,然后最后编写单元测试。

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.