第四次作业(1和2)

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

<1>:敏捷开发产生的背景--可归纳为两大方面

对于软件开发的新挑战:快速的市场进入时间,要求高生成率; 快速变化的需求; 快速发展的技术。

对于传统的软件开发方法:强调过程和文档; 对变化的适应能力偏弱。

<2>:敏捷开发的主要特点:

针对敏捷方法的基本观点,可以看出的特点:强调适应性、强调人在项目中的关键作用。

针对敏捷宣言,可以看出特点:个体和交互重于过程和工具;工作的软件重于详尽的文档;客户合作重于合同谈判;响应变化重于遵循计划。

<3>:对于敏捷开发的选择--选择一种合适的软件开发方法取决于多种因素。在做出决定之前,我们需要充分考虑以下这些方面:

a.方法的复杂度。确保你的团队或组织能够应付这种复杂度。

b.社区和业界支持。有较多的社区及行业支持可以使你受益匪浅。

c.实用工具。一个良好的软件工具可以帮助团队有效地处理日常工作,促进团队协作,并减少管理成本。

d.对敏捷方法的认识程度。选择一些与你当前开发方式比较接近的敏捷方法将有助于推动该方法的实施。

e.你的团队规模。较小规模的团队最好从简单的方式入手。

f.你不需要只遵从一种方法。你可以为团队选择一个主要的方法(如Scrum),然后借鉴其他方法。

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.重命名方法

时间: 2024-10-24 23:24:16

第四次作业(1和2)的相关文章

04+罗潇潇+罗潇第四次作业

04+罗潇潇+罗潇第四次作业 1.项目整体管理的过程 (1)项目启动,制定章程 (2)制定初步的项目范围说明书. (3)制定项目管理计划 (4)指导和管理项目执行 (5)监督和控制项目 (6)整体变更 (7)项目收尾 2.项目启动就是以书面的.正式的形式肯定项目的成立与存在,同时以书面正式的形式为项目经理进行授权.项目章程应当由项目组织以外的项目发起人发布,若项目为本组织开发也可以由投资人发布. 3.项目章程包括: (1)基于项目干系人的需求和期望提出的要求. (2)项目必须满足的业务要求和产品

软件工程(第四次作业)

第四次作业 题目: 1. 敏捷开发是在什么样的背景下产生的?其主要特点有哪些?什么时候选择敏捷开发更恰当,为什么? 2. Code smell 是如何产生的?有哪些典型的 code smell?代码重构(Code refactoring)有哪些优点?有哪些代码重构的方法? 答:1(1)敏捷开发的背景: 所谓敏捷开发是以用户的需求进化为核心,采用迭代.循序渐进的方法进行软件开发.在敏捷开发中,软件项目在构建初期被切分成多个子项目,各个子项目的成果都经过测试,具备可视.可集成和可运行使用的特征.换言

软件工程第四次作业——团队作业

软件工程第四次作业--团队作业 本次作业采用团队作业的方式,我的队友是我的同班同学,他们分别为:(队长)亢健强,贾猛,黄明帅,黄珂锐.我们团队的总体任务是要做一个"乐谱识别与演奏"的软件,拍摄一张乐谱图片,它会使用光学识别转换成音乐. 此次团队作业中我得任务主要是做需求调研,为此我先总结了一下常用的需求调研方法的优缺点,然后结合我们团队的实际情况选出了一种最适合我们的调研方法. 调研方法 优 点 缺 点 实地观察法 调查者在实地通过观察获得直接的.真实可靠的第一手资料 有一定的偶然性,

&lt;第四次作业查阅&gt;hashmap由value找key的算法

问题:不同于第三次作业,第三次作业是按照key的值排序输出,第四次作业则是要求按照频率(hashmap的value值)排序,然后输出key的值,最开始的想法是还是沿用第三次作业的做法,想着查询一下怎么从value反得到key的值,最后发现这种做法不仅麻烦,而且效率特别低,也给了我启示,由于key-value对可能出现多对一的情况,所以由key的value比较容易高效,但是反之的效率就比较低,应该尽量能够避免试图通过value得key. Map中是一个key有且只有一个value. 但是一个val

结对作业(软件工程第四次作业)

软件工程第四次作业---代码审查 一.partner 结对伙伴:林路 代码链接:coding 二.代码审查表 功能模块名称 简单的语法分析程序 审查人 王灵杰 审查日期 2018.4.6 代码名称 简单的语法分析程序 代码作者 林路 文件结构 重要性 审查项 结论 头文件和定义文件的名称是否合理? 合理 头文件和定义文件的目录结构是否合理? 合理 版权和版本声明是否完整? 不完整 重要 头文件是否使用了 ifndef/define/endif 预处理块? 没有 头文件中是否只存放"声明"

第四次作业——04树

第四次作业--树 一.学习总结 树的思维结构图 2.对于树学习总结 ⑴.树结构认识:树是一种非线性结构,每个节点有0个或多个后继节点,有且仅有一个前驱节点(根节点除外).在树中,递归方法可以放在考虑的首要位置 ⑵.学习这个结构遇到的困难:递归调用不会很清晰,代码量大,较难记忆. ⑶.树结构可以解决的问题:并查集问题 哈夫曼编码的问题. 二.6-1 二叉树操作集 1.设计思路 void CreateBTree(BTree &BT,string str){ 创建一个树T 定义一个i来计数 创建一个队

第四次作业总结与心得

一. 知识点总结:1.char 字符类型的定义 2.输入getchar,输出putchar 3.逻辑运算:逻辑与&&,逻辑或||,逻辑非| 4.两类分支结构:二分支结构,多分支结构 5.条件语句:if语句,switch语句 二.实验过程中遇到的问题及解决方法: 1.在使用switch语句时忘记使用break语句,应该在switch语句的每个语句段中都使用break语句 2.注意if与else的对应关系,else总是与它上面最近的if配对,若if与else的数目不一致,可以加{}来确定配对关

第四次作业——个人作业——软件案例分析

一.调研,评测 1.评测:对于这一部分我并没有发现什么bug,想来也是,毕竟该款软件已经发布了这么久,要是有bug早已被发现和修正了.就算现在有的话,以我目前的使用我是察觉不出来了,因为在此次作业之前用的也不是该款英语软件,我都是用“有道词典”. 而我测试该软件的平台是Windows7,软件版本:必应词典3.5.0,没有发现BUG. 2.调研:我所调查的用户对象都是在校的本科生,他们使用英语软件的目的有考四六级.看英语文章.检查代码运行报错原因等:他们本来也不知道“必应词典”该款软件,直到我要求

PHP第四天作业:可变变量的首次应用

今天作业第五题: 5.由数字1.2.3.4能组成多少个不重复的 3位数字,要求一个数中不能有重复出现的数字. 这道题一上手的第一时间就是用for循环遍历所有可能性,并且找出符合条件的元素. 那么代码就不详解了,基本都会: for($s1=1;$s1<5;$s1++){ for($s2=1;$s2<5;$s2++){ for($s3=1;$s3<5;$s3++){ if($s1!=$s2&&$s1!=$s3&&$s2!=$s3){ echo $s1,$s2,

读书笔记(十四)——作业的知识点与注意事项

1. SQL Server 代理中包含很多的类别,有作业.警报.操作员.代理等,作业属于其中的一个类别 1. 用自动化数据备份来介绍作业的具体运用规则 ①用命令符启用sqlserveragent ②添加作业的类别,明确进行作业的任务 EXEC msdb.dbo.sp_add_category @class = 'JOB'--添加对象的类别,如:作业.报警 ,@name = 'ct_药房管理系统_Maintain'; ---设置类别的名字 ③添加作业(包括名字.任务,所属的类别) EXEC msd