敏捷开发

声明: 本文与技术无关,仅用于自我修养提升,了解如何做好一个项目

敏捷开发宣言:

  • 个体交互胜过过程和工具
  • 可以工作的软件胜过面面俱到的文档
  • 客户合作胜过合同谈判
  • 响应变化胜过追寻计划

注:以上并不表示后者完全没用;只是在敏捷开发中,前者更重要一点点。

接下来我们来看看敏捷开发的原则

  1. 我们首先要做到的是:尽早的,持续的交付有价值的软件给客户
  2. 即使到了开发后期,也欢迎改变需求
  3. 经常性地交付可以工作的软件,并保证短的交付周期(几周到几个月)
  4. 在整个项目开发期间,业务人员必须和开发人员每天都在一起工作
  5. 团队内部要积极地面对面交谈
  6. 可以工作的软件是首要的进度衡量标准
  7. 敏捷过程提倡可持续的开发速度
  8. 简洁是一门艺术!尽可能减少不必要的工作
  9. 每隔一段时间,团队要反省如何更有效的工作

对于敏捷开发,以下是一些重要的理念

  • 聚焦客户价值,消除浪费(软件的功能,有多少是客户真正需求,真正要用的,避免多余的功能开发,这样也可以减少开发成本),做刚刚好满足客户的软件
  • 激发团队潜能,加强协作(提升共同效率)
  • 不断调整以适应变化(这个世界唯一不变的就是一直在变,我们要不断地根据经验对项目进行调整)

 

接下来说说在敏捷开发中,身为开发者的我们如何写好代码。

对于代码设计,我们要达到设计简单、高内聚、低耦合;同时我们要避免代码重复,尽量用函数提炼来进行重构。

在写代码时,我们要遵循以下两个原则:

  1. 单一职责原则(SRP):对于一个软件实体(如类、函数),仅有一个引起它变化的原因;说人话就是,单独的实体要功能简单,每一个实体尽量只实现一种功能。
  2. 开发封闭原则(OCP):软件实体(类、模块、函数等)要对外扩张开发,对内修改封闭。

对于上面的第二个,开发封闭原则,我在这里举个例子来方便大家理解:

先来一段我们要避免的:

class Dog:
def __init__(self,action):
self.action = action

def dogAction(self):
if self.action == "eat":
print("dog is eating")
if self.action == "sleep":
print("dog is sleep")
if __name__ == '__main__':
puppy = Dog("eat")
puppy.dogAction()

以上代码可以看到我在一个dogAction的函数中使用了if判断来判断狗的行为,这样是有坏味道的。
接下来是改进版:

class Dog:
def eat(self):
print("dog is eat")
def sleep(self):
print("dog is sleep")
if __name__ == '__main__':
puppy = Dog()
puppy.sleep()

在改进版中,可以看到我们用把dogAction分成来两个具体的方法,从而取消了内部的if判断。
仅仅是简单的代码我们看不出来什么,可是到具体的项目(有些规模的项目,改一点而动全身的项目中,大家就会体会到这样做的好处了)。

在我们写代码的时候,我们也要注意我们的命名规范。
在命名中,我们有一个变量命名太过简单,需要备注解释的时候,我们可以干脆用备注来当初命名,例如
int d #day
我们可以直接改成
int day

在命名中我们也要尽量避免缩写。如果不缩写变量名就会很长,不要怕!长不要紧,就怕读代码的人看不懂;毕竟在团队中,很多人要阅读理解你的代码。
举个例子:
def getSTKCurPrice:
这样的话,别人来看你的代码,从名字很难知道你要干什么,这时候,人家打你的心都有了,不要问我怎么知道的。
如果我们不缩写:
def getStockCurrentPrice
这样是不是好很多,起码人家一看你的命名,就知道这段函数是要获得股票当前价格啦。
所以!!!不要用缩写!!!就算你自己懂也不要!!!
记住,好的代码是给人读的,不是给机器读的。

对于函数,函数的嵌套不要过长,尽量不要超过三个。如果接触过项目规模大一些项目的朋友会深有感会,遇到好几成嵌套的时候,都有砸屏幕的冲动,毕竟人的精力和记忆力有限。
对于单个函数,参数尽量写少,这也是为了关爱你同事的生命。

对于测试,我们身为开发者,一定要做单元测试(对单一方法块进行功能性测试),否则一个项目完成时,项目测试会提着菜刀追你满街跑的。
同时我们也要尽量做集成测试,集成测试是:对单元,组件之间的接口进行测试,保证模块连接起来是正常的。

测试中我们要注意的有有效等价类,无效等价类和边界值分析。
假设一个函数接收处理的参数为int 1-9,有限等价类就是1-9,无效等价类就是小于1的int和大于9的int,边界值就是1和9了(复杂的情况我们会考虑更大一点的边界范围)。

文尾,给大家发福利,推荐几本好书:1 人月神话,2 clean code, 3 软件测试的艺术
posted @ 2020-12-30 21:55  Vincent_Qi  阅读(11)  评论(0)    收藏  举报