高级软件工程实践总结
一 请回望第一次作业,你对于高级软件工程课程的想象
1)对比开篇博客你对课程目标和期待,“希望通过实践锻炼,增强计算机专业的能力和就业竞争力”,对比目前的所学所练所得,在哪些方面达到了你的期待和目标,哪些方面还存在哪些不足,为什么?
所学
- 通知这4个多月来的学习,高级软件工程的课程也即将结束。通过这门课程的学习,使我参与了结对和团队项目开发之中,学习了一些经典的开发方法,亲历了完整的项目开发流程。此外,我也学会了写博客,并尝试用博客作为自己学习的累计记录工具。GitHub是团队软件开发过程中不可多得的神器,这使得团队成员间的协同编程变得十分简单。
- 通过团队开发,我学习了新的开发语言-javascript和开发平台-JavaWeb,这极大了弥补了我对Web开发的知识缺失。同时让我懂得编程思想要大于编程方式。
- 重新学习和理解了设计模式。设计模式是面对对象开发中的必修课,学习这些技巧对以后的项目开发有着莫大的帮助。
- 完成了一次项目实践,学习了软件测试的一些基本方法。
不足
- 开发经验严重不足,在团队项目开发中的进度比较缓慢,常走弯路。
- 编程能力还是有很大的欠缺,在学习新语言时速度慢、犯错多。
- 团队项目中自我管理做的不够好,有时不能按要求完成自己的任务。
2)总结这门课程的实践总结和给你带来的提升。
代码记录
在第二次个人作业--数独中,完成的代码大约是400行。结对作业完成了大约300行。团队项目作业中完成了大约2200多行左右的代码。再加上三次设计模式的作业,共有900行左右。那么总的来说共完成了3800多行代码。
各次作业花费时间统计
作业名称 | 详情 | 耗时(小时 ) |
---|---|---|
第一次个人作业 | 阅读博客回答问题 | 5 |
第二次个人作业 | 回溯法生成指定数量的数独棋盘 | 12 |
第一次结对作业 | 针对给定资料进行需求分析 | 13 |
第一次团队作业 | 介绍本团队的基本信息,成员介绍和项目内容等 | 6 |
第二次结对作业 | 编码实现一个部门与学生的智能匹配的程序 | 12.5 |
第二次团队作业 | 项目选题及项目选题报告的书写 | 14 |
设计模式第一次作业 | 使用指定的设计模式构造程序 | 10 |
设计模式第二次作业 | 使用指定的设计模式构造程序 | 11.5 |
第三次团队作业 | 项目需求分析 | 14 |
Alpha冲刺 | 团队项目设计与实现 | 平均每天6小时/共12天 |
Alpha冲刺总结+项目测试 | 团队项目设计与实现 | 11 |
Beta冲刺 | 完善项目功能与设计模式的应用 | 平均每天6小时/共7天 |
最难忘的作业
令我印象最深刻的一次作业就是Alpha冲刺。这次的作业就是在有限的时间内完成项目的初等版本。当时由于没有接触过Web开发,所以要学习Html/CSS和JavaScript等新的编程语言和技巧。等到学习好基本语法后又发现自己并不能立即投入到开发之中。因为还有学习JQuery框架的使用。当时感觉真的很难,不过小组其他成员的鼓励给了我极大的动力坚持下来。
花费时间统计
从上表的数据记录来看,我已经累计在软工工程实践上花费了224个小时,平均每周花费15小时。
学习和使用的新软件
- startUML--这是画UML图的特别好用的软件,非常适合面向对象分析和设计模式类图的制作。
- leagoo--Leangoo是一个在线的团队项目协作工具,完美支持Scrum敏捷开发和看板方法。Alpha冲刺时燃尽图全靠它了。
- Microsoft Visio--流程图、坐标图什么的统统搞定。
学习和使用的新工具
- github首当其冲。在团队协同编程中github起到了不可或缺的作用。以后的代码托管全靠它了。
- Axure Rp原型图制作工具--这个工具实在是强大,很多图都可以用它来制作。同时我也学习了做原型图的方法。
- WebStrom--做前端的话就靠它了。很多css属性、javascript方法提醒可以很大地提高你的开发速度。
学习和掌握的新语言、新平台
- Html/Html5.0 由于我们的团队项目是基于Web端的,所以就必须掌握前端的基本知识和语言。之前并没有学过这些,所以就把它的基本语法、参考手册过了一遍。也算是系统的入门了一把。
- javaScript--前端脚步语言,也是Web开发必须语言。总体来说,其语法较简单,但是真正理解起来很难。基于原型的JS与我平时用的面向对象语言有着很大的区别。
- MarkDown--主要是要写博客啦。
- 平台的就是JavaWeb平台了。经过一段时间的冲刺我也算对其有了一些了解,成为了入门级选手。
学习和掌握的新方法
- 基本的性能分析方法。在数独那次作业中,我学习并使用了VS的性能分析工具,并找到了当时拖累程序的一些方法设计上的不当并成功修改。
- 新的需求分析方法。《构建之法》中讲到了NABCD的分析方法,我们在选题和分析中的确有用到。该方法确实帮助我们对要实现的项目进行了快速的分析。
- 协同编程。 使用github后,小组成员间可以按照分工同时进行项目开发。尤其是写代码的时候,只需要做好自己的工作,一天的总结之后大家一上传、合并就将大家的工作融合到了一起。
其他方面的提升
- 首先是编程方面的提升。经过这一段时间的联系,自己的编程能力有了一些增长。这不仅体现在编程速度上,而且在实现前对于功能的分析更加准确些或者说目的更明确了。
- 面向对象的设计思想。以前对于面向对象分析与设计是一知半解,到现在才知道之前是错的。在团队项目期间修改类图时才知道自己错在哪里。所以后来就查阅了一些资料和网上的资源,修改了类图,并将这次教训牢记于心。
与他人合作能力。之前的课程设计基本上都是一个人完成的,完成的质量很不好。现在在团队项目时大家一起搞项目。很辛苦,不过大家一起开发的时候感觉还行。最终能顺利完成要求感觉很好。
二 写下属于自己的人月神话——个人或结对或团队项目实践中的经验总结+实例/例证结合的分析
- 在团队项目中第一部要注意选题。当时在选题的时候我们只是按照自己的需求设想出了一个有着满足自己需求的目标软件。结果是老师并没有同意这个选题。所以后来我们就重新选了一个命题,并按照NABCD方法进行分析,最终赢得了老师的同意。这样的波折其实是可以避免的,所以选题前一定要下足功夫,这样也就省了不少事情。
- 项目小组成员间要学会合作。小组组员间的配合不可能一开始就是很默契,这个时候要根据每个人擅长和感兴趣的对其进行分工安排。当然,在面对一个大家都不会的开发平台或语言时,学会合作就显得尤为重要。拿我们的小组来说,每个人都不懂Web开发,更没用过什么SSH框架。所以有的成员就出现了抵触心理,导致其前期并没有全身心投入到开发之中。后来经过一些调整和其他人的帮助和协调,重新安排了工作。最终大家终于完成了工作,这很值得庆祝。
三 对下一届实践的建议,或者对于开学初的你,对于大一的你,对于开学初的我,你有什么想建议和告知的呢?
- 对于下一届实践我想说实践的内容可以精简些。尤其是对于结对编程,感觉用处并不大,有个人和团队就够了,尤其是当一个团队只有两个成员时就更没有存在的必要了。另外就是冲刺太占用时间,基本上时间都被榨干了。当时我们的算法和其它作业冲到了一起,整个人都是崩溃的。最重要的是,由于大家感觉软工占用时间太多,就导致下一届学生向我们求经时我们的感受可能会让他们打退堂鼓。。。
- 对于开学初的我,我想说:做一个软件真的很不容易。要做一个他人喜欢用的软件靠自己是基本不可能了。。。所以在强化自身能力的同时也要寻找到强大的组织,加入他们。实现自己的升华。当然,最重要的是学会与他人合作,这一点尤为重要。
四 分析一下自己所处的团队。软件工程实践是大学里少有的认真的团队协作经验。《构建之法》上说团队的发展有几个阶段,你的团队都经历过么,最后到达了“创造”阶段了么?(参考《构建执法》第17章 人、绩效和职业道德)
- 萌芽阶段:我们的小组成员之间都在同一个寝室,平常的生活接触时间比较多,大家从平时的事情中相互影响。真正的萌芽形成时是当我们决定组建小组之时。我们选择一起面对困难,一起决定队名以及宣言。
- 磨合阶段:在进入到小组项目开发设计过程中时,由于大家的长处以及兴趣各不相同,所以我们就以最大程度上符合各个成员的个人特色为目标进行了任务分工。但实际上我们初期做的并不合理,导致大家积极性不够高。后来进过不断调整和磨合,大家的角色逐渐定位了下来。
- 规范阶段:经历过磨合阶段的我们在团队工作中各自担任了较为固定的角色,所以任何事情的出现我们就知道首先要找谁。后来,经过一定时间的训练加上对软件工程的进一步了解,我们逐渐对自己的工作有了较为清晰的认识。此外,我们根据现有的软工规范来约束自己的工作,这为我们之间的有效率合作打下了深厚的基础。
- 创造阶段:目前来说,我们还距离这一阶段有些远,以后需要加倍努力。
五 怎样证明你学会了软件工程?
目前来说,我觉得自己的小组基本上做到了第二点。软工作业的要求首先是我们的计划同时是我们的目标。尤其在Alpha冲刺时,我们严格按照老师的作业要求。早上举行站立式会议,总结昨日任务完成情况,制定今日任务计划等。我们首先是花了一些时间也进行任务分配,确定个人在团队中负责的任何和角色,然后使用github作为协同工作工具每天进行任务的整合。在努力解决问题的同时,我们也在不断地调整自己的角色,并通过相互之间协商的方式来不断调整个人的分工。最后,任务按时有序完成,我们一起庆祝。
六 个性发挥,包括图文、照片和创意
You are incredibly brave!