Being a (amateurish) team:团队开发体会
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.
Being a (amateurish) team:团队开发体会的更多相关文章
- 5分钟快速部署PESCMS TEAM 团队任务管理系统开发版
所在的公司也经历过小团队的发展,为了高效率,通常都是面对面交流,很多时候事情谈论过后不久就已经淡忘了.而且工作任务不能全局观察,成员之间基本上都要主动去询问,效率反而低下.所以今天就介绍一款中小团队的 ...
- 关于如何在github上创建团队开发环境
今天想写个如何在github上创建团队开发环境的博客.送给那些还不知道如何在github上创建团队开发环境的开发人员. 1.首先,当然你要有个github的账号.具体怎么注册我这里就不说了.可以上gi ...
- 从零开始,创建GitHub团队开发环境
从零开始,创建GitHub团队开发环境 GitHub提供免费的团队环境,不过免费仓库容量是300MB,请大家注意. 申请GitHub个人账号 1. 使用浏览器访问GitHub主页.如果使用IE,尽量不 ...
- 绝对精品推荐做前端的看下:Web前端开发体会十日谈
20151208感悟: 前端人的角度来看的话,感觉像是阅读一个大牛前端的全部武功的一个秘籍说明,里面的思想高价值蛋白真是太多太多,推荐看. Web前端开发体会十日谈 一直想写这篇“十日谈”,聊聊我对W ...
- Eclipse集成Git做团队开发:分支管理
在日常开发工作中,我们通常使用版本控制软件管理团队的源代码,常用的SVN.Git.与SVN相比,Git有分支的概念,可以从主分支创建开发分支,在开发分支测试没有问题之后,再合并到主分支上去,从而避免了 ...
- Eclipse集成Git做团队开发:代码管理
在日常开发工作中,我们通常使用版本控制软件管理团队的源代码,常用的SVN.Git.与SVN相比,Git有分支的概念,可以从主分支创建开发分支,在开发分支测试没有问题之后,再合并到主分支上去,从而避免了 ...
- Eclipse集成Git做团队开发
在日常开发工作中,我们通常使用版本控制软件管理团队的源代码,常用的SVN.Git.与SVN相比,Git有分支的概念,可以从主分支创建开发分支,在开发分支测试没有问题之后,再合并到主分支上去,从而避免了 ...
- [.net 面向对象程序设计进阶] (27) 团队开发利器(六)分布式版本控制系统Git——在Visual Studio 2015中使用Git
[.net 面向对象程序设计进阶] (26) 团队开发利器(六)分布式版本控制系统Git——在Visual Studio 2015中使用Git 本篇导读: 接上两篇,继续Git之旅 分布式版本控制系统 ...
- [.net 面向对象程序设计进阶] (26) 团队开发利器(五)分布式版本控制系统Git——图形化Git客户端工具TortoiseGit
[.net 面向对象程序设计进阶] (26) 团队开发利器(五)分布式版本控制系统Git——图形化Git客户端工具TortoiseGit 读前必备: 接上篇: 分布式版本控制系统Git——使用GitS ...
随机推荐
- 通过logstash过滤、分析日志数据
logstash是怎么工作的呢? Logstash是一个开源的.服务端的数据处理pipeline(管道),它可以接收多个源的数据.然后对它们进行转换.最终将它们发送到指定类型的目的地.Logstash ...
- 使用vue的v-for生成table , 给table加上序号
现在有一个使用mybatis的分页插件生成的table,table中数据是通过vue获得的 , 前台显示使用<tr v-for="item in items"> 后台v ...
- Deepin系统手动安装oracle jdk8详细教程
Deepin系统手动安装oracle jdk8详细教程 oracle官网下载jdk压缩包,使用 sudo tar -zxf jdk***解压文件,我放在在了home/diy/java/jdk路径下. ...
- firefox event.preventDefault(); 没有效果的解决方案
$('.sub-list-click a').click(function (event) { event.preventDefault(); var sub = $(this).parent(&qu ...
- python windows环境下文档备份
#python 2.7 #Filename:backup.py import os import time source = [r'C:\Users\zeng.shufang\Desktop\mess ...
- postgresql中uuid的使用
本文总共介绍两种方法 : 1.使用create extension命令 create extension "uuid-ossp" 安装扩展成功以后,就可以通过uuid_genera ...
- 机器C盘临时区
系统的临时区里:C:\Documents and Settings\Administrator(用户名)\Local Settings\Temporary Internet Files 这是临时文件夹 ...
- Reflection 反射
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/A__17/article/details/30571923 1.概念:所谓的反射.能够理解为在运行时 ...
- session、cookie 记住登录状态的实现
Cookie的机制 Cookie是浏览器(User Agent)访问一些网站后,这些网站存放在客户端的一组数据,用于使网站等跟踪用户,实现用户自定义功能. Cookie的Domain和Path属性标识 ...
- Qt 编程指南 3 信号和槽沟通
https://qtguide.ustclug.org/ 1 信号和槽 所谓信号槽,简单来说,就像是插销一样:一个插头和一个插座.怎么说呢?当某种事件发生之后,比如,点击了一下鼠标,或者按了某个按键, ...