软件工程总结

软件工程课程学习总结

这个学期已经结束,软件工程这门课也已经结课了,这一个学期,软件工程可以说是我生活中很重要的一个部分,在这门课的学习过程中,我学到了很多,也走过不少的弯路,吸取了不少的经验教训。选课之前,学长学姐都告诉我们这门课很辛苦,要做的东西很多,但是考虑到自己的代码能力并不是很强,很想借此机会锻炼一下自己,所以就选修了这门课,既然在easy和hard模式之间选择了hard模式,那就做好了艰苦工作的准备。

还记得最初的个人项目和结对编程项目,这个阶段虽然任务量较大,但是完成这些任务确实提升了我的编程能力,在这个过程中,我学会了C#语言的使用,对广度优先算法掌握得更加熟练,对GUI也有了一定的了解。很感谢这门课给了我一个独立完成上千行程序的机会,虽然过程中付出了很多努力,但是收获与努力是成正比的,在这一阶段,我对软件工程这门课还是有很大好感的,但是到了团队项目阶段,我就遇到了很多意料之外的事情。

团队项目阶段,我所在的团队接手的是上一届的学长留下的XuebaOnLine项目,这个项目很大,使用的技术也很先进,界面酷炫的同时也给我们的接手带来了较大的难度,老师所给博客中有一篇描述了软件开发过程中盲目移植造成可维护性很低的情况,这一点我深有共鸣。因为安装一个文件造成的一大堆依赖,以及这些依赖之间奇奇怪怪的相互依赖问题,使我们团队成员在配置项目运行阶段花费了大量的时间,消磨了大量的精力,并且当时也并没有采用效率较高的方法,只是简单机械的每个人分头安装,造成我们的自信心在项目的一开始就遭遇了巨大的打击。因为之前没有软件工程的经验,没能在团队项目中与其他成员高效地合作,最终造成团队项目的结果不是很理想。

反思自己在团队项目过程中的表现,首先是没能积极与团队其他成员进行联系和合作,其次就是自身的积极性也并不是很高,到项目最后的阶段,只是为了完成任务,对这个项目没有很强的动力去做,还有一个很重要的问题,是自己平时积累的太少,以至于在接手项目的时候感觉无从下手,拖慢了进度。

那么在这里,关于软件工程,我也有一些疑问:在团队项目中,我们需要一个项目经理,如果我没有理解错的话,项目经理需要对接下来要做的任务有一个比较全面的认识,并且能大致预估各个任务的工作量,这样才能为团队成员合理的分配任务。以我们的XuebaOnLine项目为例,这就要求项目经理在一开始就要能大致的把整个项目都理解透彻,对每个模块的大致功能都明白,并且把任务的工作量也做一个正确的估计。虽然我们有学长们留下的博客做参考,也寻求了学长的帮助,但是对于刚刚接触这些东西的我们来说,的确难度很大,我们的XuebaOnLine项目属于架构套架构,运行的具体流程很复杂,而且工程中有很多很多文件,加起来上百兆,里面也存在很多冗余的,或者说根本看不明白的部分,项目经理也只是我们的同学,水平也不可能做到非常非常强,在项目一开始就对项目经理要求这么多是不是有点不太合理呢?我们目前代码能力还比较弱,如果直接照搬企业里的模式或许并没有预期中的效果,我们也非常需要在这一过程中老师和助教能多给我们一些帮助。从我个人而言,目前阶段更想多学一些技术层面的能力。

对之前所提问题的理解

之前问题的博客:

http://www.cnblogs.com/han*/p/5880997.html

1.关于“敏捷开发”,项目开发中,是该先规划好整体的架构,把细节想清楚再开始着手进行代码实现,还是有个大概的思路就开始进行实现,在实现的过程中解决面临的问题?

在具体的开发中,我个人觉得应该先对整体有个大概的思路,然后在实现过程中根据出现的问题不断的调整策略,如果事先花费大量的时间去规划,在实现过程中很有可能发现事先规划好的还是有很多问题没有考虑清楚,反而效率更低。

2.软件测试的重点在哪里,是该对重要的函数进行多次测试,还是对整个程序进行全面的测试?

测试更应该做到模块化,方便后续过程中的回归测试,软件测试做到有条理,全面即可,不必进行多次测试。

4.覆盖性测试如果做不到100%的覆盖率怎么办?有的时候程序为了处理一些不可预知的错误而写的部分也一定要进行覆盖吗?

测试应该尽量覆盖全面,因为我们的工程是面向客户,而不是面向老师,客户的行为是无法预测的,程序崩溃造成的后果是很严重的。

5.关于团队合作,如何把工作进行拆分,针对不同的工作,如何衡量团队中每个人做出的贡献?

项目经理的任务。。。

剩余问题:3.书中对于软件开发的流程介绍的十分完备,但是对于一些较小的项目,严格遵守这些流程会不会在一定程度上拖慢项目的进度,把简单的事情复杂化?

因为团队项目中,实际上只有我和姬索肇同学在进行开发,两个人开发确实比较灵活。对于github进行代码管理,我觉得这是很有必要的,但是对于例会报告,我依然存在一些疑惑,撰写例会报告真的有意义吗?只有两个人,平时可能只是简单问一句,并不会再专门留出时间来开例会,撰写例会报告花费了很多时间,这些时间真的是必要的吗?

软件工程这门学问有很多 “知识点”, 这门课强调 “做中学” - 在实践中学习知识点。

请问你们在项目的 需求/设计/实现/测试/发布/维护 
阶段(一共6 个阶段)中都学到了什么 “知识点”, 每个阶段只要说明一个知识点就可以

需求阶段:学会了通过分析调查问卷的结果得到用户的需求,并根据这些需求分析我们的项目需要进行哪些改进。

设计:对项目前端的设计,以及学习到了很多框架的知识。

实现:对js,html语言有了一定的了解和掌握。

测试:测试是较多样的,包括代码测试和实际的应用测试,回归测试很有必要。

发布:对服务器的部署。

维护:在开发阶段就要尽量不要保存冗余代码,否则程序的可维护性会越来越差。