项目 | 内容 |
---|---|
课程名称 | 2016级计算机科学与工程学院软件工程(西北师范大学) |
作业要求 | 实验十四 团队项目评审&课程学习总结 |
作业学习目标 | (1)掌握软件项目评审会流程;(2)反思总结课程学习内容。 |
一、1.结合本学期课程学习内容,对比《实验一 软件工程准备》的任务5你所提的问题(给出提问博客链接),尝试对提出问题进行解答,并阐明是如何通过学习/实践/讨论弄清楚的;学习中是否产生了新的问题?如有,请提出。
-
问题1:
对于《构建之法》第95页阿超所说的程序员Melvin Conway总结的康威规律中所讲,“软件系统是给用户使用的,用户的需求并不是要看这个机构的内部组织架构图,而是要解决用户的问题。一个合适的团队结构,能更大的改进交流的效率,让团队更能把注意力集中在最主要的目标——解决用户需求上面。”由此可以看出,一个软件工程开发的过程中,用户的需求占据着至高无上的地位,那么机构的内部组织架构就不重要了吗?当用户不断地提出新的问题时,软件开发人员又将如何解决因此而带来的时间问题呢?此外,评价一个团队的好坏,也是只关注他们是否可以解决用户的需求,而无需顾及每个机构的内部组织架构吗?
我认为评价一个软件项目团队的好坏,效率最为关键。而一个项目开发的最终目标,是为了让用户使用,因此必须清楚的了解用户的真实需求,比如用户需要的功能,想要看到的界面等。一个靠谱的需求分析能够减少项目开发的时间,提高项目开发的效率。然而,一个可以在需求分析阶段做到很细致的团队,必定拥有非常好的内部组织架构,以及分析并解决用户问题的能力。当用户的需求不是很明显时,软件项目团队需要以用户可以理解的方式积极地与用户进行多次沟通,详细了解用户的需求。
-
问题2:
通过阅读《构建之法》第五章中软件团队的模式相关内容,我了解到了团队模式的多样性,但是对于这些团队模式的特点以及各自的优缺点还不是太理解。同时,对于团队模式也有以下一些困惑。在我们现在的学习中和以后的工作中所适合的团队模式是否一样呢?当一个全新的软件工程项目开始时,应该如何选择一个最合适的团队模式呢?当选定一个团队模式以后,在整个项目开发过程中,最初所选的团队模式是否可以发生变化呢?如果发生变化,那么会在哪些情况下才可以改变团队模式呢?在软件工程开发的过程中改变团队模式,会对整个软件工程项目造成一些积极或者消极的影响吗?
“千人同心,则得千人力;万人异心,则无一人之用”,这是古人对团队合作的理解。在软件开发的过程中,“孤木难支”这个词显得相当贴切,因此团队合作就显得极其重要。软件团队模式多种多样,适用于不同的人员和需求,主要有:主治医师模式、明星模式、社区模式、业余剧团模式、秘密团队、特工团队、交响乐团模式、爵士乐模式、功能团队模式和官僚模式等。我个人的理想团队模式是功能团队模式,简而言之就是具备不同能力的个人平等协作,共同完成一个功能。因为我认为每个人的能力都是有差别的,而这个模式可以使团队成员各司其职,充分发挥每个人的作用。而且相互之间没有管理与被管理的关系,可以消除成员之间的距离感,增强团队的沟通交流,最终开发出完美的软件产品。
-
问题3:
通过阅读第九章的相关知识点,我深刻体会到了在一个软件团队中PM的重要性以及想要成为一个合格的PM所必备的一些条件,同时也产生了很多疑惑。在182页的讲述中,我知道了PM可以表示为以下三种:Product Manager(产品经理)、Project Manager(项目经理)、Program Manager(程序经理),那么这三种PM有什么本质的区别呢?在一个大型的公司中,是否同时需要这三种PM的存在呢?此外,对于当代大学生来说,初入社会很少有成为一个合格的PM所需的能力,那么我们应该从哪方面开始,又应该如何培养这些能力呢?
PM除了管理以外,常常会兼任两种角色——设计者和开发者。通过一学期对软件工程课程的学习,我认为一个合格的PM需要具有以下品格:
(1)在学习理论知识的同时不断加强实际操作,有效地将理论知识转化为生产力需要的是长期的经验积累。
(2)需要拥有开阔发展的思维以及对时代的适应性。真诚待人,这是每一个管理者都应该具备的品质。
(3)血气之怒不可有,义理之怒不可无。PM必须有勇气对不合理的要求说“不”,必须敢于维护团队的利益。
(4)PM必须具备一定的抗压能力,当软件项目遇到重大问题时,PM应该以沉着冷静的心态处理问题,领导团队成员克服困难。
(5)要想成为一名真正合格的PM,努力不可或缺。
二、总结自己在项目的 可行性分析/需求分析/软件设计/实现/测试/项目验收/中学到了哪些“知识点”。
-
1、可行性分析
使用NABCD方法对团队初选项目进行可行性分析,用最小的代价在最短的时间内确定问题是否可以解决,是否值得去解决。
-
2、需求分析
使用Visio UML图形绘制工具绘制用例图,与多人交流并共享;通过问卷调查分析用户的需求。一个项目开发的最终目标,是为了让用户使用,因此必须清楚的了解用户的真实需求,比如用户需要的功能,想要看到的界面等。一个靠谱的需求分析能够减少项目开发的时间,提高项目开发的效率。
-
3、软件设计
软件设计包括概要设计、系统设计以及详细设计。在一个软件项目的开发过程中,详细设计部分是整个设计部分的重中之重,直接关系到项目能否实现,但详细设计能否顺利完成又取决于之前所做的准备工作。此外,在软件设计中学习了许多设计工具以及软件体系结构、软件设计模式、C/S与B/S结构以及异同、MVC设计模式等概念。
-
4、实现
配置项目集成开发环境;认真编写代码并不断调试;wbs的任务分析和燃尽图。
-
5、测试
软件测试:对软件进行测试并发现错误,评估软件质量。
主要的软件测试方法有:
(1)静态测试方法 (2)动态测试 (3)黑盒测试 (4)白盒测试
-
6、项目验收
在项目验收过程中,详细地为用户讲解我们所开发的系统的功能,积极地与用户进行沟通,让用户真正了解我们开发的项目。
三、结合个人项目/结对编程/团队项目的个人经历,谈谈心得。
-
1、个人项目
通过个人项目的实施,我深刻认识到自己的相关专业知识掌握的很不够,也发现了学习和实践中的不足。软件工程中需求分析的不充分,软件开发方法的不恰当这些都是需要以后改进和学习的,软件开发中的各种文档编写能力还需要提升,在以后学习和实践中认真总结和完善,参考他人的软件工程项目,体会优秀软件工程的思想。在做任何事情的时候都要有觉得是站在巨人的肩上,而不是重复的生产车轮的思想来做事情。总的来说,本次个人项目使我对软件开发有了进一步的认识,学到了很多知识。
-
2、结对编程
在结对编程时具体的实现过程中遇到了很多问题,通过结对两人一起讨论,相互协助,反复修改反复测试,最终都解决了这些问题。通过结对项目,自己的个人能力有所提升,同时明白了两人合作的重要性以及1+1>2的深刻内涵。此外,还体会到了结对编程可以提高设计质量和代码质量以及两个人合作解决问题的能力,同时可以互相交流学习经验,提高自己的整体水平。“一千个读者眼中就有一千个哈姆雷特”,通过两个人思想的交融,最终的成果才会显得更加有意义。
-
3、团队项目
通过本学期团队项目的设计实现,我对所学的知识有了进一步的理解与掌握,认识到了课本所学知识与实际应用的差异。只有通过具体项目的实践,才能更好的掌握所学知识,并针对具体的问题灵活的变通处理。此外,我深刻认识到一个项目的实现最重要的是需求分析而不是代码的实现。只有合理的分析设计,代码实现的过程中才不会遇到问题。这期间学习到了HTML网页的一些基本语法和编写方法,UML用例图的绘制,软件工程开发的一些基本工具的使用,软件开发文档编写的方法和实践,人机交互应用程序开发时人机界面的设计,人机对话的实现,人性化的界面设计等。本次项目设计也使认识到了团队协作的重要性,一个人的能力毕竟是有限的,而大家的力量无穷的。此外,要对别人的经验教训加以总结,学习、参考和引用别人的先进研究成果,要有重视团队协作以及虚心学习的精神。在这个期间,也体会到了大家同心协力去做一件事的快乐。
四、总结这门课程的实践总结和给你带来的提升。
-
1、统计在软件工程实践中,你完成了多少行的代码;
在软件工程的实践中,大约完成了3000多行代码。
-
2、你在软件工程实践的各次作业分别花了多少时间?(做一个列表)
任务 | 花费时间(h) |
---|---|
实验 一 软件工程准备 | 4h |
实验 二 软件工程个人项目 | 15h |
实验 三 作业互评与改进 | 12h |
实验 四 软件工程结对项目 | 8h |
实验 五 软件工程准备 | 5h |
实验 六 团队项目选题 | 7h |
实验 七 团队项目原型设计与开发 | 6h |
实验 八 基于原型的团队项目需求调研与分析 | 15h |
实验 九 团队项目需求改进与系统设计 | 20h |
实验 十 团队项目系统设计与详细设计 | 18h |
实验 十一 团队项目设计完善&编码 | 30h |
实验 十二 软件测试与Alpha冲刺 | 15h |
实验 十三 Beta冲刺与团队项目验收 | 10h |
实验 十四 团队项目评审&课程学习总结 | 5h |
-
3、哪一次作业让你印象最深刻?为什么?
我印象最深刻的是实验十一 :团队项目设计完善&编码和实验十二:软件测试与Alpha冲刺。由于多次放假导致软件工程课程耽误,因此我们只有一周的时间去完成编码和测试。在编写代码的过程中,由于团队成员编写代码能力较弱,因此进度比较缓慢。期间遇到了很多问题,比如页面不跳转;合并各个模块代码时接口不统一,变量名不一致等。在连接数据库时,由于电脑的环境配置不合适,因此也进行了多次尝试。总之,通过这次作业,深刻地认识到了团队合作以及虚心请教他人的重要性。
-
4、累计花了多少个小时在软件工程实践上?平均每周花多少个小时?
家教管理系统从最初定题到期末验收,累计共花费300个小时,平均每周13个小时。
-
5、你学习和掌握的新语言、新平台;
语言: 编写Java语言的水平有所提高;熟练了HTML网页的一些基本语法和编写方法;MySQL数据库。
新平台:博客园、Markdown、GitHub、中国大学慕课、leangoo看板、雨课堂、墨刀的使用、UML用例图的绘制等。
-
6、填写下表,总结一学期的学习中,你学习或使用的软件工程开发工具、开发方法和建模方法;
软件开发工具、项目管理工具 | 软件开发方法 | 软件建模方法 |
---|---|---|
GitHub,MyEclipse,Dreamwearver、MySQL | 面向对象方法,原型方法,结构化方法,Jackson方法 | 面向对象建模,结构化建模方法,数据库建模 |
-
7、其他方面的收获或提升。
(1)学会了撰写博文以及如何开发严格完整的软件项目,编写文档和代码的能力也有所提升。
(2)提高了自己分析问题和解决问题的能力,也认识到了自己需要改正的一些不足。
(3)通过结对项目和团队项目的完成,认识到了团队合作的重要性。
五、你认为目前的课程存在哪些问题,你有什么更好的建议。
- 1、本学期的软件工程课程代老师采用的是反转课堂的教学方式,将课堂交给同学们,这就需要同学们课后进行自学,因此提高了同学们的自学能力以及独立思考问题的能力。反转课堂的教学方式固然是一种很好的提高同学们能力的方式,但是由于同学们习惯了以老师为主的课堂,因此刚开始都不太适应,希望老师在之后的教学改革中,给予同学们一个合理的过渡阶段,让更多的同学适应这种教学方式。
- 2、开发一个软件项目是一个漫长的过程,起初在编写各种开发文档时,同学们对整体流程都比较模糊,不知道接下来该做什么。因此,希望老师在开发软件项目之初为同学们大致讲解整个开发流程以及期间所需要做的各种工作,并要求同学们详细记录软件开发的各个阶段需要完成的任务,每完成一项划去一项直到最终完成整个项目开发,以此让同学们对软件开发有一个总体的感受和认识。
- 3、由于大三同学们多数都在为考研做准备,平时还需要考取各种资格证书,但是软件工程的作业每周都需要花费很多的时间去完成。因此希望老师可以减少一些作业量。
- 4、最后,感谢代老师和助教们的严格要求以及认真负责。