zoukankan      html  css  js  c++  java
  • 第四次作业

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

    答:(1)敏捷开发的背景

          传统开发方法是基于客户能够在需求阶段就给出完整、准确的需求的假设,所有期望在项目初期获得详细的需求,然后严格控制需求变更,最终完成符合需求的软件。但我们发现实际上往往需求是“涌现”出来的,也就是说随着开发的不断进展而不断发现出来的,而无法再项目初期就明确的定义它,,也就是说传统开发方法的基本假设是错误的,这一新的假设导致了敏捷方法的一系列实践。另外,传统的软件开发方法认为需求是可以确定,所以采用的是基于工程的开发方法,也就是说期望通过事先的详细策划定义开发的整个过程,而敏捷认为需求是无法再早期完全确定的,所以采用的是基于经验的开发二店方法,也就是是事先不详细定义整个开发过程,而通过多次迭代来逼近最终目标。

    (2)主要特点:

            1.个体和交互胜过过程和工  2.可以工作的软件胜过面面俱到的文档; 3.客户合作胜过合作谈判; 4.响应变化胜过遵循计划;

    (3)合适选择敏捷开发、原因

             小团队,快速反映,一个人能力为中心,选择敏捷开发最合适。因为敏捷开发的可靠性不高,对团队人数要求也相对较少,人越少,开发项目就越小,故用敏捷开发较合适。

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

    答:  (1)Code Smell 的产生:Code Smell中文译名一般为“代码异味”,或“代码味道”,它是提示代码中某个地方存在错误的一个暗示,

               开发人员可以通过这种smell(异味)在代码中追捕到问题。在计算机编程社区中,code smell代表了任何标志着事物变坏的征兆。

               它常常标志代码应该被refactored或者全部的设计都应该被reviewed。这个短语出现在 WardsWiki上,它是被Kent Beck杜撰出来的。

               在refactoring兴起之后,这个短语的使用率骤增。

       <2>.code smell一般包括

    1. Duplicated Code。代码重复几乎是最常见的异味了。
    2. Long method。它是传统结构化的“遗毒”。
    3. Large Class。大类就是你把太多的责任交给了一个类。
    4. Divergent Change。一个类里面的内容变化率不同。
    5. Shotgun Surgery。这正好和上面相反。
    6. Feature Envy。对象的目的就是封装状态以及与这些状态紧密相关的行为。
    7. Data Clumps。某些数据通常像孩子一样成群玩耍:一起出现在很多类的成员变量中,一起出现在许多方法的参数中……,这些数据或许应该自己独立形成对象。
    8. Primitive Obsession。面向对象的新手通常习惯使用几个原始类型的数据来表示一个概念。
    9. Switch Statement。基于常量的开关语句是OO 的大敌,你应当把他变为子类、state 或strategy。
    10. Parallel Inheritance Hierarchies。并行的继承层次是shotgun surgery 的特殊情况。
    11. Lazy Class。一个干活不多的类。
    12. Speculative Generality。一个类实现了从未用到的功能和通用性。
    13. Temporary Field。一个对象的属性可能只在某些情况下才有意义
    14. Message Chain。消息链发生于当一个客户向一个对象要求另一个对象,然后客户又向这另一对象要求另一个对象,再向这另一个对象要求另一个对象,如此如此。
    15. Middle Man。对象的基本特性之一就是封装,而你经常会通过分派去实现封装。
    16. Inappropriate Intimacy。某些类相互之间太亲密,它们花费了太多的时间去砖研别人的私有部分。
    17. Alternative Classes with Different Interfaces。做相同事情的方法有不同的函数signature,一致把它们往类层次上移,直至协议一致。
    18. Incomplete Library Class。要建立一个好的类库非常困难。
    19. Data Class。对象包括状态和行为。如果一个类只有状态没有行为,那么肯定有什么地方出问题了。
    20. Refused Bequest。超类传下来很多行为和状态,而子类只是用了其中的很小一部分。
    21. Comments。经常觉得要写很多注释表示你的代码难以理解。

       <3>.重构的优点

           a.重构可以帮助你整理自己的思路,优化代码,从而提高系统的稳定性,和可扩展性。

           b.持续纠偏和改进软件设计

           c.帮助发现隐藏的代码缺陷

           d.从长远来看,有助于提高编程效率

       <4>.重构的方法

           a.提取类/抽离方法

           b.提取方法

          c.分离条件

           d.引入参数对象/保留全局对象

           e.用符号常量替换魔法数字

           f.重命名方法

  • 相关阅读:
    PHP 开发 APP 接口 学习笔记与总结
    Java实现 LeetCode 43 字符串相乘
    Java实现 LeetCode 43 字符串相乘
    Java实现 LeetCode 43 字符串相乘
    Java实现 LeetCode 42 接雨水
    Java实现 LeetCode 42 接雨水
    Java实现 LeetCode 42 接雨水
    Java实现 LeetCode 41 缺失的第一个正数
    Java实现 LeetCode 41 缺失的第一个正数
    Java实现 LeetCode 41 缺失的第一个正数
  • 原文地址:https://www.cnblogs.com/hgl1023/p/4513348.html
Copyright © 2011-2022 走看看