1、敏捷开发是在什么样的背景下产生的?其主要特点有哪些?什么时候选择敏捷开发更恰当,为什么?
答:(1)背景:随着现代技术的不断发展与更新,许多新软件的不断问世,生活品质的不断提高,产生了敏捷开发。敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。在敏捷开发中,软件 项目在构建初期被切分成多个子项目,各个子项目的成果都经过测试,具备可视、可集成和可运行的使用特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成, 在此过程中软件一直处于可使用状态。
(2)主要特点:1.敏捷开发方法是“适应性”(Adaptive)而非“预设性” (Predictive)。
2.敏捷开发方法是“面向人” (people oriented)而非“面向过程”(process oriented)。
3.相较与文档,敏捷开发更注重面对面的开发。
4.短迭代—利用短迭代方法来交付软件。
(3)何时选择敏捷开发:小团队,快速反映,以个人能力为中心。
2、Code smell 是如何产生的?有哪些典型的 code smell?代码重构(Code refactoring)有哪些优点?有哪些代码重构的方法?
答:(1)产生:Code Smell中文译名一般为“代码异味”,或“代码味道”,它是提示代码中某个地方存在错误的一个暗示,开发人员可以通过这种smell(异味)在代码中追捕到问题。代码不规范,比如有重复代码等就 会形成code smell。
(2)典型的code smell:Duplicated Cod(重复代码);
Long Metnod(过长函数);
Long Class(过大的类);
Long Parameter List(过长的参数列);
Divergent Changge(发散式变化);
Shotgun Surgery(散弹式修改);
Feature Envy(依恋情结);
Data Clumps(数据泥团);
primitive obsession(基本类型偏执);
switch statement (switch 惊悚现身);
parallel inheritance jierarchies(平行继承体系);
lazy classv(冗赘类);
speculative generality(夸夸其谈未来性);
temporary field(令人迷惑的暂时字段);
message chain(过度耦合的消息链);
middle man(中间人);
inappromriate intimacy(狎昵关系);
alternative classes with different interface(异曲同工的类);
incomplete library class(不完美的库类);
data class(纯稚的数据类);
refused bequest(被拒绝的遗赠);
comments(过多的注释)。
(3)优点:能改进软件设计;使软件更容易理解;能帮助发现隐藏的代码缺陷,找到bug,优化代码,提高软件的开发速度,从而提高系统的稳定性,和可扩展性;能提高编程效率。
(4)代码重构的方法:提取类/抽离方法:正如上面提到的,像“臃肿的类”(一个类提供了本该有几个类提供的功能)这种代码异味应该将原有类中的方法和属性移动到适当数目的新类中去。旧类中对新类的方法和 属性应该被移除。另外,有时候一些类过于臃肿是因为它包含了被其他类使用本应该是其他类的成员方法的成员方法。这些方法也应该被迁移到合适的类中。
提取方法:像上面提到的“过长的方法”这种代码异味可以通过从旧方法中提取代码到应该或多个新方法中消除。
分离条件:许多时候,一个方法很长是因为包含好几个语句(if-else)。这些分支条件可以被提取和移动到几个单独的方法中。这确实能大大改善代码可读性和可理解性。
引入参数对象/保留全局对象:在我做代码审查时发现另外一个很常见的情况-好几个参数被引入方法。问题主要与需要从已有方法中增加或者消除一个方法参数有关。在这种场景,建议将相关方法参数组成一 个对象(引入参数对象),让方法传递这些对象而不是每个单独的参数。
用符号常量替换魔法数字:对于有意义的并且到处被使用的字面常量,应该为他买分配一个命名常量。这样大大增强代码可读性和可理解性。
重命名方法:正如上面提到的,模糊不清的方法名会影响代码的可使用性。这些模糊不清的名称应该重命名为有意义的可能与业务术语有关的名称,来帮助开发者已通过业务上下文更好地理解代码。这很需要 技巧并且要求开发者与业务专家一起协作来理清嗲吗需要满足的业务需求。有趣的是,这种重构方法看起来似乎非常容易理解,但是常常被许多开发者忽视,,虽然在Elipse这种IDE的refactor 菜单项中经常出现这一项。