0x00 Being a (amateurish) team
This is the process of changing hydrogen into breathable oxygen, and are as neccesary here, as the air is on earth.
But I still say, they're flowers
If you like...
Do you sell them?
I'm afraid not.
But, maybe we could make a deal?
Thought we are still an amateurish team, WE CAN MAKE A DEAL!
0x01 软件工程
软件工程方法,这是大型软件开发不许使用到的工具。从软件工程一词出现开始,其方法经历了众多开发人员的不断总结改进,集结了多人的智慧,最终形成了如今百花齐放的盛况。说起不同的方法,有的着眼于快速开发出软件圆形,有的致力于开发出安全可靠的系统,还有的关注如何减少所有开发人员之间的耦合关系。不同的目的,不同的方法,无法评定谁好谁坏,唯一可以肯定的是,每一种方法都会在某一方面为开发带来极大的便利。
为什么我们需要软件工程?用一句话来讲,是因为现代的软件规模已经编的非常巨大,无法一个人完成。可以说,软件工程的出现,成为了大型软件开发过程中的Silver Bullet。现代的软件趋向于复杂化,并且往往还需要不断进行维护,因此想要开发一个完整的软件,往往需要非常多的人配合。如果仅仅使用诸如面向对象这样的开发层面的方法,想要得到一个完善的大型项目是具有非常大的挑战的,因为没有一套完整的方法来指导整个开发的流程,换言之,所有人都个干各的,不是形成一盘散沙,就是形成一个泥球。
软件工程的方法不是唯一的,而是呈现出多样化一面,并且这些方法各有千秋。在代码的公开方面,以GCC和Linux为例,二者在开发阶段中就使用了不同的策略。前者在开发过程中不公开代码,而是仅仅将代码维护在一个团队的手里;后者则在开发过程中全程公开代码,接受他人的审视。在流程的推进方面,以瀑布模式、敏捷模式、快速原型模式也有很大的区别,但是不论使用哪一种都能做出一个好的软件。不同之处在于,针对不同的需求和环境,我们应当选择一种适应我们的模式,这样便能有效的开发出一个软件。
0x02 软件开发体会
为期一个月的软件开发已经告一段落。在这一个月中,团队开发变成了每天的主要任务。经历过这样一段开发的时间,我也开始逐渐理解了软件工程中的方法。
本次开发的迭代周期为一个月,需要完成的工作是搭建起一个网站的前端。对于这样一个需求,很显然最适合我们的方法就是敏捷开发。敏捷开发致力于用最短的时间开发出一个可用的产品,我们也确实体会到了这一点。敏捷开发的敏捷体现在不断会有新的功能被发布,软件总是处于增加功能的状态。任务初期,我们把项目划分成了5个大部分,并对每个部分计划了预期的完成时间,因此每隔几天我们就会有新功能发布上线。使用这一中计划推进的方式极大促进了我们开发的效率。
对于源代码的管理,我们采用的是每完成一个功能就公开并并入master分支的模式。在开发每个模块的过程中,所有相关代码由相关开发组成员维护,每完成一个子任务就会进行复审,待当前任务的所有子任务均完成时,上推到github并传入服务器,进而进行测试。
令人感到十分高兴的地方是,敏捷模式对需求变更支持的非常好。我们的开发采用了SementicUI-django的框架,前后端的学习成本很高。在开发初期,我们的计划中低估了学习时间,定义了非常多的计划任务,但是当我们发现无法完成既定计划时,我们开始了需求变更。我们把很多模块的功能减少到可以正常使用的状态,删去了很多锦上添花的功能。与此同时,我们添加了我们认为非常有趣的功能——Phobia智能助手。
0x03 不足之处
说起本次开发的不足之处,大概就是敏捷开发的*所带来的缺点,即文档的缺失和需求的经常性变动。在开发接近结束时,我们的文档数量依然很少,留下的都是git和osc上的记录,所以在后期花费了大量的时间补全各种文档。由于我们的开发进度与预期有所差距,于是我们会经常改动我们的需求,以求能够在有限的时间内完成更多的功能,这就导致了我们在前期设计中提及的某些次要功能并不能得以实现。
0x04 吐槽软工
敏捷开发是一种注重开发效率、把文档数量减小到极致的方法,而我们却花费了大量的时间在文档的撰写和排版上,尤其是发布前的冲刺期,这无疑耽误了我们的开发进度。其次,对于像我们全日制学生而言,每天坐在电脑前进行8小时工作制的开发是不切实际的,这就意味着我们不可能每天都能平均、高效的完成既定的任务。现实是,我们在完成每天繁重的理论课作业后,还要花费大量时间进行开发,导致每天熬夜到两三点已成为家常便饭,直接影响到后一天的学习。
0x05 总结
It was the best of times,it was the worst of times.在这一个月里,我们受尽了煎熬。然而劳累总是与收获并存的,经过这一段的训练,我们也真正体会到了团队开发与个人开发的差别。我想这大概是我们最能带进第二轮迭代的东西吧。虽然我们的网站还不完善,但是我们第二轮迭代一定会做的更好。WE CAN MAKE A DEAL.