mirror of
https://github.com/LCTT/TranslateProject.git
synced 2024-12-26 21:30:55 +08:00
Merge pull request #29485 from wxy/20210205.0-⭐️⭐️-Why-simplicity-is-critical-to-delivering-sturdy-applications
RP:published/20210205.0 ⭐️⭐️ Why simplicity is critical to delivering sturdy applications.md
This commit is contained in:
commit
bc92491d1a
@ -3,27 +3,32 @@
|
||||
[#]: author: "Alex Bunardzic https://opensource.com/users/alex-bunardzic"
|
||||
[#]: collector: "lkxed"
|
||||
[#]: translator: "toknow-gh"
|
||||
[#]: reviewer: " "
|
||||
[#]: publisher: " "
|
||||
[#]: url: " "
|
||||
[#]: reviewer: "wxy"
|
||||
[#]: publisher: "wxy"
|
||||
[#]: url: "https://linux.cn/article-15877-1.html"
|
||||
|
||||
ZOMBIES:为什么简洁性是交付健壮软件的关键(五)
|
||||
======
|
||||
|
||||
![][0]
|
||||
|
||||
> 当你坚持最简场景时,你最终会得到最简单的解决方案。
|
||||
|
||||
在前面的文章中,我已经解释了为什么将编程问题看作一整群丧尸来处理是错误的。我用 ZOMBIES 方法来解释为什么循序渐进地处理问题更好。
|
||||
|
||||
ZOMBIES 表示以下首字母缩写:
|
||||
|
||||
**Z** – 最简场景(Zero)
|
||||
**O** – 单元素场景(One)
|
||||
**M** – 多元素场景(Many or more complex)
|
||||
**B** – 边界行为(Boundary behaviors)
|
||||
**I** – 接口定义(Interface definition)
|
||||
**E** – 处理特殊行为(Exercise exceptional behavior)
|
||||
**S** – 简单场景用简单的解决方案(Simple scenarios, simple solutions)
|
||||
- **Z** – 最简场景(Zero)
|
||||
- **O** – 单元素场景(One)
|
||||
- **M** – 多元素场景(Many or more complex)
|
||||
- **B** – 边界行为(Boundary behaviors)
|
||||
- **I** – 接口定义(Interface definition)
|
||||
- **E** – 处理特殊行为(Exercise exceptional behavior)
|
||||
- **S** – 简单场景用简单的解决方案(Simple scenarios, simple solutions)
|
||||
|
||||
在系列的前四篇文章中,我展示了 ZOMBIES 方法的前六个原则(LCTT译注:原文为前五个,应为笔误)。
|
||||
|
||||
第一篇中 [实现了最简场景][7],它为代码提供了最简可行路径。第二篇文章中执行了 [单元素场景和多元素场景上的测试][8]。第三篇中介绍了[边界和接口][9]。 第四篇中处理[特殊行为][10]。在本文中,我将介绍最后一项:简单场景用简单的解决方案。
|
||||
|
||||
第一篇中 [实现了最简场景][7],它为代码提供了最简可行路径。第二篇文章中执行了 [单元素场景和多元素场景上的测试][8]。第三篇中介绍了 [边界和接口][9]。 第四篇中处理 [特殊行为][10]。在本文中,我将介绍最后一项:简单场景用简单的解决方案。
|
||||
|
||||
### 简单场景用简单的解决方案
|
||||
|
||||
@ -35,7 +40,7 @@ ZOMBIES 方法通过坚持简洁性来帮助你交付健壮优雅的解决方案
|
||||
|
||||
似乎一切工作都结束了,一个不那么认真负责的工程师很可能会宣布胜利。但开明的工程师总是会探索得更深一点。
|
||||
|
||||
我一直推荐做 <ruby> [变异测试][11]<rt>mutation testing</rt></ruby>。在圆满结束这个练习项目,开始新的征程之前,用变异测试来敲打敲打你的解决方案是明智的。况且你也不得不承认,变异很适合对付丧尸的。
|
||||
我一直推荐做 <ruby>[变异测试][11]<rt>mutation testing</rt></ruby>。在圆满结束这个练习项目,开始新的征程之前,用变异测试来敲打敲打你的解决方案是明智的。况且你也不得不承认,变异很适合对付丧尸的。
|
||||
|
||||
你可以在开源网站 [Stryker.NET][12] 上进行变异测试。
|
||||
|
||||
@ -147,7 +152,7 @@ Total tests: 9
|
||||
|
||||
拖延对于软件工程师来说并不是一件容易的事情。我们总是急于动手写代码。我们熟悉各种设计模式、反模式、编程原则和现成的解决方案。我们总是迫不及待想将它们应用到可执行的代码中,并且倾向于一次性做大量的工作。所以在行动之前仔细考虑每个步骤是一种美德。
|
||||
|
||||
这个练习说明 ZOMBIES 方法能够通过一系列深思熟虑的小步骤来帮你实现解决方案。但是有一点需要特别注意,根据[Yagni][16]原则,这些深思熟虑常常会飞得太远,以至于最终形成一个大而全的系统。这会产生臃肿、紧密耦合的系统。
|
||||
这个练习说明 ZOMBIES 方法能够通过一系列深思熟虑的小步骤来帮你实现解决方案。但是有一点需要特别注意,根据 [Yagni][16] 原则,这些深思熟虑常常会飞得太远,以至于最终形成一个大而全的系统。这会产生臃肿、紧密耦合的系统。
|
||||
|
||||
### 迭代式开发与增量式开发
|
||||
|
||||
@ -161,7 +166,7 @@ Total tests: 9
|
||||
|
||||
这就是为什么迭代式方法在真正实现一个功能之前总是先提供一个假实现。你硬编码一系列的期望,以验证小的修改不会导致系统无法运行。然后进行必要的修改,用实际处理代码替换硬编码的值。
|
||||
|
||||
作为经验法则,在迭代方法中,你的目标是通过设计期望(微测试),对代码进行不断改进。每进行一次改进,你都要检验系统,以确保它处于工作状态。以这种方式不断前进,最终会达到满足所有期望的程度,并且此时代码已经被重构,没有任何存活的变异体了。
|
||||
作为经验法则,在迭代方法中,你的目标是通过设计期望(微测试),对代码进行不断改进。每进行一次改进,你都要检验系统,以确保它处于工作状态。以这种方式不断前进,最终会达到满足所有期望的程度,并且此时代码已经被重构,没有任何存活的变异体了。
|
||||
|
||||
一旦达到了这种状态,你就可以相当自信地交付解决方案了。
|
||||
|
||||
@ -169,6 +174,8 @@ Total tests: 9
|
||||
|
||||
愿 ZOMBIES 方法在软件开发的征程上帮助到你。
|
||||
|
||||
*(题图:MJ/ca463fc6-021b-4818-ba3d-9cd3c8736577)*
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
via: https://opensource.com/article/21/2/simplicity
|
||||
@ -176,7 +183,7 @@ via: https://opensource.com/article/21/2/simplicity
|
||||
作者:[Alex Bunardzic][a]
|
||||
选题:[lkxed][b]
|
||||
译者:[toknow-gh](https://github.com/toknow-gh)
|
||||
校对:[校对者ID](https://github.com/校对者ID)
|
||||
校对:[wxy](https://github.com/wxy)
|
||||
|
||||
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
|
||||
|
||||
@ -188,10 +195,10 @@ via: https://opensource.com/article/21/2/simplicity
|
||||
[4]: https://opensource.com/alternatives?intcmp=7016000000127cYAAQ
|
||||
[5]: https://opensource.com/tags/linux?intcmp=7016000000127cYAAQ
|
||||
[6]: https://opensource.com/resources?intcmp=7016000000127cYAAQ
|
||||
[7]: https://opensource.com/article/21/1/zombies-zero
|
||||
[8]: https://opensource.com/article/21/1/zombies-2-one-many
|
||||
[9]: https://opensource.com/article/21/1/zombies-3-boundaries-interface
|
||||
[10]: https://opensource.com/article/21/1/zombies-4-exceptional-behavior
|
||||
[7]: https://linux.cn/article-15808-1.html
|
||||
[8]: https://linux.cn/article-15817-1.html
|
||||
[9]: https://linux.cn/article-15859-1.html
|
||||
[10]: https://linux.cn/article-15860-1.html
|
||||
[11]: https://opensource.com/article/19/9/mutation-testing-example-definition
|
||||
[12]: https://stryker-mutator.io/
|
||||
[13]: https://opensource.com/sites/default/files/uploads/stryker-net.png
|
||||
@ -200,4 +207,5 @@ via: https://opensource.com/article/21/2/simplicity
|
||||
[16]: https://martinfowler.com/bliki/Yagni.html
|
||||
[17]: https://en.wikipedia.org/wiki/Kent_Beck
|
||||
[18]: https://en.wikipedia.org/wiki/Ron_Jeffries
|
||||
[19]: https://www.geepawhill.org/
|
||||
[19]: https://www.geepawhill.org/
|
||||
[0]: https://img.linux.net.cn/data/attachment/album/202306/05/153322mror89lsrwl9os3g.jpg
|
Loading…
Reference in New Issue
Block a user