一、学期初,实验一中的任务4,大家拟定了5个准备从课程学习中找到答案的问题,通过一个学期的学习,相信大家已经有了答案,请根据自己的学习实践回答自己当初提的问题,并提出一个新的问题。
问题一:在第一章中我了解到“软件=程序+软件工程”,可见,要想开发一个好的软件就必须有一个高质量的软件工程,那么,什么样的软件工程才算得上是高质量的软件工程?
答:当初提出这个问题时,是我第一次深入了解“软件工程”这个概念,虽说之前总听说“软件工程”这个名词,但对它并没有一个清晰的定义,通过本学期的学习,我理解了软件工程就是将系统性的、规范化的、可定量的方法应用于软件的开发、运行和维护。一个软件的开发具有一定的生命周期,只有保证每个时期都高效,且具有质量保障,才能保证最后开发出来的软件高质量、低成本,这就需要一个高质量的软件工程来支撑。从广义概念看,软件工程涵盖了软件生命周期中所有的工程方法、技术和工具,包括需求工程、设计、编程、测试和维护的全部内容,即完成一个软件产品所必备的思想、理论、方法、技术和工具。
问题二:通过第二章的学习,我了解到一般的软件开发要经过“需求分析、生成设计文档、设计复审、代码规范、具体设计、具体编码、代码复审、测试”等流程,那么,在这些流程中软件开发的核心到底是什么呢?当我们在软件开发过程中出现错误时,如何从这么多的流程中找到错误的根源呢?
答:在我看来,在软件开发过程中,最重要的工作应该是需求分析和生成设计文档,只有充分、正确地了解了用户所面临的问题和对目标系统的基本需求,才能确定该项目是否具有可行性、接下来的工作如何进行,如若不然,就像一个无头苍蝇,误打误撞,最后开发出来的软件也必定不会令用户满意。另外,生成设计文档也十分重要,因为这个文档将成为实施工作的一个导航和标准。如果在开发过程中出现错误,可根据错误类型,在设计文档中查找相关内容找出原因并解决。
问题三:我们经常会听到“某某会写程序,开发了一个小软件”,是不是会开发软件的人都可以称为软件工程师呢?一名合格的软件工程师需要具备什么样的素质,又如何才能成为一名优秀的软件工程师呢?
答:软件开发工程师是从事软件开发相关工作的人员的统称,一名合格的软件工程师需要具备以下六大素养:
- 良好的编程能力
- 自觉的规范意识和团队精神
- 认识和运用数据库的能力
- 较强的英语阅读和写作能力
- 具有软件工程的概念
- 求知欲和进取心
通过个人不断努力与学习,使自己具备以上六大素养,并逐步求精,就有可能成为一名优秀的软件工程师。
问题四:在第五章中我了解到软件团队的模式有很多种,但是对它们的特点还不是很理解,它们各有什么优缺点,软件工程人员该如何根据需要选择合适的团队模式和开发流程呢?
答:通过本学期的团队项目体验,我明白了团队模式与开发流程的选择是根据软件的规模与软件自身的特点进行选择的。
问题五:一个软件的使用者各种各样,他们有着不同的需求,软件工程人员该如何选择性的满足用户需求呢,这其中是否包含一些通用的原则呢?
答:由于一个软件可能会有不同的用户,所以在需求分析阶段就必须全面、充分了解各类用户的需求,如若不能不能逐一实现,那就应该以广大用户的共同需求为主,再根据实际情况做一定的补充完善。
新的问题:软件在开发测试阶段往往会有客户的需求变更,甚至有可能会有大面积的需求变更,每变更一次需求,客户认为只是简单的变更,但对于开发人员来说都是超级复杂的需求变更,甚至会说前面的工作都白做了,这时开发人员应如何应对?
二、课程的实践总结与自身的提升:
1、统计你在软工课程实践中,完成了多少行的代码;
完成了大约三千多行代码。
2、软工实践的各次作业分别花了多少时间?累计花了多少个小时在软工实践上?平均每周花多少个小时?(做一个列表)
软工作业 | 花费时间(h) | 平均每周花费时间(h) |
实验一 软件工程准备 | 5 | 7.58 |
实验二 软件工程个人项目 | 8 | |
实验三 软件工程结对项目 | ||
实验四 基于原型的软件需求获取 | 10 | |
实验五 软件研发团队组建 | ||
实验六 团队项目评审与团队项目选题报告 | 6 | |
实验七 团队作业3—团队项目的原型设计与开发 | ||
实验八 团队作业4—基于原型的团队项目需求调研与分析 | 9 | |
实验九 团队作业5—团队项目需求改进与系统设计 | 7.25 | |
实验十 团队作业6—团队项目系统设计改进与详细设计 | ||
实验十一 团队作业7—团队项目设计完善&编码测试 | ||
实验十二 实验十二 团队作业8—团队项目用户验收评审 |
3、哪一次作业让你印象最深刻?为什么
团队作业5—团队项目需求改进与系统设计让我印象最深刻,在这次作业中我们六个人从下午吃完饭开始,一直到晚上十二点,分工完成作业,遇到困难时在群里一起讨论,共同解决,大家各抒己见,最后得到最好的解决方案,在这次团队作业中,我感受到了强大的团队合作的力量和温暖。
4、学习和使用的新软件;
visio、git
5、学习和使用的新工具;
process on、墨刀、石墨文档、WBS工具
6、学习和掌握的新语言、新平台;
GitHub、博客园
7、学习和掌握的新方法;
快速原型方法、白盒测试与黑盒测试、面向对象设计方法、判定树、数据流图、ER图等。
8、其他方面的提升。
学习软件工程这门课程,我的文档书写能力、团队合作能力、逻辑思维能力以及发现并解决问题的能力有很大提升。
三、你认为目前的课程有哪些问题,你有什么更好的建议:
1、你认为本门课程需要在哪里进行改进,具体措施有哪些,包括:时间进度安排,项目难度等均可;
学习本门课程的过程中,老师以实践紧随理论的方式给我们安排任务,项目难度可以接受,项目前期的时间安排比较合理,但是到了编码实现时,时间太过紧促,本来我们平时的课程就多,也有其他事情要做,但是还要在短短一周内就完成一个项目的编码工作,确实是有一定难度的,希望在以后的时间安排上可以根据学生实际情况和工作量大小布置任务。
2、你认为助教/老师哪里做的不足,哪里限制太多等;
对于助教的评分准则我一直都有疑问,明明我们做的工作要比有的团队好,他们甚至存在很明显的错误,但是最后的成绩却比我们高,是不是表面工作做得好一点就足以拿到一个高分了。另外,学生的照片为何非要放入博客呢,偏偏有些人就不喜欢把照片放到一个公开的场合,这也算是别人的隐私吧!
3、你认为每次项目的评分标准存在哪些问题,你认为的合理评分准则是怎样的(个人/结对/团队算三个)
评分准则划分的比较详细,但是最后博文展示出来的不一定就是实际做了的工作,有的项目是真真实实从头到尾都是自己从需求分析,设计到编码实现做出来的,而有些项目确实拿的别人的成品,然而到最后,确是那些使用别人的劳动成果的项目拿到了好的成绩,当然了,如果人家做的不足够好,也就不会上传到网上了。总的来说,形式化比较严重吧,评分的时候谁又会在乎过程呢。
4、在结对项目中你是否真正体会到了结对的好处,是否真正严格进行了结对编程,双方的工作量是否相同;
结对编程中体会到了结对编程的好处,两个人根据自己的特长和任务量大小进行分工,遇到问题时一起协商解决,双方的工作量基本相同。
5、你的团队项目是否成功,如果重来一次你是否还会选择这个团队,为什么成功/失败;
我的团队项目是成功的,最后实现了项目的预期成果,如果重来一次我还会选择这个团队,这个团队的成员各具特色,团队合作意识比较强,也能吃苦。
6、总结一下你们团队在做项目时大家的时间安排情况。
对于大多数成员,做项目的时间除了上课时间以外,一般会集中在晚上或者下午,项目不同阶段做的工作不同,时间也会有所调整,写博文一般都是在截止时间的前一天晚上。
7、对下一届软工课实践教学的建议,或者对于开学初的你,对于大一的你,对于开学初的老师,你有什么想建议和告知的呢?对于后来人的期许。
这门课程大二就应该开设了,通过大一的程序设计语言学习和对一些项目的了解,大家有了良好的基础,此时学习软件工程有巩固深入的作用,但是到了大三,大家都时间紧迫,就没有那么多精力了,当然也就没有那么大的兴趣了。对于后来的同学,我想说:“有目标就有方向,有压力就有动力,相信自己,你的潜力有待开发!”
四、你还有什么想说得话
学习本门课程,一方面,我学到了许多有关项目开发方面的经验和知识。另一方面,学会了管理一个团队,协调团队关系,与人合作共处,管理自己的情绪,努力克服困难,还提高了书写文档,规划事情的能力。总之,本学期的收获很大,感谢老师和助教的指导和帮助!