• 软件工程(第四次作业)


    第四次作业

    题目

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

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

     

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

         所谓敏捷开发是以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。在敏捷开发中,软件项目在构建初期被切分成多个子项目,各个子项目的成果都经过测试,具备可视、可集成和可运行使用的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。

         基于之前软件开发的缺陷,面临新挑战

    • 快速的市场进入时间,要求高生产率
    • 快速变化的需求
    • 快速发展的技术

         传统的软件开发方法

    • 强调过程和文档
    • 对变化的适应能力偏弱

         开发代价随着时间成指数增长

       (2)敏捷开发做法与现有做法相比较有如下4个特点:

              1)个人和交流重于流程和工具

              2)可用的软件高于完备的的文档

              3)与客户合作重于为合同谈判

              4)对变更及时做出的反应高于遵循原定计划

     

       (3)何时选择敏捷开发、原因

             小团队,快速反映,以个人能力为中心,选择敏捷开发较合适。自上而下,建立组织级管理及运行制度,如身之使臂,臂之使指,选择cmmi较合适。因为敏捷开发的可靠性 不高,对团队人数要求也就相对较少,人越少,开发项目就小,故使用敏捷开发较适合。然而对较大的项目开发需要高标准、高质量,所以对大项目来说,要降低风险,就需要大团队的合作。

     

     

    答:2(1)(以下为网上查资料所得答案)

           code smell译名一般为“代码异味”,或“代码味道”,它是提示代码中某个地方存在错误的一个暗示,人可以通过这种smell(异味)在代码中追捕到问题。在计算机编程社区中,code smell代表了任何标志着事物变坏的征兆。它常常标志代码应该被refactored或者全部的设计都应该被reviewed。这个短语出现在 wardswiki上,它是被kent beck杜撰出来的。在refactoring兴起之后,这个短语的使用率骤增。 判断是否存在code smell经常是主观判断,并且随着语言、开发者、开发理论的不同而存在差异。经验丰富和知识渊博的人通过对优秀设计有一种“感觉”,他们已经达到一种称之为“无意识能力 (unconsciouscompetence)”的状态。也就是说,他们无需思考,只要通过查看代码或一段设计就可以立马对这个项目的代码质量有一种 “感觉”,能够对代码设计的优劣有一个大致的判断。code smell只是一种“暗示”,而非一种“确定”。将某些事物称之为“code smell”并未是一种攻击;它只是一种提示:人需要对项目设计进行更进一步的查看。因此,code smell更多是“直觉的,本能的”。

          (2)典型的 code smell:

            1)Duplicated Cod(重复代码)

            2)Long Metnod(过长函数);

            3)Long Class(过大的类)

            4)Long Parameter List(过长的参数列)

            5)Divergent Changge(发散式变化)

            6)Shotgun Surgery(散弹式修改)

            7)Feature Envy(依恋情结)

            8)Data Clumps(数据泥团)

            9)primitive obsession(基本类型偏执)

           10)switch statement (switch 惊悚现身)

           11)parallel inheritance jierarchies(平行继承体系)

           12) lazy classv(冗赘类)

           13) speculative generality(夸夸其谈未来性)

           14)temporary field(令人迷惑的暂时字段)

           15)message chain(过度耦合的消息链)

           16) middle man(中间人)

           17)inappromriate intimacy(狎昵关系)

           18)alternative classes with different interface(异曲同工的类)

           19)incomplete library class(不完美的库类)

           20)data class(纯稚的数据类)

           21)refused bequest(被拒绝的遗赠)

           22)comments(过多的注释)。

         (3)代码重构的优点:

             1) 能改进软件设计;

             2) 使软件更容易理解;

             3) 能帮助开发人员找到bug;

             4) 提高编程效率

     

        (4)代码重构的方法

      ---提取类/抽离方法

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

    ---提取方法

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

    ---分离条件

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

    ---引入参数对象/保留全局对象

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

    ---用符号常量替换魔法数字

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

    ---重命名方法

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

     

     

     
  • 相关阅读:
    graalvm 内置require 模块的开启
    Calling out from Java to JavaScript (with call back) – leveraging interoperability support of GraalVM
    web开发 api 资源跨域的一种实践
    使用rollup 转换commonjs 模块为es6 模块,方便的支持graalvm 模块兼容
    使用json-mask 查询json 数据
    nginx njs docker 试用
    使用nginx-prometheus-exporter 监控nginx
    wso2 关于graphql 的方案
    docker也一直发展
    操作系统-容器-Docker:如何将应用打包成为 Docker 镜像?
  • 原文地址:https://www.cnblogs.com/zze-ysj-zdl-zdj-jiaren/p/4513005.html
Copyright © 2020-2023  润新知