浅谈敏捷设计

在软件开发过程中,都避免不了进行概要设计、详细设计等过程,这和软件测试过程中进行测试计划测试方案设计很类似。

这篇博客,就说说敏捷设计的一些内容,以及拙劣设计对软件应用的严重影响。

 

我们日常接触到的软件项目是一个抽象的概念,它和程序包括形状、结构以及每一个模块、类和方法都有关。可以通过很多媒介和语言去描述它,但它最终体现为源代码——源代码就是设计。

应该知道的一件事是:软件都是有生命周期的。当出现以下任何一点时,就表明软件正在步入声明晚期。

一、拙劣设计的表现

1、僵化性(Rigidity)

僵化性指的是难以对软件进行改动,即使是简单的改动。单一的改动可能会导致有依赖关系的模块出现不可预知的变化,可以将其称之为:业务和技术的屏障!最常见的具体表现为:需求变更!

2、脆弱性(Fragility)

脆弱性指的是进行一个改动时,程序的许多地方可能会出问题。常见的表现是出问题的地方与改动的地方并没有概念上的关联,修正这些问题就会引起更多的问题,这样会导致技术负债不断变大!

3、牢固性(Immobility)

牢固性是指设计难以重用。比如设计中包含了对其他系统有用的部分,要将其从系统中剥离出来所需要的努力和风险太大。

PS:这也是这几年微服务和DevOps越来越流行的原因。

4、粘滞性(Viscosity)

粘滞性有2中表现形式:

①软件的粘滞性:对软件进行改动有很多方法,有些可以保持设计,有些会破坏设计。当可以保持系统设计的方法比生硬方法更难以使用时,就表明系统具有较高的粘滞性。

  敏捷设计的目标是:软件设计应该可以容易的进行那些保持设计的变动。

②环境的粘滞性:开发环境的迟钝、低效,就会产生环境的粘滞性。比如编译花费时间长,比如代码管理需要花费几个小时去check in仅仅几个文件,这样都很难保持项目中的软件设计。

  敏捷设计目标是:创建易于保持系统设计的软件环境。

5、复杂性(Complexity)

复杂性则指的是设计中包含了当前没有用的组成部分。它还有不必要的复杂性。我们在进行软件设计时经常为了保持代码的灵活性和扩展性,而设置本次迭代并不会用到的结构设计,这样会使得

软件变得复杂,并且难以理解。

6、重复性(Repetition)

滥用重复的代码,这是软件设计重复性表现最频繁的方式。代码设计应该是抽象、简洁的。当系统中重复的代码较多时,会使得系统难以改动,且难以阅读,出现问题时也需要对其进行一一修正。

但每个重复体之间都有细微的差别,所以修正的方式也不同,这样会导致大量重复的工作,降低了工作效率。应该努力做正确的、产生更多价值的事情,而不是造轮子

7、晦涩性(Opacity)

晦涩性指的是模块难以理解。如果模块代码难以理解阅读,随着时间变化而代码进行演化,会变得越来越难以理解。所以,编程是一门艺术,代码应该是优雅、易读的

 

二、为什么设计会变得拙劣?

需要知道的一点:需求是项目中最不稳定的因素。如果我们的软件设计由于持续的、大量的需求变更而变得拙劣,那就表明我们的设计和实践本身是具有缺陷的。

 

三、保持尽可能好的设计

敏捷开发人员应致力于保持设计尽可能的适当、干净。不断优化设计,不是几周甚至几个月才进行一次的事情,而应该贯穿与软件的整个项目周期,经常性的去优化。

源代码是设计最重要的指表示,所以它同样要保持干净。这也是一种职业素养

 

四、什么是敏捷设计

敏捷设计时一个过程,不是一个事件。它是一个持续的应用原则、模式以及实践来改进软件的结果和可读性的过程。它致力于保持系统设计在任何时间都尽可能的简单、干净以及富有表现力!

 

posted @ 2017-10-22 01:24  老_张  阅读(2561)  评论(0编辑  收藏  举报