由于一个小小的规格更改,我的一项工作被扔掉了,结果证明规格没有正确。如果在项目开始时就完成了大部分工作 从一开始就不需要.

有哪些好的技巧/设计原则可以防止这些事情发生?

或者减少为了实现功能请求或实现过程中的设计更改所需的代码返工量?

有帮助吗?

解决方案

组件化。作出这样做他们的工作很好的代码块。但是,那仅仅是个开始。其通常的促成因素代码的大型组合如此糟糕,这需要一个完整的返工。从高度不稳定的需求,设计差,缺乏代码所有权的一切,这样的例子不胜枚举和。

添加到别人已经提出了:通信点击 你和客户,你和管理层之间的沟通,你和其他开发人员,您和您的QA部门,每个人之间的沟通是关键。确保管理人员理解在合理的时间,并确保您和客户的理解是,你的建筑到底是什么。

其他提示

花时间与您构建产品的客户保持畅通的沟通。制定里程碑并设置一个时间,在每个里程碑向客户展示项目。即使客户在展示里程碑时对它完全失望,您也可以从头开始,从上一个里程碑开始。正如 Csunwold 所说,这还要求您的工作构建在彼此独立工作的块中。

积分...

  1. 保持开放的沟通
  2. 对产品的进展保持开放和诚实的态度
  3. 愿意每天根据客户业务的需求和产品规格的变化而变化。

软件需求的变化,并没有多少人能做些什么,除了与客户更频繁的互动。

一个可以,但是,建立代码,在变化的脸更稳健。它不会从抛出满足,没有人需要再要求代码救你,但它可以减少这种变化的影响。

例如,每当适用,使用接口而不是类(或相应语言的等价物),并避免增加操作界面,除非你有绝对的把握,你需要他们。通过建立你的程序这样,你不太可能依赖于特定的实现知识,你就不太可能实现的事情,你就不需要。

这种方法的另一个优点是,可以很容易地交换为另一一种实现方式。例如,它有时不负有心人来写你的原型上最愚蠢的(效率),但最快的编写和测试执行,只有用的东西到底聪明更换时原型是产品和实际业绩的基础事项。我发现,这是为了避免过早的优化,从而扔掉的东西非常有效的方法。

正如前面所说,模块化就是答案。但这可能是一个很难在实践中使用的答案。我建议重点关注:

  • 小型库可以很好地完成预定义的事情
  • 模块之间的最小依赖关系

首先编写接口是实现这两个目标的好方法(使用用于依赖项的接口)。接下来,在编写代码之前针对接口编写测试,通常会突出显示非模块化的设计选择。

我不知道你的应用程序是否是 UI 密集型的;这会使模块化变得更加困难。它通常仍然值得付出努力,但如果不值得,那么假设它不久就会被丢弃并遵循冰山原则,即 90% 的工作不与 UI 绑定,因此更容易保持模块化。

最后,我推荐安德鲁·亨特和戴夫·托马斯写的《务实的程序员》,里面充满了技巧。我个人最喜欢的是 DRY——“不要重复自己”——任何重复相同内容的代码都会有味道。

  • 小迭代

  • 经常迭代

  • 迭代之间的测试

  • 尽快拿出一个简单的工作产品,以便客户可以提供意见。

基本上假设 东西会被扔掉,所以要适当编码, ,并且不要对某件事深入研究,否则将其丢弃会花费大量时间。

天儿真好,

翻翻其他的答案在这里,我发现每个人都在提什么为您的下一个项目做的。

这似乎虽然少了一种东西是有一个washup找出原因规范。是不同步的。与由客户所需的实际要求。

我只是担心,如果你不这样做,无论你正在采取的执行你的下一个项目,如果你仍然有实际要求和规范之间的不匹配什么办法。你的下一个项目,然后你会再次在同样的情况。

这可能是因为沟通不良或客户可能要求蠕变简单的事情。

但至少如果你知道的原因,你可以尝试,并有助于减少它再次发生的机会。

不敲其他的答案在说什么,并有一些伟大的东西有,但请从所发生的事情让你不注定要重复学习。

HTH

欢呼声,

有时一个重写是最好的解决方案!点击 如果您是一个相机编写软件,你可以假设,在未来的版本还将提供所有这些功能做视频,或立体声视频或3D激光扫描,包括所有的钩子,或者你可以写这样一个多功能的可扩展宇航员的架构,它可以应付下一个摄像机,包括喷气发动机 - 但是这将花费金钱,资源和性能这么多,你可能会更好过没有这样做。

在一个新角色新的功能完全重写并不总是一个坏主意。

就像csunwold说,模块化你的代码是非常重要的。写这样,如果一件属于容易出错,它不会弄脏的系统的其余部分。这样一来,就可以调试单个越野车节,同时能够安全地依靠休息。

此之外,文档是关键。如果你的代码是整齐,明确的说明,在未来的返工这将是对你无限更容易或谁恰巧调试。

使用源控制可以是有益的太。如果你发现一段代码不能正常工作,总有恢复到过去的稳健迭代的机会。

虽然它并不直接适用于你的榜样,在编写代码时,我尝试留意的方法,使我可以看到软件的未来发展。

基本上我尝试预测该软件会去,请重要的是,我抗拒实现任何的事情,我能想象发生的诱惑。所有我后,试图使API和接口支持可能的未来而无需实现这些功能呢,希望这些“可能出现的情况”帮我想出了一个更好,更面向未来的界面。

不总是ofcourse工作。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top