软件工程

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


8
代码维护:在扩展新代码时是否保持一致的错误模式?
我必须扩展项目的现有模块。我不喜欢它的完成方式(涉及很多反模式,例如复制/粘贴的代码)。由于多种原因,我不想执行完整的重构。 我是不是该: 使用现有约定创建新方法,即使我觉得错了,也可以避免对下一个维护者造成混淆并与代码库保持一致? 要么 尝试使用我感觉更好的方法,即使它在代码中引入了另一种模式? 精确度在第一个答案后进行了编辑: 现有的代码不是一团糟。很容易理解和理解。但是,它引入了许多可以通过良好设计避免的样板代码(结果代码可能会变得更难遵循)。在我当前的情况下,这是一个很好的旧JDBC(内置弹簧模板)DAO模块,但是我已经遇到了这个难题,我正在寻求其他开发人员的反馈。 我不想重构,因为我没有时间。而且即使有时间,也很难证明一个完整的正常工作的模块需要重构。重构成本将超过其收益。请记住:代码并不凌乱或过于复杂。我不能在那里提取一些方法并在这里介绍一个抽象类。这在设计中更是一个缺陷(我认为极端“保持愚蠢简单”的结果) 因此,也可以这样问这个问题: 作为开发人员,您是喜欢维护简单的愚蠢无聊的代码,还是希望有一些帮助程序来代替您的愚蠢无聊的代码? 最后一种可能性的缺点是,您必须学习一些知识,也许您还必须维护简单的愚蠢无聊代码,直到完成完整的重构为止)


12
故意拼写错误以避免保留字
我经常看到这样的代码,其中包含常见单词的故意拼写错误,无论好坏,这些单词已成为保留单词: klass或clazz为类:Class clazz = ThisClass.class kount用于计数在SQL:count(*) AS kount 我个人认为这会降低可读性。在我自己的实践中,我发现没有太多案例无法使用更好的名称- itemClass或recordTotal。 JavaDocs for Class中的示例在参数中显示了这一点: public <U> Class<? extends U> asSubclass(Class<U> clazz) 这是否显示合理的用例?

3
Ruby中的符号是什么?
我是Ruby世界的新手,我对符号的概念有些困惑。符号和变量有什​​么区别?为什么不仅仅使用变量? 谢谢。
45 ruby 

1
是否有关于敏捷的经典书籍?
作为一个单独的开发人员,我认为我正在使用类似敏捷的流程,但是我想将自己在做的事情与真正的敏捷进行比较,看看我是否可以改进自己的流程。 是否有一本书是事实上的标准,用于描述有关敏捷的最佳实践,方法和其他有用信息?那本书使它与众不同吗?
45 agile  books 


26
最令人费解的编程语言?[关闭]
从合理的通用编程语言中,您发现哪一种最容易弯曲? 我一直在听很多编程播客,并花一些时间来学习一些新语言,这些新语言被认为是即将到来且很重要的。我不一定要谈论BrainFuck,但是您认为哪种语言会挑战通用的编程范例? 对我来说,我在1990年代进行了一些功能和逻辑编程(例如Prolog),所以我不能说我在那找到了什么特别的东西。 我还远未成为专家,但即使到今天,对我来说,最令人吃惊的编程语言是Perl。并不是因为“ Hello World”很难实现,而是因为词汇上的灵活性如此之大,以至于某些最难的解决方案可以用诗般的方式分解,以至于我不得不走出航站楼以清醒头脑。我并不是说我可能会出售商业软件实现,只是有一个明显的原因使Perl声名远播。只需看看其中的基本书籍清单即可。 那么,什么是能促进您更好的编程和实践的思维语言?

10
对您接受的东西持开放态度吗?
[免责声明:这个问题是主观的,但我希望得到事实和/或反思的支持] 我认为每个人都知道“ 稳健性原则”,通常用Postel定律来总结: 保守发送的内容;在接受的内容上保持自由。 我同意,对于设计广泛的通信协议,这可能是有道理的(目的是允许轻松扩展),但是我一直认为,将其应用于HTML / CSS完全是失败的,每个浏览器都执行自己的无声调整检测/行为,几乎不可能在多个浏览器中获得一致的渲染。 我确实注意到,除非另有说明,否则TCP协议的RFC认为“ Silent Failure”是可以接受的……至少可以说这是一种有趣的行为。 在整个软件行业中,还有其他一些应用此原理的示例,这些示例经常出现,因为它们已经咬住了开发人员,从我的头顶开始: JavaScript分号插入 C(静默)内置转换(如果不被截断的话,还算不错……) 并且有一些工具可以帮助实现“智能”行为: 名称匹配语音算法(Double Metaphone) 字符串距离算法(Levenshtein距离) 但是,我发现这种方法虽然在与非技术用户打交道或在错误恢复过程中帮助用户时可能会有所帮助,但在应用于库/类接口的设计时仍存在一些缺点: 该算法是否猜测“正确”在一定程度上是主观的,因此可能违反最小惊讶原则 它使实施更加困难,从而增加了引入错误的机会(违反YAGNI吗?) 它使行为更易于更改,因为对“猜测”例程的任何修改都可能破坏旧程序,几乎从一开始就排除了重构的可能性! 这就是导致我提出以下问题的原因: 在设计接口(库,类,消息)时,您是否倾向于健壮性原则? 我本人往往很严格,在我的界面上使用了广泛的输入验证,我想知道自己是否太严格了。
45 design 

20
您如何跟踪个人项目中的错误?[关闭]
我正在尝试决定是否需要为自己的项目重新评估缺陷跟踪过程。在过去的几年中,我实际上只是使用TODO代码中的标记来跟踪缺陷,并在特定的视图中跟踪它们(我使用的是Eclipse,它具有不错的标记系统)。 不幸的是,我开始怀疑这个系统是否不可持续。我发现的缺陷通常与我正在处理的代码片段有关。无法立即理解的错误往往会被遗忘或忽略。我为我的妻子写了一个申请表,该申请表有近9个月的严重缺陷,但我一直忘了修复它。 您使用什么机制来跟踪个人项目中的缺陷?您是否有特定的系统或确定优先级和管理它们的过程?

11
将应用程序逻辑放入数据库层的论据是什么?[关闭]
大多数软件开发人员都希望将应用程序逻辑保留在应用程序层中,对于我们而言,将其保留在此处可能很自然。数据库开发人员似乎希望将应用程序逻辑作为触发器和存储过程放在数据库层中。 就个人而言,我希望在应用程序层中保留尽可能多的内容,以使其更易于调试,并使各层的职责分开。 您对此有何想法,应该或不应该在数据库层中实现什么? 编辑从DBA角度来看,此问题也包含在dba.se上。由于programmers.se和dba.se的受众和偏见不同,因此未来的读者可能希望先对这两套答案进行审查,然后再确定最适合他们的答案。

8
是否有合理的理由返回异常对象而不是抛出异常对象?
该问题旨在适用于任何支持异常处理的OO编程语言。我使用C#仅出于说明目的。 通常会在出现无法立即处理代码的问题时引发异常,然后将异常捕获在catch其他位置的子句中(通常是外部堆栈框架)。 问:是否有任何合法的情况不会引发并捕获异常,而只是从方法中返回然后将其作为错误对象传递出去? 之所以提出这个问题,是因为.NET 4的System.IObserver<T>.OnError方法仅表明了这一点:异常作为错误对象传递。 让我们看看另一种情况,验证。假设我遵循传统的观点,因此我在区分错误对象类型IValidationError和ValidationException用于报告意外错误的单独异常类型: partial interface IValidationError { } abstract partial class ValidationException : System.Exception { public abstract IValidationError[] ValidationErrors { get; } } (System.Component.DataAnnotations名称空间的作用非常相似。) 这些类型可以按如下方式使用: partial interface IFoo { } // an immutable type partial interface IFooBuilder // mutable counterpart to prepare instances of above type { …

8
不同编程语言的每个位置的平均错误数量是否相同?[关闭]
有人告诉我,对于不同的编程语言,每行代码的错误/缺陷的平均数量是“恒定的”。Ruby的10 KLOC与c ++的10 KLOC具有相同数量的错误。该参数通常用于促进表达语言的使用(考虑python / ruby​​而不是c ++ / assembly),因为描述相同功能的行数会更少。 有人知道这种说法的来源吗?高级语言会导致更少的错误吗?

3
源代码中的版权声明[关闭]
自从我开始编程以来,我已经在大多数代码文件的顶部看到一个标头,表明某种版权:例如 /* Copyright (c) 1998 Innotech */ 要么 /* Copyright (c) 1998-2008 Innotech */ 从概念上讲,我有主意...取决于您的需求,它大致可在以下两者之间转换: 嘿,看看!我做的!我真棒! 至 请勿复制/重新分发!如果您愿意,我们的律师将追随您! 一方面,我发现整个过程有些幽默,因为通常这是一个内部开发人员都不会看到的文件,但是假设这一行实际上有一天可能“意味着某事”,我对日期部分感到好奇。 单一日期是否暗示作者从该日期起一直享有版权? 如果使用了日期范围,并且没有保持最新状态,那么开发人员是否已超出该日期范围而使自己的版权无效? 如果没有任何其他形式的法律文件-版权标头是否提供任何形式的实际法律效力?还是我们都在自欺欺人。

5
您如何说服管理层“投资”单元测试?
您如何说服经理让您进行单元测试? “使用”是指被允许开发,检入源代码控制并随着时间的推移维护单元测试等。 典型的管理异议是: 客户没有为单元测试付费 该项目没有时间进行单元测试 技术债务?什么技术债务? 您知道其他异议吗?你的答案是什么? 提前致谢!

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.