第四次作业(1)

问题:

1、敏捷开发是在什么样的背景下产生的?其主要特点有哪些?什么时候选择敏捷开发更恰当,为什么?

2、Code smell 是如何产生的?有哪些典型的 code smell?代码重构(Code refactoring)有哪些优点?有哪些代码重构的方法?

 

答:1、(1)背景:软件开发的新挑战:快速的市场进入时间,要求高生产率,快速变化的需求,快速发展的技术;传统的软件开发方法:强调过程和文档,对变化的适应能力偏弱。由于传统的软件开发方法存在很多不足,为了适应时代的潮流,跟上时代的步伐,便产生了敏捷开发方法。

          (2)主要特点:是一种短周期的迭代,是一种适应性而不是可预测性,强调人在项目中的关键作用。

          (3)何时选择:团队人数不多,项目需求经常发生变化,产品的可靠性不高,有资深程序员带队时选择敏捷开发比较恰当。因为敏捷开发的可靠性不高,一些大的项目开发需要高标准、高质量,对这些大的项目来说,风险太大,所以在小团队用比较合适。

     2、(1)Code Smell中文译名一般为“代码异味”,或“代码味道”,它是提示代码中某个地方存在错误的一个暗示,开发人员可以通过这种smell(异味)在代码中追捕到问题。代码不规范,比如有重复代码等就会形成code smell。

          (2)典型的 code smell

                 Duplicated Cod(重复代码);                                Long Method(过长函数);

                 Long Class(过大的类);                                       Long Parameter List(过长的参数列);

                 Divergent Changge(发散式变化);                        Shotgun Surgery(散弹式修改);

                 Feature Envy(依恋情结);                                    Data Clumps(数据泥团);

                 primitive obsession(基本类型偏执);                     switch statement(switch惊悚现身);

                 parallel inheritance hierarchies(平行继承体系);     lazy classv(冗赘类);

                 speculative generality(夸夸其谈未来性);               temporary field(令人迷惑的暂时字段);

                 message chain(过度耦合的消息链);                      middle man(中间人);

                 inappropriate intimacy(狎昵关系);                       alternative classes with different interface(异曲同工的类)         

                 incomplete library class(不完美的库类);               data class(纯稚的数据类);

                 refused bequest(被拒绝的遗赠);                          comments(过多的注释)。

          (3)优点:a. 能改进软件设计;

                          b. 使软件更容易理解;

                          c. 能帮助发现隐藏的代码缺陷,找到bug;

                          d. 优化代码,提高软件的开发速度,从而提高系统的稳定性,和可扩展性;

                          e. 能提高编程效率。

          (4)代码重构的方法:

                  a. 提取类/抽离方法:正如上面提到的,像“臃肿的类”(一个类提供了本该有几个类提供的功能)这种代码异味应该将原有类中的方法和属性移动到适当数目的新类中去。旧类中对应新类的方法和属性应该被移除。另外,有时候一些类过于臃肿是因为它包含了被其他类使用本应该是其他类的成员方法的成员方法。这些方法也应该被迁移到合适的类中。

                  b. 提取方法:像上面提到的“过长的方法”这种代码异味可以通过从旧方法中提取代码到一个或多个新方法中消除。

                  c. 分离条件许多时候,一个方法很长是因为包含好几个分支语句(if-else)。这些分支条件可以被提取和移动到几个单独的方法中。这确实能大大改善代码可读性和可理解性。

                  d. 引入参数对象/保留全局对象:在我做代码审查时发现另外一个很常见的情况 - 好几个参数被传入方法。问题主要与需要从已有方法中增加或者移除一个方法参数有关。在这种场景,建议将相关方法参数组成一个对象(引入参数对象),让方法传递这些对象而不是每个单独的参数。

                  e. 用符号常量替换魔法数字:对于有意义的并且到处被使用的字面常量,应该为它们分配一个命名常量。这能大大增强代码可读性和可理解性。

                  f. 重命名方法:正如上面提到的,模糊不清的方法名会影响代码的可使用性。这些模糊不清的名称应该重命名为有意义的可能与业务术语有关的名称,来帮助开发者通过业务上下文更好地理解代码。这很需要技巧并且要求开发者与业务专家一起协作来理清代码需要满足的业务需求。有趣的是,这种重构方法看起来似乎非常容易理解,但是常常被许多开发者忽视,虽然在Eclipse这种IDE的refactor菜单项中经常出现这一项。

 

posted @ 2015-05-17 16:54  涂江凤  阅读(...)  评论(... 编辑 收藏