●题目:
1、敏捷开发是在什么样的背景下产生的?其主要特点有哪些?什么时候选择敏捷开发更恰当,为什么?
2、Code smell 是如何产生的?有哪些典型的 code smell?代码重构(Code refactoring)有哪些优点?有哪些代码重构的方法?
●回答:
1.1、背景:
1)20世纪60年代,软件作坊,软件规模小,以作坊式开发为主;
2)70年代,软件危机,硬件飞速发展,软件规模和复杂度激增,引发软件危机;
3)80年代,软件过程控制,引入成熟生产制造管理方法,以“过程为中心”分阶段来控制软件开发(瀑布模式),一定程度上缓解了软件危机;
4)90年代,重型过程,软件失败的经验促使过程被不断增加约束和限制,软件开发过程日益“重型化”,开发效率低、响应速度变慢;
5)2001~今,敏捷被普遍认可并迅速流行。
1.2、主要特点:
敏捷开发是一种以人为核心的、迭代的、循序渐进的开发方式,其主要特点有:
1)个体与交互重于过程与工具;
2)可用的软件重于完备的文档;
3)客户协作重于合同谈判;
4)响应变化重于遵循计划。
1.3、何时采用敏捷开发:
以下情况下选择敏捷开发较为合适:
1)项目团队的人数不能太多;
2)项目经常发生变更,高风险的项目实施;
3)开发人员可以参与决策。
2.1、Code smell :
代码异味(code smell),是指在代码之中潜在问题的警示信号.并非所有的坏味道所指示的确实是问题,但是对于大多数坏味道,均很有必要加以查看,并做出相应决定。它是提示代码中某个地方存在错误的一个暗示,开发人员可以通过这种smell(异味)在代码中追捕到问题。
2.2、典型的 code smell:
代码重复( Duplicated Cod)
太多的注释(comments)
类别代码(type code)
过长函数(Long Method)等
2.3、代码重构(Code refactoring)的优点:
1)增进代码内部的清晰性和一致性;
2)提高编程效率,提高代码可读性;
3)方便程序的后期维护等。
2.4、几种常见的代码重构:
1)Extract Method(提取函数):让每个函数只做一件事,抽取能够被组织在一起的代码,并单独抽取为一个函数。如果函数的粒度小,被复用的机会就更大。
2)Inline Temp(内联临时变量):重构前要保证这个临时变量只被赋值一次,所以当遇到for等循环语句时,要注意
被内联的变量的值是否会在循环中被改变。有时在执行for之前定义固定的临时变量是必要的。尤其是当临时变量取自某对象的属性,而这个对象将在for循环中被更改。
3)Replace Temp with Query(以查询取代临时变量)
4)Replace Nested Conditional with Guard Clauses(以卫语句嵌套条件表达式)
5) Introduce Explaining Variable(引入解释性变量)