Open Source Software
free of charge, free of legal restrictions on usage.
也需要敏捷开发,但是开发方式略有不同,毕竟不是利益相关的模式。强调个人之间的密切交互 close personal interaction,开发者也是自己的客户,因此有很多人做测试,而且修改后的小版本可以很快发布;通常分的小模块很多,世界各地的大家分别开发。
世界各地大家通过电子方式互相交流 electronically。
整体协调者 overall co-ordinator 通常由志愿者负责。
商业软件和OSS就像大教堂和集市的区别,大教堂需要有一个整体的建造目标,大家一同努力。集市可能由城管那样的整体协调者管大家秩序,但是大家还是偏personal一点。
如果自己公司自己开发项目,当然需要大量人力财力开发和后期维护;选择闭源软件,就绑定在供应商身上了(垄断技术),他们需要进一步收费咱也得交。开源软件就不用担心支付费用这类问题或者供应商倒闭问题,但是不是是开源软件就能拿来用的,注意版权问题。
开源软件大多数有一小部分人在开发核心core以及新功能,大多数人在correcting defects。大多数情况下开发者更愿意维护现有fork分支而不是一味开发新分支。
开源软件也有一个control structure,通常由最初提出项目的人拥有软件的最终决议权,由一些商业公司管理而并非个人(这样能多保质一点),比如安卓开源软件由谷歌掌握控制权,对于提交的fork和patch有权最终决定下一个版本更新的内容。
- contributor:OSS中做贡献的人。
- developer:在软件平台上开发应用的人。
- verifier:测试 change request 是否正确的人。
- approver:决定这些修改是否要合并进大版本的人,和verifier都需要审核面试筛选。
- Project leads:监督单个项目的工程。
software freedom
-
运行程序的自由 run the program
-
学习程序运行原理和按自己意愿修改代码的自由 study how this program works, change it so it does your compute as you wish (当然前提是能访问到源码)
-
分发软件副本的自由 redistribute copies
-
发布自己的版本给他人的自由 distribute copies of your modified versions to others。
Copyright
只有制作者producer有权利制作副本和创建新内容 produce copies and create new work based on it,但是可以授权允许别人复制和改编该作品 make copies of the work and adapt it。制作者可以通过收费等方式赋予这些权力给他人,或者对改编的范围加限制,因为这算是加在producer身上的一种义务,有点回报也正常。
Copyleft
但是OSS的版权声明采用的是copyleft,一种 free software license,并不是限定他人复制改编的权力,而是赋予他人这种权力。许可证内容包括:声明源代码可用,以及改编允许的范围。
voting
有权投票的人每人最多一票;没权投票的人不能投;有权投票且选择投票的人不能被阻止投票;其须拥有充足的选择 full choice;其投票结果必须被正确统计不能被别人篡改;总票数正确相加,不能篡改;大多数时候没有人能知道任何一个投票者的选择。
电子投票有风险,比如数据容易被篡改,被伪造等。
Software Development Tools
Software Craftsmanship and Clean Code
注意代码整洁,比如格式、注释等。
Saying “No”
不要一直盲目答应老板和客户的需求,程序员更熟悉代码,而且需要帮老板规避可能发生的错误。
Learning from Mistakes
Microsoft’s Best Practices
Revision Control System
版本控制。
roll-back:版本回滚。
check-out:开发者拉下来代码。
check-in:开发者提交自己的修订版。
conflict:两个人的提交出冲突了。
merge:合并入主分支。
Daily Build
每日构建一次代码,编译链接源代码,进行一些测试,确保第二天大家能使用最新版本。
Continuous Integration
开发人员也建议每天check-in一次。
Build Verification Tests
断言和单元测试。
Bug Database
记录以前的bug记录,解决方法,严重程度,优先级等信息。
War Team and Bug Triage
发布前,作战小组确认系统“好到可以发布”。检查运行是否正常,剩余的bug严重程度等。
Code reviews and coding guidelines
团队对彼此代码进行彻底审查。
Globalisation and Localisation
针对不同语言、脚本的差异处理。
Documentation Generators
文档生成。