一、请回望第一次作业,你对于高级软件工程课程的想象
1)对比开篇博客你对课程目标和期待,“希望通过实践锻炼,增强计算机专业的能力和就业竞争力”,对比目前的所学所练所得,在哪些方面达到了你的期待和目标,哪些方面还存在哪些不足,为什么?
-
与开篇博客进行对比,这门课从各方面满足了我的期待,甚至在很多方面远远超过了我的期待!可以说是收获颇丰。在本科阶段,我虽然也有和小伙伴一起开发一个小项目的经验,但是那时的开发不管从工作量、完成度还是理论水平来说都远远比不上这门课的成果。本科时期的开发,需求完全按照自己的意愿来定,自己想做成什么样就做成什么样,完全不考虑客户是否会喜欢;工作量的分配也是极端不合理,困难的任务都交给技术大佬,其他成员三天打鱼两天晒网;几乎没有任何总结,没有任何文档;只要最后能写出一个成品就很有满足感,完全不管内部逻辑是否合理。
-
所以这门课给我最大的收获就是完整的模拟了一遍公司开发项目的流程,告诉我开发一个真正的项目要怎样入手、要做成什么样,给我积累了不少经验。还有一个重要的收获就是和小组成员一起开发的合作经验,从任务量分配到各方面细节的讨论,增进友谊的同时也推动了项目的进展。其他的收获也有很多,比如代码水平有所提升,学会了很多开发工具的使用方式,系统的学习了设计模式的原理和应用。
-
至于不足还是个人各方面素养的欠缺吧。一方面是我性格中的弱点,做事情只看到困难的一面,因为害怕无法完成而畏手畏脚。同伴用事实告诉我很多事看起来很难,做起来也很难,但是只要你付出努力,总会有些成果的。另一方面是能力方面的不足,不管是编程语言还是开发工具我都用不熟练,更别说其他的设计工作了,我的成长之路还是看不到头啊!
2)总结这门课程的实践总结和给你带来的提升,包括以下内容:
1、统计一下,你在这门高级软件工程实践中,完成了多少行的代码;
- 合计大约10000行
2、高级软工实践的各次作业分别花了多少时间?(做一个列表)
作业 | 花费时间 | 作业 | 花费时间 |
---|---|---|---|
软件工程第一次作业-准备 | 6h | 项目Alpha冲刺Day8 | 9h |
软件工程第一次作业 | 2h | 项目Alpha冲刺Day9 | 8h |
软件工程第二次作业 | 2h | 项目Alpha冲刺Day10 | 9h |
设计模式第一次作业 | 5h | 项目Alpha冲刺Day11 | 10h |
设计模式第二次作业 | 7h | 项目Alpha冲刺Day12 | 10h |
设计模式第三次作业 | 6h | 项目Alpha冲刺测试随笔 | 3h |
团队展示 | 3h | 项目Alpha冲刺总结随笔 | 5h |
选题报告 | 4h | 项目Alpha冲刺集合随笔 | 0.5h |
选题报告ppt | 8h | 项目Alpha冲刺事后诸葛亮 | 3h |
选题报告评审表 | 1h | 项目Beta冲刺预备 | 3h |
选题博客随笔 | 1.5h | Beta冲刺第一天 | 8h |
需求分析博客随笔 | 5h | Beta冲刺第二天 | 7h |
需求分析PPT和评审表 | 8h | Beta冲刺第三天 | 5h |
需求分析报告 | 8h | Beta冲刺第四天 | 8h |
项目Alpha冲刺Day1 | 10h | Beta冲刺第五天 | 6h |
项目Alpha冲刺Day2 | 8h | Beta冲刺第六天 | 7h |
项目Alpha冲刺Day3 | 10h | Beta冲刺第七天 | 9h |
项目Alpha冲刺Day4 | 9h | Beta冲刺总结 | 5h |
项目Alpha冲刺Day5 | 8h | 用户调查报告 | 6h |
项目Alpha冲刺Day6 | 7h | Beta冲刺集合 | 0.5h |
项目Alpha冲刺Day7 | 8h | 项目验收PPT | 12h |
个人实践总结 | 8h |
3、哪一次作业让你印象最深刻?为什么?
- alpha冲刺阶段,我们为了赶上进度,我们经常是在实验室或者图书馆工作到关门,然后到学校餐厅一起工作,最后连餐厅也关闭了才回宿舍各自完成剩下的任务,经常写代码写到凌晨,草草睡觉之后第二天起来再继续工作。这段熬夜的经历对于我这个午夜之前必须睡觉的懒猪来说真的印象极其深刻。
4、累计花了多少个小时在高级软工实践上?平均每周花多少个小时?
- 软工实践大概花了225.5小时,冲刺大概持续了三周左右,平均下来每周花费73个小时左右
5、学习和使用的新软件;
- 更加熟练的掌握了MyEclipse和MySQL的使用方式。
6、学习和使用的新工具;
- 学习了Robot Framework框架的使用方式。
7、学习和掌握的新语言、新平台;
- 对Java语言的使用更加熟练了,同时也掌握了一定的html、css、js、jQuery语法。学习了github平台的使用方法,实现了几个人的协同开发,github真的很好用。
8、学习和掌握的新方法;
- 掌握了包括策略模式、适配器模式、工厂模式在内的多种设计模式的用法。学习了mybatis框架的使用方法。
9、其他方面的提升。
- 首先代码能力有了一定的提高,灵活使用了各种工具,一整个开发流程走下来我的技术水平有了很大的提高。然后是团队合作的能力,提高了与组员的沟通能力,明白了在一个团队中如何处理好自己该做的事。最后是总结能力,写了很多分文档,学会了总结自己的得失。
二、写下属于自己的人月神话——个人或结对或团队项目实践中的经验总结+实例/例证结合的分析
对我来说最深刻的还是团队项目实践,所以我在此对团队开发的经验进行总结:
-
对一个团队来说,我认为最重要的一点是沟通,团队成员必须要有一个有效的沟通渠道,最好是一起工作,随时可以面对面交流。沟通是解决人与人之间问题的最佳渠道,沟通可以让小组矛盾得到最快、最有效的解决。沟通可以集众人之力帮助小组成员最快地解决问题。沟通也可以让小组成员最快的统一意见,对当前项目进度进行调整。
-
我认为对于一个团队项目,最开始的规划阶段也是十分重要的,这阶段包括需求分析,具体要实现哪些功能,系统设计结构,想要采取的技术等等。之后所有的工作都是基于这份最初的设计来进行的,假如这份设计没有做好,甚至于有了巨大的错误,那对之后的具体开发来说会有灾难性的影响。我们小组在alpha阶段,由于之前的规划没有商定详细的细节,导致我们后期的开发遇到了很多不该有的问题,不得不在开发途中对计划进行修改,无形中增加了很多工作量。
-
对一个小组来说,非常重要的是对每个小组成员的个性和擅长的领域有一定了解,并以此来合理的分配工作。我们小组在初始的时候,因为大家都还不熟悉,所以只能把各种任务都平均分配,效率并不高。渡过了磨合期之后,我们都知道了各自擅长的领域,把合适的任务交给合适的人,这样才保证了较高的工作效率。
-
最后,开发一个项目是一个漫长的过程,我们经过了alpha和beta两个阶段的冲刺,好不容易写出了一个完整的系统,还要对系统进行测试及修改工作,这时候大家都已经精疲力尽,没有一开始的冲劲了。这种时候的工作效率是很难保证的。我们小组也遇到了这样的问题,在项目验收之前,大家都不太有活力,工作效率也不高,这是下一次开发应该尽量避免的。
三、对下一届实践的建议,或者对于开学初的你,对于大一的你,对于开学初的我,你有什么想建议和告知的呢?
- 致后来者:对于有缘聚集在这个课堂里的各位,你们要做的第一件事是找几个小伙伴组一个团队。同一个团队里的同志们将会在未来十几周的时间里一起熬夜、一起敲代码、一起掉头发,不要浪费这个互相了解的机会,尽管找感兴趣的人组队吧。这门课需要你付出很多时间和精力,但是之前的学习经验告诉我们做起来越难的事情收获也越丰盛,所以不要放弃,坚持到最后再回首当初就会发现自己已经有了很大的进步。在课程的早期会有很多文字作业,或许会有些繁琐,但这些都是必要的,学好了设计模式才能开发出更灵活的系统。项目开发的时候切忌个人主义,有关项目的细节一定要和小组成员商量之后在大家做决定;遇到困难也不用自己扛,向小组成员求救,大家一起解决,这就是团队的好处,众人拾柴火焰高。
四、分析一下自己所处的团队。软件工程实践是大学里少有的认真的团队协作经验。《构建之法》上说团队的发展有几个阶段,你的团队都经历过么,最后到达了“创造”阶段了么?(参考《构建执法》第17章 人、绩效和职业道德)
《构建之法》将团队发展分为四个阶段:萌芽阶段、磨合阶段、规范阶段、创造阶段。
我们团队一共经历了前三个阶段:
- 一开始,我们三个只有几面之缘的小伙子组成了一个团队,大家都是一头雾水,之后根据自身需要确定了题目,选出了组长。接着我们一起商讨系统的需求和想要采用的技术,整合大家的意见,确定了初始的开发计划,给大家都飞配好任务之后就各自去做准备了。我们就这样磕磕绊绊的度过了萌芽阶段。
- 接下来是磨合阶段,在开发初期我们遇到了很多问题,其间也出现了一些矛盾,我们都是采取将问题丢出来,大家公开发表自己的看法,最后少数服从多数的方法解决矛盾的。随着时间的推移我们找到了默契的工作方式,也对各自擅长的领域有了一定了解,这就让任务的分配更加合理了。我们小组一直坚持让各位成员在同一个场所工作,这样有利于沟通也能大大提高效率。
- 顺利度过磨合阶段后,我们凭借着之前获得的默契日夜赶工,大家都专心于手头的工作,有任何问题也可以马上交流,保证了较高的效率,所以最后能够成功提交一个完整的系统。这是规范阶段。
- 我们没能达到最后的创造阶段,毕竟只经历过一个项目而已,我们小组的经验还是不足,各位成员的能力也有待提高。我们还需要进一步的努力。
五、怎样证明你学会了软件工程?
1)研发出符合用户需求的软件
必须公开发布,有实际的用户,一定的用户量和持续使用量 (3 天后能保持10 - 100个用户);而不是: 做没有用户使用的软件
2)通过一系列工具,流程,团队合作,能够在预计的时间内发布 “足够好” 的软件
有项目规划/需求/设计/实现/发布/维护,有定时的进度发布 ; 而不是: 通过临时熬夜,胡乱拼凑,大牛一人代劳,延迟交付等方式糊弄
3)并且通过数据展现软件是可以维护和继续发展的。
而不是 找不到源代码,代码无文档,代码不能编译,没有task/bug 等项目的发展资料
请在随笔中用数据证明上述内容或侧重选择之一。
- 在我们的博客中可以看到我们的项目经过选题、需求分析、原型设计、代码实现、用户测试、最终成果。
- 选题报告: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
六、个性发挥,包括图文、照片和创意等
我希望一个背影加上这两个字就是我们将来的写照: