软件工程如果没选实践,单纯在理论课上面对教条化的理论,这些理论都是很有指导意义的,但没有实践课带来的切实的多人团队合作开发项目的实际体会,很难能领会到其中的深意。知行合一,才能发现软件工程里的知识都是有用的经验之谈。

不要认为一切将运作良好

缺乏合理的进度安排是造成项目滞后的最主要原因……它反映了一种不真实的假设:一切都将运作良好

软工的工作量肯定是大学以来最大的一个实践课,需要选课的同学端正自己的态度,如果想要实打实地完成一个质量尚可的项目,要投入的精力肯定是不能少的。软工不是写写程序这么简单,这门实践课设计了一系列的环节,比如组队、立项报告和调查、资源规格说明书、UML绘制、现场团队编程、两次冲刺、展示答辩。可以发现写程序占比并不多(这和真实的软工过程也是相似的),一些在软工课之外绝对不会去做的事项,正是帮助你了解现实情况下的多人合作软件开发

每一个环节想要做好,都需要去真正地投入精力。最开始的博客作业会问你,每周打算投入多少时间。其实这个问题就是让你做好准备,因为这是一个硬指标,不投入较多的时间肯定只能做出平庸的结果。拿团队组队选人举例子,寻找一个合适的团队是极其重要的,最后没组到队的人被迫形成一个小组,这个组的结果一般方方面面都不会令人满意。我一开始也不知道要怎么寻找队友,寻找怎样的队友比较合适。于是我询问了学长学姐这方面的经验,并且花时间写了一个招聘文件,最后组建了一个相当不错的团队。

在立项、资源规格说明书、UML的绘制中,整个团队对于脑海里想要做的软件的构想会逐渐清晰,但这里要注意的是团队的成员一定要加快学习的进度,尽早开始写代码、产出产品代码,尽早开始迭代、测试、发布产品。

计算机编程基于十分容易掌握的介质,编程人员通过纯粹的思维活动——概念以及灵活的表现形式来开发程序。……我们期待在实现过程中不会遇到困难,因此造成了乐观主义的弥漫……而我们的构思是由缺陷的,开发也总会遇到bug的。

团队在讨论的时候,常常会出现这种情况:“这个功能很简单的啦,建一张表,有XXX字段,到时候查表就行了”、“这里我就构造一个json发送给你你到时候接着就行了”。就是脑中构思程序逻辑并不困难,但实际开发中总会碰到这样那样的问题。我想了下,这其实是一种客观现实,我们应该理解并学会接受。能做到的只有提早开始学习相关知识,提早开始开发。因为是一定要遇到困难、遇到bug的,留足学习的时间,提早开始,才不会赶deadline,才可以从容不迫。

人月

跟书名同名的经典理论,在这里简单复述一下——人月作为衡量工作的规模是有欺骗性的神话,向进度落后的项目添加人手只会使进度更加拖延。这条理论十分有名,导致我在上软工课之前都提前去了解了一下。

经过团队现场编程的磨砺,让我明白了这条理论在多人团队合作中有一个背后的意义。书中所说,添加人手所增加的负担在于培训相互交流成本,任务不能完全分解给参与人员而不增加他们之间的交流成本。可以得知,培训、相互交流、合理地分配任务在软工中扮演极其重要的位置。

培训:大多数同学都没有实际的开发经验,所以需要熟练工或者学习能力比较强的同学带领大家在项目初期的时候开启有效的学习、实践。因为初期大家都是小白,尽快学习知识,使大多数团队成员从小白成为可以产出代码的项目组成员,这十分有意义。在我看来,这肯定是软工实践区别于其他实践课的一点。一、以后大家走上工作岗位,未来的软件开发团队,也肯定有leader,每个人技术有高低之分。如果自己是leader,如何带领大家前进?如果自己实力较弱如何提高自己的学习能力?都很有意义。二、学校里其他实践课可以存在抱大腿的行为,软工是一个可以让大家真正体验为一个目标共同努力的过程。大家水平有高有低,但经过我的努力,后端组所有成员都可以上手写代码并commit,这是我非常自豪的一点。

交流:交流的成本是很大的,所以初期要谨慎地考虑分工。到了项目真正开展的时候要考虑一下团队的结构,比如,有没有技术leader?团队成员怎么分组?PM怎么和不同的开发人员交流?使用什么手段来使团队成员有效地交流想法和问题?

合理地分配任务:这学期由于栋哥跑路,原本三个班的选课人选挤到了两个班,导致每个组人都会变多。人变多了,交流的成本就会变得更高。还有一个额外的问题就是,作为在学校里的软工项目,其实大家做的事情不会差别特别大,但人多了,要保证每个人的贡献度,要如何分配每个人都有合理的任务量可以做呢?这是一个需要考虑的问题。

外科手术队伍

可以说我们在实践中基本采取了这种团队模式。

队伍成员 《人月神话》中的描述
外科医生(首席程序员) 首席程序员,亲自定义功能、设计程序、编制代码、书写文档、测试
副手 外科医生的后备,详细了解所有的代码,能完成任何一部分工作。
管理员 外科医生的老板

PM就是管理员,他除了PM常见的职责之外(负责组建团队、划分工作、督促进度、保持和团队成员的沟通)。他还经常参与前后端、数据库的开发,虽然说他不负责核心开发工作,但可以说PM真的对整个项目有相当程度的了解和把控作用。可以说是十分合格的PM。

在外科手术团队中,外科医生和副手了解所有的设计和全部代码,并确保概念上的完整性。

在传统的队伍中大家是平等的,出现观点的差异时,不可避免需要相互讨论和妥协让步。但在外科手术团队中,不存在利益的差别,观点的不一致之处可以由外科医生单方面来统一。

概念的完整性要求设计必须要由一个人或者非常少数、互相有默契的人来实现。……对于大型项目,将设计方法、体系结构方面的工作和具体实现相分离时获得概念完整性的强有力方法。

外科医生是前端组和后端组分别有两个leader,两位leader可以保证代码的产出效率。我是后端的leader,后端组4名成员中有一个得力副手,剩余两位在项目初期的时候处于较缓慢的学习进度中,但经过努力都可以真正地产出代码或文档,或进行测试。PM在开会时常会讨论需求;全体成员可以一起讨论初步接口、数据库、代码逻辑等构思,但最后一般都是PM和Leader统一敲定,给出正式和清晰的定义;PM和leader对任务进行合理的划分,其他的成员执行PM和leader交付给他们的任务;每个人都要承担自己的义务,PM和leader要确保大家不拖延和妥协。

从项目结构上和合作方式上说可以说这是一个非常良性的团队。这是在项目冲刺时自然而然地形成的,不得不说软工的理论确实还是非常有道理的。

文档、编程手册

我觉得自己做的最有意义的一件事情就是在项目过程中形成的学习文档。后来重看《人月神话》在第七章才发现其实这个叫“工作手册”:

  • 工作手册是外部规格说明、接口说明、技术标准、内部说明和管理备忘录。
  • “未来产品”的高质量手册,将诞生于今日的备忘录。正确的项目工作手册,能保证为阿里的文档结构的规范而不是杂乱无章。
  • 工作手册是每一个编程人员应当了解的所有材料。
  • 工作手册的实时更新是非常关键的。

贴几张图展示一下:

在事后读《人月神话》看到对应的内容,这表明了我在事先不知情的情况下做了一件其实是符合软工理念的事情。但最让我高兴的是“alpha事后诸葛亮”时,我的队友对我表达的感谢。这让我感受到了自己做的事情是非常有意义的,我体会到了什么是真正的合作,什么是真正的软工。

(王源)我感谢赵畅对我的帮助, 因为某个具体的事情: 共同爆肝编程解决了从部署到接口逻辑到代码的诸多问题。他提出并一直在努力维护的技术文档也为我和其他成员省下了许多debug的功夫。

(展瑞)我感谢赵畅对我的帮助, 因为某个具体的事情: 带领我进去后端框架的学习,并且帮助我梳理了整个后端框架,以及postman的工具使用;在我自闭的时候积极鼓励我。

Beta吐槽

Beta冲刺过程中团队成员出现了一定的懈怠情况。

  1. alpha冲刺过了快一个月,大家紧绷的神经放松了下来。还有就是隔了一个月发现自己突然不会打代码了
  2. beta期间存在着考试,复习的安排,以及毕竟已经有了alpha版本,对于未来的新功能不是特别的着急了。这也符合历年课程中大家认为alpha环节对自己提升最大的情况。
  3. 其实自己的动力也是下降了吧,其实明明自己构想好了很cool的功能没有去做,由于没有像去年栋哥那样强制布置推广给真实用户,所以我们目前没有推广给真实的食堂店铺店主使用,其实也是自己没有去推动做这个事情,(现在要准备考试也不打算去做)可以说是一个遗憾。

Beta之后的想法的更多相关文章

  1. Codeforces Beta Round #61 (Div. 2) D. Petya and His Friends 想法

    D. Petya and His Friends time limit per test 2 seconds memory limit per test 256 megabytes input sta ...

  2. 2016福州大学软件工程Beta阶段团队作业成绩汇总

    1.评分规则 本次Beta阶段团队作业评分方法如下: 团队得分=[[7次scrum过程评分+(小组互评得分+教师评分)/2]/2],其中过程.小组.教师各30分 说明:由于没有规定提交团队贡献比,因此 ...

  3. 【Beta】Daily Scrum Meeting总结

    团队博客目录:FTD团队博客目录 一.项目预期计划和现实进展 更换网络请求框架为okHttp 完成 补充和完善服务器的API 完成(可与web端互连) 补充和完善app与服务器交互的类和方法 完成 完 ...

  4. 软件工程(FZU2015)赛季得分榜,第11回合(beta冲刺+SE总结)

    目录 第一回合 第二回合 第三回合 第四回合 第五回合 第6回合 第7回合 第8回合 第9回合 第10回合 第11回合 增补作业 积分规则 积分制: 作业为10分制,练习为3分制:alpha30分:b ...

  5. Beta版本冲刺——day6

    No Bug 031402401鲍亮 031402402曹鑫杰 031402403常松 031402412林淋 031402418汪培侨 031402426许秋鑫 站立式会议 今日计划表 人员 工作 ...

  6. flow.ci Beta 上线,将开发工作流自动化

    说起未来,我们会想到自动.智能.机器人...,希望可以从眼前重复繁琐的事情中解放出来,让"机器人"自动智能地帮我们做更多的事情:希望开发可以更自动化.智能化.社会化,更少的资源浪费 ...

  7. Beta版本——第一次冲刺博客

    我说的都队 031402304 陈燊 031402342 许玲玲 031402337 胡心颖 03140241 王婷婷 031402203 陈齐民 031402209 黄伟炜 031402233 郑扬 ...

  8. 翻译: TypeScript 1.8 Beta 发布

    原文地址:https://blogs.msdn.microsoft.com/typescript/2016/01/28/announcing-typescript-1-8-beta/ 今天,我们发布了 ...

  9. Beta冲刺阶段

    Beta冲刺阶段 现阶段工作安排以及问题解决 Struts2框架配置 网上下载Struts 2 的框架代码,按照书上教程进行配置 遇到的问题:书上配置过程和实际操作有出入,按照书上过程无法完成配置过程 ...

随机推荐

  1. SAP CRM 自定义控制器与数据绑定

    当用户从视图离开时,视图将失去它的数据.解决这个问题,需要引入自定义控制器(Custom Controller)(译者注:SAP CRM自定义端中,不同地方的Custom Controller会翻译为 ...

  2. Python3编写网络爬虫10-数据存储方式三-CSV文件存储

    3.CSV文件存储 CSV 全称 Comma-Separated Values 中文叫做逗号分隔值或者字符分隔值,文件以纯文本形式存储表格数据.文件是一个字符序列 可以由任意数目的记录组成相当于一个结 ...

  3. Python3.6安装及引入Requests库

    本博客可能没有那么规范,环境之类的配置.只是让你直接开始编程写python. 至于各种配置网络上有多种方法. 本文仅代表我的观点的一种方法. 电脑环境:win10 64位 第一步:下载python. ...

  4. Spring集成MyBatis持久层框架

    一.MyBatis介绍 MyBatis 是一款优秀的持久层框架,它支持定制化SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的JDBC代码和手动设置参数以及获取结果集,可以使用简单的XML ...

  5. linux操作小技巧锦集

    0.常用Linux命令 查看端口被占用情况: 1.netstat -tunlp|grep 端口号 2.lsof -i:端口号 tar 压缩文件命令: -c:建立一个压缩文件的参数指令(create 的 ...

  6. Redis本身是单线程线程安全的内存数据库,但是不代表你的使用就是线程安全的

    网上一个错误示例:https://www.cnblogs.com/Simeonwu/p/7881100.html,部分代码如下: package com.me.config; import redis ...

  7. MySQL主从同步原理

    mysql主从复制用途 实时灾备,用于故障切换 读写分离,提供查询服务 备份,避免影响业务 主从部署必要条件 主库开启binlo日志(设置log-bin参数) 主从server-id不同 从库可以连同 ...

  8. druid监控配置

    druid相对于传统的c3p0和dbcp及其dbcp2等多个很多新特性 可以在线监控数据库及其表和sql以及Controller的requestMapping和对应的业务方面请求和session等 是 ...

  9. OpenCV (C++) 颜色跟随

    #include<opencv2/opencv.hpp> #include<iostream> using namespace cv; using namespace std; ...

  10. Django rest framework集成微博第三方登录

    Django restframework 集成第三方登录(微博.微信.QQ等) 友情链接 python-social-auth-app官方文档 微博开放者平台 QQ开放者平台 准备工作 1.注册微博开 ...