高级软件工程实践总结作业
一、请回望第一次作业,你对于高级软件工程课程的想象
1)对比开篇博客你对课程目标和期待,“希望通过实践锻炼,增强计算机专业的能力和就业竞争力”,对比目前的所学所练所得,在哪些方面达到了你的期待和目标,哪些方面还存在哪些不足,为什么?
开篇博客对这门课的期待是:
希望能努力跟上队友的脚步,努力增强自己的团队合作能力,能理解到学到的新知识。
当初我对这门课程有着三项期待,
-
第一项:突然觉得以前的想法还是简单了,天真的想着跟上队友的脚步就是变得和他一样强,但那时并未明白,其实每个人的强大并不一样,在团队合作中,每个人应该展现的,是自己相对较强的部分;在团队面临缺少角色的情况时,就算能力不足也应该努力撑住。所以我并不需要和队友一样强,强者已经扮演了强者的角色了,团队角色饱和了。其实还有另一个thinking,想要追赶上强者,你完全不知道还要付出多少努力。
-
第二项:在增强团队合作能力方面,我觉得多少是有了些感悟和经验的,但可以感觉到的是,合作的路是漫长的,可以漫长到一直伴着你的余生。虽然是第一次参与如此深度的合作,但这次总体来说确实算是挺愉快的,但已经明显感觉到了若是没有持续不断的继续合作的经历,是无法探索到更高级的团队合作的艺术真相的。
-
第三项:能理解学到的新的知识,这一点是三点中最欣慰的,这门课程教授的软件模式还是很实用的,我也get到了不少,在实际项目开发中使用设计模式确实会比较可靠,可以说设计模式是前人总结的经验,用设计模式写程序会比不知道设计模式的人自己摸爬滚打效率高得多。
-
第一项和第二项部分达到,尚有不足,第三项勉强达到。
2)总结这门课程的实践总结和给你带来的提升,包括以下内容:
1、统计一下,你在这门高级软件工程实践中,完成了多少行的代码;
9000行左右
2、高级软工实践的各次作业分别花了多少时间?(做一个列表)
作业 | 花费时间 | 作业 | 花费时间 |
---|---|---|---|
软件工程第一次作业-准备 | 7h | 项目Alpha冲刺Day8 | 9h |
软件工程第一次作业 | 2h | 项目Alpha冲刺Day9 | 8h |
软件工程第二次作业 | 4h | 项目Alpha冲刺Day10 | 9h |
设计模式第一次作业 | 5h | 项目Alpha冲刺Day11 | 10h |
设计模式第二次作业 | 7h | 项目Alpha冲刺Day12 | 10h |
设计模式第三次作业 | 7h | 项目Alpha冲刺测试随笔 | 3h |
团队展示 | 3h | 项目Alpha冲刺总结随笔 | 5h |
选题报告 | 4h | 项目Alpha冲刺集合随笔 | 0.5h |
选题报告ppt | 4h | 项目Alpha冲刺事后诸葛亮 | 3h |
选题报告评审表 | 1h | 项目Beta冲刺预备 | 3h |
选题博客随笔 | 1.5h | Beta冲刺第一天 | 8h |
需求分析博客随笔 | 8h | Beta冲刺第二天 | 7h |
需求分析PPT和评审表 | 8h | Beta冲刺第三天 | 5h |
需求分析报告 | 8h | Beta冲刺第四天 | 8h |
项目Alpha冲刺Day1 | 11h | Beta冲刺第五天 | 6h |
项目Alpha冲刺Day2 | 8h | Beta冲刺第六天 | 7h |
项目Alpha冲刺Day3 | 9h | Beta冲刺第七天 | 9h |
项目Alpha冲刺Day4 | 9h | Beta冲刺总结 | 5h |
项目Alpha冲刺Day5 | 8h | 用户调查报告 | 6h |
项目Alpha冲刺Day6 | 7h | Beta冲刺集合 | 0.5h |
项目Alpha冲刺Day7 | 8h | 项目验收PPT | 12h |
个人实践总结 | 8h |
3、哪一次作业让你印象最深刻?为什么?
是那次项目更改的时候吧,因为题目的更改,我们花了很多时间去做新的题目。为了那一份文档、一份PPT、一份博客,具体内容已经模糊了,但两个场景却还在脑海中挥之不去。一是空旷的实验室、三台笔记本、三个对着屏幕敲键盘的人。第二个是,半层高窗户,一张桌子,三个人,三个被扔下来被接住的书包。为什么记住了这个场景,我想若只是一人的回忆,便是平常,若是和伙伴的共同回忆,那便是稀有的珍贵体验了。
4、累计花了多少个小时在高级软工实践上?平均每周花多少个小时?
从选题到项目的beta版本结束一共花了225小时,完成系统一共进行了三周的冲刺,平均每周75小时。
5、学习和使用的新软件;
MySQL workbench对mysql数据库的操作。
6、学习和使用的新工具;
学会了github的一些操作,github是目前最流行的开源库,也是一个优秀的代码管理平台。
7、学习和掌握的新语言、新平台;
对Java的进一步熟悉,对myeclipse开发平台进一步的熟悉。
8、学习和掌握的新方法;
学习并初步掌握了工厂模式、策略模式、状态模式等模式设计方法。
9、其他方面的提升。
对团队合作进一步的认识,对自己能力的进一步认识,对自己性格更深入的了解,发现了自己在团队协作中的许多不足。
二、写下属于自己的人月神话——个人或结对或团队项目实践中的经验总结+实例/例证结合的分析
-
1)宏观计划和实际实施的矛盾
由于缺乏项目经验和对项目具体细节的预估。我们当前制定的非常合理的安排,到具体实施时可能会遇到很大的问题。比如有一次,在具体执行当日计划时,我们有两人的任务提前完成了,而剩余一人的剩余工作量仍然很艰巨,这个是工作分配不均衡,是一个常见问题,也是很影响整体进度的一种情况,若是有经验的团队必然可以事先预见这种情况,准备了对应的策略,将工作量进行再分配等操作。而我们显然没有这样的经验和思想准备。 -
2)冲突的解决
解决冲突的重要性,团队中发生冲突时,团队的工作会停滞下来,所有人的进度都会被拖后,争议不解决,影响越严重。所以对于小团队来说,解决冲突的规则是非常重要的。我们小组在第一次冲突出现时就确立了一个冲突原则,“少数服从多数”,这一原则被认可度极高,并且事实证明,其对快速结束争议,取得小组进度有着极好的效果。 -
3)完不成的任务
论度量的重要性。开发项目是一种艺术吗?我认为每种工作都可以是一种艺术,开发项目也是这样,你可以简单的实现功能,完全不管代码是怎么样,实现了功能便是达到了目的。作为一项艺术,代码具有被打磨的性质,打磨变量的合理性,打磨代码的重用性,打磨代码的简洁性,这几点要求做到的话会比单单实现功能多花上很多时间,再高级一点的会加上注释,再继续打磨注释的表达力,这就需要更强的功底了。所以开发软件时,对软件的功能一定要有所限制,对工作要具有一定的标准,不能想加什么功能就加什么功能,时间是有限的,你可能会完不成这任务了。 -
4)合适的角色
之前没有过这么紧密的组队体验,也许有过,但能做的仅仅是听从安排罢了,但这次组队人数较少,总有你能发挥作用的地方,你总该去找到一个适合的角色、一个适当的位置。我想团队中最重要的莫过于你能清楚地知道你该扮演什么样的角色,发挥什么样的作用。
三、对下一届实践的建议,或者对于开学初的你,对于大一的你,对于开学初的我,你有什么想建议和告知的呢?
对下一届的学弟学妹们的建议,也就是2019届学弟学妹吧,我想我会说,如果你们也有机会在实验室一起奋斗到深夜,一起爬窗逃离实验室的话,记得那时,轻轻地掸去身上的尘,抬头找一下夜空中的明月。月光下,你就不会去抱怨晚上的寒冷,而是学会了体会内心的温度了。匆匆岁月过往,我们会忘记很多,有大事,有小事,那曾经让你如临大敌的许多问题,现在也都一笑而过,相忘于江湖了。你们努力去创造的,是自己最终能记住的事。
四、分析一下自己所处的团队。软件工程实践是大学里少有的认真的团队协作经验。《构建之法》上说团队的发展有几个阶段,你的团队都经历过么,最后到达了“创造”阶段了么?(参考《构建之法》第17章 人、绩效和职业道德)
萌芽阶段(Forming),在这一时期,团队成员刚刚接触到团队的宗旨,同时很可能刚刚互相认识。团队的目标没有真正达成一致,而成员则非常依赖于团队领导的指导。
磨合阶段(Storming) 团队中的一团和气只能维持一小段时间,大家不得不认真地面对问题,开展讨论。随着讨论的深入,有些人会沉不住气,就会出现小的意见分歧和冲突。这些冲突不一定都是技术问题,也许是关于角色、职责、相互关系,甚至是各自性格、文化的冲突。
规范阶段(Norming),成员们意识到光争吵是没有用的,大家还是要协同作战。成员们就很多事情取得了一致。角色和职责定义得非常清楚。团队还进行过有趣的团队建设活动。这一时期的团队有如下特点。
创造阶段(Per-forming)。共同的远景不再是空话,而是实实在在的阶段性成果。这些成果鼓舞了士气,整个团队成为其他团队羡慕的对象。高度自治,不再需要领导的时时教诲与介入。不同意见仍会出现,但是成员都以一种积极的心态和方式来解决。团队成员相互支持,互相依赖并保持各自的灵活性。团队成员之间都比较熟络,同时也互相信任,个人可以放手独立工作。角色和职责能够根据项目的要求自然地转换,没有人为此担心或发牢骚。
-- 引用自《《构建之法》阅读笔记06》
- 萌芽阶段:
我们确实具有不断探索适应这个团队的新环境,小心的探知团队成员的行事方式,尽量多的发表看法这些特征,而此阶段正确的做法是:
领导要快刀斩乱麻地决定一些重要的问题,让团队在短时间内看到一些成果。
--引用自《《构建之法》阅读笔记06》
我们队一开始成型时就开展了小组第一次会议,会议上进行了简单的交流,团队任务的分析和一次共同完成任务的体验。但幸运的是,小组中隐隐出现了一个leader角色,
这个角色的出现意味着我们的小组有了可以短时间内完成一定成果的能力。我想这正与萌芽阶段相契合。
- 磨合阶段:
我们都来自不同地方,本科专业也各不相同,所以是各自性格、文化的差异,使我们在一些事情上的看法不同,发生冲突,此阶段正确的做法是:
团队领导最好让矛盾和分歧充分地暴露,将各种冲突公开化,并且学会倾听、理解和调整。
--引用自《《构建之法》阅读笔记06》
很幸运的又一点是,我们组长是一个非常有趣的人,在团队成员的意见分歧之间往往会是那个 缓和化解矛盾的人。现有事实说明,他做的不错。 但由于成员数量较少,所以暴
露的冲突不够丰富,我想这就是我们的磨合阶段。
- 规范阶段:
在团队的后期,我们已经意识到了,针对当前团队任务,我们要做什么、不做什么。小组成员之间开始意识到并学会尊重各人的个性。这个时期我们有一个时常催促进度的leader,一个调解斡旋矛盾的角色,我想第三阶段我们已经探索到一部分了。至于团队第三阶段的其他未达成部分和团队的第四阶段,我想,我们的路,还遥遥可期。
五、怎样证明你学会了软件工程?
1)研发出符合用户需求的软件
我们的软件确实是满足了我们初期设想的各种需求的,所谓必须有的功能我们都有了,有必要的功能我们都加了。
2)通过一系列工具,流程,团队合作,能够在预计的时间内发布 “足够好” 的软件
从一开始的选题报告,到后面的需求分析,到系统的具体开发、测试。alpha阶段进行了各成员的详细分工,项目燃尽图从总工作量走到了0工作量。开发时间历时两周。经历了alpha版本和beta版本的冲刺,在组员的相互督促下,除了实在没可能完成的任务,每天的进度我们都会尽量完成,因此可以在一定程度上保证进度不被延后,保证一定时间内可以完成特定功能。
3)并且通过数据展现软件是可以维护和继续发展的。
我们的系统以选题报告为开端,相继进行了需求分析、原型设计、Alpha阶段的开发及测试、beta阶段的开发及测试到最终完成都有相应的报告和记录。
选题报告:https://www.cnblogs.com/marboy/p/9903075.html
需求分析:https://www.cnblogs.com/marboy/p/9959024.html
Alpha阶段的开发及测试、beta阶段的开发及测试:https://www.cnblogs.com/marboy/p/10035388.html
https://www.cnblogs.com/marboy/p/10092660.html
六、个性发挥,包括图文、照片和创意等
曾经,一个灵魂坐上一列火车,去向了未知的远方,故事中没有描述列车停下来的地方,也许是一片有两幢风车的草原,也许是密布蜿蜒小路的世外村庄,亦或是高楼大厦间的繁华都市…
人在面临选择之时,在犹豫彷徨之间,总会渴望能找到多一点的理由来佐证自己想要的选择会更加合理,而在合理和你想要之间,你会走上那条路呢?