一群学生是怎么开发软件项目的

图片.png

0.前言

伸伸懒腰,决定总结一下自己2016年参与开发的一个软件项目。通过软件开发的工作,除了锻炼我们的编程能力、团队意识,额,还可以提高....增加老师的收入!哈哈,言归正传,我跟实验室的小伙伴总共花了大约半年的时间来完成这个项目,如今,总算是熬到该项目要结题了。一群学生党一块完成一个项目是怎样的感悟呢?我作为这个项目的主要负责人,下面就让我来跟大家分享一下我“悲惨”经历吧!【经历分享=技术+工具+反思】

1.团队背景介绍

首先,自己谈一下学生这个身份,相比于公司的开发人员相比,有什么区别呢?

第一,约束力与执行力的欠缺。学生是没有薪资的,也就是说,我们才是真正的为了追求理想而开发程序…公司职员的薪资是和开发效率挂钩的,我们学生写程序能获得那一点点酬劳,可能也就是导师每月多发几百块钱,而且每个人都是同酬,这就造成了,导师对项目的约束能力是有限的。任务分配下去,学生各自完成相应的功能就行了,我们没有薪金的压力,至于最终实现效果与预期的差距...额,有一点失控也是难免的,更别说代码规范性!代码规范性!代码规范性!【重要的事说三遍】

第二,经验的缺失。我觉得软件开发中的经验是非常重要的,虽然导师也是接过不少项目,在项目的前期规划中,会带领我们一起做一段时间,但到后面的实际程序开发,代码编写方面,那就是学生党们“各显神通”的时候了。我们基本都是第一次写这种完整的软件项目,基本上都没有什么成熟的经验,这样是为什么这次项目经历让我印象深刻。

上面算是对我们项目组成员的背景进行了一个简单的铺垫,一句话概况:技术菜鸟,代码质量看心情。

首先看一下我们项目组的成员分配:

成员组成

核心项目人员,基本就是我们三人:两个Web端+一个移动端,自始至终的参与了完整的项目流程。

2.项目的开发流程

下面简单介绍一下我们这个项目:主要是实现执法队员的执法任务分配与执法结果的记录分析,分为移动端与Web端。Web端发送各种类型任务以及接受执法结果,汇总统计,以及实现与其它市政部门数据的对接等功能,移动端是安装在执法人员的手持终端上,实现任务的接收、分配、上报等功能。下面,我总结一下整个项目的整体流程:

大体把项目流程分为五个阶段,当然,现实情况各个阶段也是有交叉的,比如:项目都要结题了,客户的某些需求还是没有完全搞懂!!!哈哈,其实也不要指望客户来做决定,最好是自己给出几个可行的方案【技术可实现的】,让客户选择。

1.客户的需求分析

这个我们花了很长的时间,不知道在企业开发中是不是也要做这么久的客户需求分析,反正最后我感觉:完全没有必要搞这么久,因为最后开发出来的“东西”基本由程序猿的开发能力决定,这里不只是技术能力,还有把“客户需求”转变为合理的“技术实现”的能力。

当然,做好客户的需求分析是完成一个项目的开始,只有深入的了解客户【使用人员】的真实应用场景、应用过程、流程产物等,才能对后续我们实现“客户需求”------>“软件应用”的转换、设计提供理论依据,对数据库的设计提供思路。

总结一下在客户需求分析阶段得到的一些感悟:

1.重视最初需求文档。调研前,没有认真的读那份看似废纸的、厚厚的“XXX软件需求规格说明书”,如果提前看看过,在调研的时候会更有条例,虽然写的非常*****【为了中标】,但是最终的项目结题,第三方的软件测评都是按照这份文档进行的!

2.调研文档整理规范。需求调研时,一定要做好笔记!不要指望脑子就可以记住!记不住的!记不住的!每个人调研的内容,事后,小组成员之间要进行整理,统一管理,因为将来不一定谁来开发这一块,不要让重复的问题耽误效率!

需求分析阶段就简单的介绍这么多,这个阶段最重要的是:文档的整理一定要条例、准确、统一。程序猿不能只是重视写程序,文档的整理归纳能力也是非常重要的。

2.原型图设计

这里首先介绍一款原型设计软件:Axure,使用它就可以完成简单的Web端、移动端的原型设计,此外,还可以自己导入一些第三方的模板、图标进行扩展。

做原型设计的目的,主要是明确软件的界面布局,某些字段信息,与客户进行简短、有效的交流,继续探究客户的需求,修改、完善,只到初步与客户达成共识之后就可以进入下一阶段了。在本次项目的最终界面布局中,其实与原型的设计还是有一定的差异的,差异源自于哪里呢?我们的编程能力?我觉得除了欠缺沟通的技巧外,更多的是项目经验的不足吧。

3.数据库设计

数据库的设计是一个非常重要的工作,非常重要!非常重要!它关系到你的程序的可扩展性,以及将来开发时的编程难度!怎么把用户的需求转化为程序流程,流程信息存入到数据库,表之间互联互通,外键怎么设计?是一对一关系?一对多关系?要不要中间表?这些都需要一些项目经验做支撑,我作为一个菜鸟,在这方面吃尽了苦头,将来在数据库设计的时候一定要重视,软件开发人员都要参与进来,因为最终编程实现的时候,核心就是按照这份数据库设计来一步步完成的。

在设计数据库的时候,可以使用PowerDesigner这款软件,可以清晰的呈现表与表之间的关系,在后续的开发阶段,我们就是人手一份打印版,按照这份文档写程序!

表之间关系

4.软件实际开发阶段

终于要进入期盼已久的编程阶段了,之前觉得做前面那些工作是对我们这些程序猿的折磨,编程才是我们想要的!

简单的介绍一下我主要负责的Web端的工作以及应用的技术、工具:

软件项目中,实际开发阶段毫无疑问是软件开发中最重要的阶段,而重重之重的就是:编程规范性

初期,对于我们这些菜鸟而言,总觉得编程是自己的事,自己写的代码我自己能看懂就行,注释写的挺多的啊,我能看懂啊......

但是,实际的开发中,编程是一个比较漫长的阶段,经过长时间的开发,慢慢的我都忘记自己最初写的那段代码是干什么的,你是不是也有这种情况?看着自己曾经写的那几行蹩脚的注释,只能默默的一层一层的查看代码,还原出当时写这段代码的逻辑!更别说,给其他人看你写的代码了!真的很痛苦,在最终对代码进行整合的时候,你的团队会欲哭无泪的。所以,在正式的开发前,一定要进行一个集体的统一培训,统一的注释风格,统一的命名方式,统一的代码各层级的功能逻辑【Action>>Service>>ServiceImpl>>Dao>>DaoImpl】。

下面总结一下自己总结的几点经验教训:

1.注重编程规范。开始写代码前,一定要进行集体、面对面的沟通,落实到纸面上,不要依赖说!不要依赖于听!开发规范一定要统一,编程一定要规范!【否则,最后改代码的时候会哭的,不要以为自己写完就再也不会改代码了!!】

2.端正团队意识。写代码,不要抱有:我先这样“不规范的”写上,等会我再改的打算!从一开始就要规范!!发现问题马上修改,否则,等到代码汇总到SVN上,团队最终会被你“接口里的localhost”、页面里的“alert弹窗”给弄崩溃的!

3.重视版本管理软件的正确使用。代码的管理,我们使用了SVN,很好的工具,但是因为我们基本都没有使用经验,所以代码最终还是被搞成了一坨shit!使用这个工具必须要进行统一的培训,都会用,不乱用!否则,你会体会到一颗老鼠屎坏一锅汤的痛苦。

经过这个项目,我对编程的规范上有了深刻的教训与认识,这也是自己想写这篇文章的动力来源,既可以让自己加深地印象,也可以分享给初次参与项目的师弟师妹们,一个优秀的程序猿,不管有多厉害的技术,都要重视编码的规范,这是能够完成一个集体项目的首要条件,毕竟项目开发不是一个人的工作,团队的合作是尤为重要的,遵守团队的编程规范,是合作开发出一个合格的软件的必要保证。

5.软件测试以及文档整理

此时,已经进入了项目开发的尾期,进行全面的、合理的软件测试,是非常有必要的,但是我们并没有很重视测试这一块,只是默认个人在提交SVN之前已经自己测试通过了。这就造成了,等到代码汇总之后,真正打包部署应用到服务器环境之后,总会出现各种意外的Bug。比如“接口中的localhost”,在本机测试的没有发现问题【此时你得程序在本地运行】,这就需要一个合理的测试环境。我觉得可以请其它人员【非开发者】进行测试,一个陌生人更能合理的模拟一个用户的操作情况,这样更有利于发现程序中的Bug。

至于,书写一些软件测试用例、用户使用手册、软件测试报告的整理工作我就不详细说了!毕竟程序猿最讨厌整理文档!

3.总结

与小伙伴们肩并肩,经过半年的努力,合作完成了这套软件的开发,心头也浮现一丝的成就感。作为项目组的组长,自己在技术上、经验上还是有很多的收获,对一个完整的软件开发流程有了一点自己的认识与体会,认识到了编程规范的重要性,这些感悟,也必将会陪伴我走完剩下的程序猿生涯,特写此文与君共“警”!

希望您可以从阅读本文中有所收获,欢迎点赞、评论奥!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏腾讯大讲堂的专栏

MUG & ACT 代理游戏运维支撑浅析

前言08年腾讯游戏的“四大名著”,同时在线均过百万,为腾讯游戏带来了丰厚的营收。其中三款为代理游戏,分别由国内及韩国开发商研发,这一点见证了代理游戏业务的多样性...

1918
来自专栏耕耘实录

北京两日求职之旅有感

版权声明:本文为耕耘实录原创文章,各大自媒体平台同步更新。欢迎转载,转载请注明出处,谢谢

1247
来自专栏程序你好

新手程序员如何写出好的代码

我之前的博客文章在推特上火了。这篇文章指出了一个问题——始终遵守某些规则实际上并不能帮助人们更好地编写代码。

1035
来自专栏java一日一条

助力程序员成功的几个好习惯

老实说,如果你google搜索“程序员的好习惯”这方面的内容,那么就会有很多大同小异的文章映入你的眼帘。

823
来自专栏编程

手持 Python 利剑,一路向前

学习 Python 课程究竟有什么用?Python 课程学员假牙运用课程所学,在工作中设置自动化检验脚本,为团队排除 bug 规避风险。「最难受的时候再坚持一下...

21210
来自专栏EAWorld

DevOps 10大IT管理工具

? 写在前面(译者自序) 很久没有写博客了,几乎不知道如何开始。多年过去,已经没有转载的热情,想想该干点啥呢? 我们数字化企业云平台团队近期在研发DevO...

3383
来自专栏安全领域

物联网即为设备加服务

原文地址:https://dzone.com/articles/the-internet-of-things-is-devices-and-services

40212
来自专栏花叔的专栏

推荐个比较有诚意的小程序

小程序在9号的凌晨如期发布,掀起了一大波朋友圈分享狂潮,花叔马上去体验首发的一波小程序,这里就不写推荐列表了,只推荐一款比较有诚意的一款吧。 在“发现”->“小...

3849
来自专栏IT大咖说

数据库从业者必看:图数据库能否引领潮流?

内容来源:2018 年 10 月 20 日,腾讯云数据库专家产品经理邵宗文在“ODF走进名企之贝壳技术沙龙-数据库存储技术的多元应用”进行《图数据库及应用场景》...

1293
来自专栏java一日一条

助力程序员成功的几个好习惯

老实说,如果你google搜索“程序员的好习惯”这方面的内容,那么就会有很多大同小异的文章映入你的眼帘。

863

扫码关注云+社区

领取腾讯云代金券