开发的过程就是:
● 功能设计,或者是理解你要做出来的是什么功能,用户到时候是怎么使用这些功能的
● 开发设计,完成这个功能需要哪些模块,数据流(dataflow)是怎么样的,Workflow是怎么样的;哪些模块是可以调用现成的API,哪些需要自己来写;
● 编码,编译(build),调试,测试
比如我要写个Android上面的记事本,可以把数据传输到云上,也可以下载下来,但是不一定很频繁;不需要实时同步;这样我如果换手机就可以把数据下载下来,避免数据的丢失,或者迁移的麻烦;
这些功能一旦确定下来以后,要思考的事情是,放到哪个云上(快盘,微盘还是Dropbox等等),怎么放(文件传输的方法,用Http,还是Email,还是ftp,或者自己写Socket);有哪些现成的API可以用,比如Java的httpclient的Jar包可以使用,有哪些需要自己写,比如文件上传过程需要把文件读出来编程Java Stream,需要研究哪些技术,文件上传的Http Post方法等等;由于访问的安全性问题,都使用了OpenID,那我需要研究一下OpenID(oAuth)如何使用等等;
接下来就是编码,编译,调试,测试; 这个时候也是需要测试来参与的;
开发对测试的期望是, 为了提高效率,希望每次的改动的验证可以很快完成;所以如果测试可以参与一些API的测试;那么开发的效率就可以上去;开发也希望测试多去了解功能是如何实现的;
开发完以后,希望测试可以在不同的场景去使用,及早的发现问题;清晰的沟通这些问题;
开发其实花80%的时间在研究前期的技术,还有就是调试,而对于调试,因为80%的模块是比较稳定的,所以其实调试的是20%的代码,希望的时候这部分代码的调试不会影响到其他模块,所以单元测试也好,API的测试也好都是很有必要的;
测试的过程:
● 理解产品的功能,用户的场景
● 开发测试用例,从多个角度去使用产品
● 新功能测试,系统测试,性能测试,压力测试等等
● 自动化测试,提高测试效率
● file bug,理解bug产生的原因
测试对开发的期望是,提高可测试性,比如更多的log信息,出错的信息是有意义的(其实这个对开发也是有好处的),有新的改动能够通知测试;对测试而言,了解到的信息越多,越能发现更多的bug;如果开发可以告诉测试如何去debug的方法,然后测试可以自己debug,帮助开发解决一些相对简单的bug,那么测试和开发的合作就很和谐