Huang Lei’s Blog

An iOS developer in Thoughtworks.

Scrum之Retro

目标

  • Retro 重点关注的是如何使团队更好的协调工作。
  • 帮助大家定期的改善流程,处理问题和发现障碍。
  • 使用好的架构和正确的工具,帮助团队获得预期的结果。

一个Retro会议

用1到两个词语描述自己的感觉。
用心情曲线图表示自己在这个迭代的心情。

收集数据->头脑风暴讨论->寻找解决问题方案->制定可行性方案

Retro的流程:

1 预设会议基调

简短介绍,邀请发言(注意时间控制),介绍会议议程,营造讨论话题的氛围(阐明工作约定和价值观:人人参与,手机静音等, 有助于促成富有成效的交谈和互动)

2 收集数据

从硬数据开始:
- 事件:会议,决策,团队人员变动,里程碑,庆祝活动,新技术采用等对团队有意义的事件。 - 统计结果(Metrics):燃尽图,速度,软件缺陷统计,完成的故事卡,工作量数据等。 - feature或者已经完成的故事卡等。

3 激发灵感

  • 为什么:一旦出现问题,人们容易一下子就跳到解决方案上,最初想到的解决方案有可能是正确的,但大多数情况下通常是错误的。
  • 这个阶段:考虑其他可能性,寻找因果关系,并进行分析思考。

4 决定做什么

  • 根据上一步得到的潜在的试验和改进的清单,排列优先级,然后计划怎么做。
  • 最后做任务的签字承诺,不仅仅是团队的事情,也是个人的责任。
  • 避免没有行动的回顾会议。

5 总结收尾

  • 整理结论,生成文档和打印成册张贴。
  • 检视当前回顾会议,下次有哪些改进
  • 感谢每个人的努力工作并收尾。

6,Retro的20种方式:地址

iOS单元测试

什么是单元测试?

单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。是用来对一个模块、一个函数或者一个类来进行正确性检验的测试工作

为什么要做单元测试:

  • 单元测试的成本更低。
  • 重构的有效保证

原则:

1,Tests One thing

  • Single “Unit” of functionality Pass/Fail 小, 快, 独立

不测什么

UI, system, framework, library File, Network, DB

测什么?

  • Business Logic
    验证结果是否正确 验证边界条件和异常情况

  • API Logic(对外提供的接口,而非网络API)

怎么写?

  • 使用XCTest框架
  • 使用 Give When Than 进行条件,执行,验证。

代码:

    class FirstViewController: UIViewController {
        var nilObject:String?

        override func viewDidLoad() {
            super.viewDidLoad()
        }

        func actionInt() ->Int{
     return 11
        }

        func actionString() ->String{
            return "hello"
        }

        func actionBool() ->Bool{
     return true
        }
    }

测试方法:

    func testActionIntMethod() {
        let i = FirstViewController().actionInt()
        XCTAssertEqual(i, 11)
        XCTAssert(i == 11, "the int number is 11")
    }

    func testActionStringMethod() {
        let str = FirstViewController().actionString()
        XCTAssertEqual(str, "hello")
        XCTAssert(str == "hello", "the string is hello")
    }

    func testActionBoolMethod() {
        let bol = FirstViewController().actionBool()
        XCTAssertEqual(bol, true)
    }

    func testFirstViewControllerInit() {
        let vc = FirstViewController()
    XCTAssertNotNil(vc)
    }

    func testFirstViewControllerObjectInit() { 
        let nilObject = FirstViewController().nilObject
        XCTAssertNil(nilObject)
    }

从MVC -> MVVM

  • MVC结构中,将所有的业务和处理逻辑堆积在ViewController中,而进行单元测试书写时,界面的显示效果,网络处理的结果,都成了测试输入的条件。
  • 而MVVM中,界面刷新,服务调用,对象模型,都被抽离到单独的模块,ViewModel中,仅保留单纯的逻辑代码,通过Mock对对象模型等的模拟,可以很清爽的进行测试的书写和验证。

为什么使用Quick& Nimble

  • BDD行为驱动开发是一种敏捷软件开发的技术
  • 在书写性和可读性上更好,容易进行测试结果的验证查看

具体请看官方介绍

Demo:地址

测试结果的可视化

使用命令行:

xcodebuild test -scheme UnitTestForSwift -destination name="iPhone 6" -configuration Debug | tee xcodebuild.log | xcpretty -t -r html --output ./report.html

Scrum 之站会

  • 敏捷宣言强调个体交互重于过程和工具,敏捷原则阐述了面对面的沟通和自组织的团队这些敏捷的核心思想。
  • Scrum的团队是一个自组织的团队,团队每天进行每日站会是团队面对面沟通和团队自组织的体现。
  • Scrum的理论基础是通过保持过程透明性让参与过程的所有人了解真实状况,然后进行检查和调整,每日站会是Scrum过程进行每天的检查和调整的环节。

目的:

1.团队商量决定谁做什么(不做任务指派),为当天排一个计划。
2.团队沟通状态,了解现状,发现障碍。
3.团队回顾昨天的工作,做调整,持续改进。

三个问题:

1.我昨天完成了什么任务?
2.我今天打算做什么任务?
3.我遇到了哪些障碍或困难?

原则:

1,只有猪组可以发言,但是鼓励所有人参与。
2,整个团队参与,团队之外的人不干扰会议。
3,主题明确,不发散。
4,站立开会,保持注意力集中。        
5,时间固定,站会时间一般不超过15分钟。
6,不是工作汇报。

扩展:猪与鸡的故事

一天,一头猪和一只鸡在路上散步。 鸡对猪说:“嗨,我们合伙开一家餐馆怎么样?” 猪回头看了一下鸡说:“好主意,那你准备给餐馆起什么名字呢?” 鸡想了想说:“叫‘火腿和鸡蛋’怎么样?” “那可不行”,猪说:“我把自己全搭进去了,而你只是参与而已。”

猪组的成员

猪是在Scrum过程中全身投入专案的各种人物,他们在专案中承担实际工作。他们有些像上边那个笑话里的猪,要把自己身上的肉贡献出来。

产品负责人
产品负责人代表了客户的意愿。这保证了Scrum团队在做从业务角度来说正确的事情。产品负责人编写用户故事,排出优先级,并放入产品订单。

Scrum主管(或促进者)
Scrum主管促进 Scrum过程,他的主要工作是去除那些影响团队交付冲刺目标的障碍。Scrum主管并非团队的领导(因为团队是自我组织的),而是一个负责屏蔽外界对开发团队的干扰的角色。Scrum主管确保Scrum过程被按照初衷使用。Scrum主管是规则的执行者。

开发团队
负责交付产品的团队。一个团队通常由5至9名具有跨职能技能的人(设计者,开发者等)组成,承担实际的开发工作。

鸡组的成员

鸡并不是实际Scrum过程的一部分,但是必须考虑他们。敏捷方法的一个重要方面是使得用户和利益相关者参与到过程中的实践。参与每一个冲刺的评审和计划,并提供反馈对于这些人来说是非常重要的。

用户
软件是为了人而开发的。有人说,“假如森林里有一棵树倒下了,但没有被人听到,那么它算是发出了声音吗?”同样地,人们可以说,“假如软件没有被使用,那么它算是被开发出来了么?”

利益相关者(客户,提供商)
影响项目成功的人,但只直接参与冲刺评审过程。

经理
为产品开发团体搭建环境的人。

iOS开发书籍推荐

        最近很多同学都有意学习iOS开发,让我推荐几本比较好的书本,虽然有接近五年的开发经验,但是对于iOS开发方面的书籍,确实读得甚少,但是不乏几本经典之作,下来慢慢给大家说说。

        首先从语言说起,iOS开发最初的开发语言是Objective-C(已经发展到了2.0版本),是一门类似C、C++门派的面向对象语言(可与C、C++混合编程)。其中括号的方法调用形式([target action]),动态语言特性,单一继承等,都是其鲜明特点。这里推荐一本《Objective-C基础教程》,是Objective-C语言学习入门的经典教程。需要掌握基础语法结构、FoundationKit框架中得基础数据类型、内存管理机制(对象生命周期,引用计数,ARC机制),深入理解和熟练使用category、protocol、delegate,掌握文件IO,理解和使用 KVO、KVC等。

        当然,除了使用Objective-C语言之外,我们还有一门新起之秀语言选择——Swift,语法内容混合OC, JS, Python,语法简单,使用方便,并可与OC混合使用。Swift的优势不言而喻,有许多新特性而且更加适合于函数式编程开发,但是目前仍然处于急速发展期,有可能上个版本可以完全编译运行的code,更新到了新的版本后因语法的变更而编译错误。对于Swift语言,这里推荐官方的原作,在iBooks就可以免费看到,如果看英文版本比较吃力,那就看看开源小组翻译的中文版本吧,链接在这里

        说完了语言和语法的学习,下边就要进行iOS开发学习了,iOS开发的入门教程《iPhone开发基础教程》,主要讲解了iOS平台特性、开发的框架UIKit、MVC模式在iOS开发中的实践、各种基础控件的使用,数据持久化和硬件特性等。不过《iPhone开发基础教程》这本书已经有些跟不上平台的发展了,最近又入手了另一本《精通iOS开发(第七版)》,这本书与基础教程类似,但是却使用了OC和Swift两种语言进行实例讲解,并且加入了Storyboard等新内容,更加适合各位进入iOS开发圈的同学。

        当你把这本书看完后,应该可以进行独立的iOS编程开发了,为了提高编程质量,这里推荐一本比较好的书《Effective Objective C 2.0:编写高质量iOS与OS X代码的52个有效方法》,此书以52个实例生动形象的描述了如何写出高质量的code,用豆瓣网友的话来总结“这是一本讲Objective-C编码技巧的书,不仅讲了要怎么做,还解释了为什么要这样做”。

        同样,一个好的程序员,怎么能少了测试的检验呢?这里推荐一本iOS测试入门书籍《iOS测试指南》,该书描述了单元测试、集成测试、持续集成、自动化测试和测试策略等,是iOS平台测试实践的一本好的总结。

        当然,如果你是一位对技术有热情追求者,《Objective-C编程之道:iOS设计模式解析》这本书也是必读的经典之作,正如内容简介所说:“解析iOS设计模式的开山之作” “优化Objective-C编程实践的必修宝典” “由此迈入移动开发高手行列”,想要成为绝顶高手的你,怎么能错过。

        书籍推荐,到这里也就结束了,文字不多,但都是本人亲身实践和阅读后的推荐之作,仅供大家参考阅读,当然,也很希望能够听到不同意见,欢迎大家随时与我交流。