首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >每一种选择都会招致技术债务吗?

每一种选择都会招致技术债务吗?
EN

Software Engineering用户
提问于 2017-06-15 12:07:37
回答 4查看 622关注 0票数 7

我很熟悉技术债务作为工作成本的概念(通过维护、支持、返工等)。在选择权宜之计而不是完整的解决方案时发生的。

我想知道的是,你所做的选择是否招致了技术债务?

例如,保护以前从未具有任何安全性的现有应用程序。假设最初的需求非常简单--有管理员和非管理员。管理员可以访问管理区域,而非管理员不能访问。在这一点上,团队有选择,

  • 实现一个简单的安全模型,例如,一个字段指示用户是否是管理员,并限制该字段上的应用程序访问
  • 实现一个完整的安全模型,例如角色、权限和组以及相关的应用程序挂钩。

执行所需的费用如下:

  • 简单的模型。快速实现(5d),但是添加和管理额外角色(例如主管、经理等)并在整个应用程序中应用它们的成本很高(每个角色5d)。
  • 完整的模型。实现时间更长(20d),但是添加额外角色的成本应该是最小的,并且在整个应用程序中应用它们的成本低于简单选项(每个角色1d)。

通过选择简单的模型,我在实现时间上节省了15d,但对于任何额外的角色,我却欠了4d的技术债。

如果我选择了完整的模型,我会额外承担15d的实现成本,但我是否承担了任何技术债务?

EN

回答 4

Software Engineering用户

回答已采纳

发布于 2017-06-15 12:16:58

技术债意味着你欠了债。如果您完成了您的任务(例如管理员/用户),并且工作正常,并且安全且易于维护,那么就没有技术上的负担了。

不能预见未来的潜在发展,新的特点或变化并不意味着技术债务。始终与解决方案相比较,需要满足当前的需求。

使用著名的汽车类比,技术债务是当你的刹车失灵,而你没有钱去修理它。如果你拥有一辆非常好的大众汽车(不是柴油.),那么不拥有一辆法拉利并不是技术债务。

票数 8
EN

Software Engineering用户

发布于 2017-06-15 15:13:44

我很熟悉技术债务作为工作成本的概念(通过维护、支持、返工等)。在选择权宜之计而不是完整的解决方案时发生的。

那不是什么技术债务意思是.

技术债务是一种财务隐喻(沃德·坎宁安(Ward Cunningham )试图向经理解释这个概念时,他正在研究一种金融产品,因此他选择了一个他熟悉的财务隐喻)。比如说,你想进入建筑行业。你需要机器来赚钱,但你需要钱去买机器。这是第22次。你怎么打破这个的?欠债!你借钱,买机器,用这些机器赚钱,用这些钱还清你的债务。如果你不这样做,你将累积利息,你的债务将更高。

技术债务关系到对系统的理解:为了更好地设计一个系统,你需要充分了解系统。但是,很多时候,我们对我们将要建设的东西的理解只是部分的。为了获得更多的理解,我们需要观察系统,使用它,等等。但是,当然,为了做到这一点,我们需要首先构建…。但是为了更好地构建它,我们首先需要理解它--…诸若此类。因此,为了更好地设计系统,你需要系统的经验,但是为了获得系统的经验,系统需要存在,也就是说你需要已经设计过它。抓住-22!

那你是做什么的?考虑到你的部分理解,你用你所知道的最好的方式来设计系统。(你承担技术债务。)然后,当您更好地理解系统时,可以重构它,使设计看起来好像从一开始就完全理解了它。(你偿还了技术债务。)

非常重要的是,技术债务意味着“以最好的方式构建系统,考虑到您的部分理解”。您必须设计好您的系统,否则,您限制您的能力,以重构您新获得的理解,回到系统!这并不意味着“造些劣质的东西,只是为了把东西弄出家门”。如果你知道更好的方法,这不是技术债务。技术债务意味着你不知道更好的方法,因为你需要先构建它,才能理解什么是更好的方法来构建它。

我不认为你所描述的是技术债务。您所描述的只是YAGNI原则:不要构建某些东西,因为您认为以后可能需要它。只有当你现在真正需要它的时候,才能建造它。如果在使用带有管理员/常规用户拆分的系统一段时间之后,您意识到您实际上不需要基于角色的系统,而需要基于功能的系统呢?

如果您需要授权的发现是通过使用系统进行的,您可以将其解释为技术债务。如果你不是先以有限的理解建立这个系统的话,你永远不会知道这一点。

票数 6
EN

Software Engineering用户

发布于 2017-06-15 12:37:03

您所提供的不是我所称的技术债务;它是一个架构决策,只有在您设计系统的约束下才能做出。如果您期望在这个系统的生命周期中只添加一个角色,那么使用第二个解决方案是没有意义的。同样地,如果你想要增加很多角色,那么如果你不去做第二个角色,那就太愚蠢了。

技术债务是一种解决方案的有意实现,从长远来看,这个解决方案是站不住脚的,但现在已经足够好了。也许这段时间可以花在其他地方更好,这样你就能找到一些简单的东西,从而推迟你必须解决实际问题的不可避免的时刻。

在您的情况下,当您实际需要第二个解决方案时,它将使用第一个解决方案,但是时间限制(或其他什么)迫使您立即采用简单的解决方案,因为您只希望在接下来的一个月中创建一个额外的角色。现在,您已经发生了技术债务,因为您选择了一个解决方案,您知道,从长远来看是站不住脚的。

我与技术债务相关的关键因素之一是,您实际上已经编写了一种解决方案,该解决方案不符合标准,不能扩展到将来可能需要的事情,或者肯定不能以任何有意义的方式进行扩展(至少不是以您需要的方式)。你故意制造了一个定时炸弹。

如果您实现了一个您有信心的技术解决方案,它将解决它想要解决的问题,那么就没有与它相关的技术债务。与以往一样,需求可能会在以后发生变化,但这不是技术债务。

在这一点上,不要害怕招致一些技术债务。

在我的公司里,花太多的时间在功能上学习了这一教训,时间证明是丢弃的代码;通过编程编译Excel表格并将它们扔给销售团队,可以获得更多的金钱收益。

票数 1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/350956

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档