2.对问题的解答:
提问1:单元测试是怎么实现的?
学了软件工程后知道,代码的终极目标有两个,第一个是实现需求,第二个是提高代码质量和可维护性。单元测试是为了提高代码质量和可维护性,是实现代码的第二个目标的一种方法。单元测试是根据自己的项目划分模块进行测试,粒度的划分一般是以函数和对象的方法为单位。
提问2:有一个疑问就是找到效能瓶颈方法有哪些,哪个是能最好分析和实践的?
问题提出之后有人帮助我找出相关解答,
在《构建之法》这本书的P31提到了两种效能分析方法:一个是抽样,另一个是代码注入。抽样则是通过程序的运行情况,通过记录程序运行在哪一个函数内,待程序运行结束后,就会通过编译环境得出关于程序运行时间分布的大致情况。这种方法的优点是不需要改动程序,运行较快,可以很好的找到瓶劲,缺点是不能得出精确的数据,也不能准确表示代码中的调用关系树。
代码注入则是将检测的代码加入到每一个函数中,这样程序的一举一动都被记录下来,程序的各个效能数据都可以被精确的测量。其缺点是程序的运行时间会大大加长,还会产生很大的数据文件,也相应增加了数据分析的时间,同时,注入的代码也影响了程序的真实运行情况。
所以你说的先用抽样的方法找到效能瓶颈所在,然后对特定的模块用代码注入的方式进行详细分析。即抽样就是找到效能瓶劲的方法,代码注入是对特定模块进行详细分析的方法。下面有个链接是通过个人猜测来判断瓶颈,你可以参考一下哦!https://www.cnblogs.com/yangl794/p/9756352.html
提问3:为什么一定要进行代码复审?
我对这个问题在课程最初的时候有了一定的认识,在学习了软件工程之后,认识到不管多么厉害的开发者都会或多或少地犯一些错误,有欠考虑的地方,如果有问题的代码已签入到产品代码中,再要把所有的问题找出来就更困难了。越是项目后期发现的问题,修复的代价越大。代码复审正是要在早期发现并修复这些问题。另外,在代码复审中的提问与回应能帮助团队成员互相了解,就像练武之人互相观摩点评一样。团队中有新成员加入时,代码复审能非常有效地帮助新成员了解团队的开发策略、编程风格及工作流程。所以代码复审很有必要。
3.知识点:
需求阶段
学习了NABCD分析方法。并且由于是继承项目,我们采用竞争性分析方法,不仅将市面上的类似项目作为竞争对手,还分析了原项目的优劣。
设计阶段
设计要以需求为导向,有些看似技术难度高的功能可能实际上并没有相匹配的需求价值。首先定义典型用户,从而明确需要实现的功能,再对功能细节进行设计。
实现阶段
在实现阶段,开发代码是重中之重,而这时更不能缺少了例会,只有大家及时沟通交流,才能提高效率,如果只是一味的闭门造车,那么不但可能代码冗余(存在冗余的功能),而且甚至可能需要推翻重来,这更是降低了效率。
测试阶段
测试最好在大家写代码的时候就顺便写单元测试,这样到最后测试才能顺利快速地进行。我们也进行了黑盒测试的方式对项目进行测试。
发布阶段
由于时间的问题我们项目没有进行发布。
维护阶段
对于没有测试完善的bug和一些用户反馈的问题,做到及时响应。
4.结合个人项目/结对编程/团队项目的个人经历,谈谈心得
个人项目的实现过程中,多的是由于技术水平的不足而浪费的时间。词频统计的需求实现的时候总是由于自己的能力的不足而无法达到预期的目标,不过都从各个方面得到了解决问题的方法,也还算有些收获。
从结对编程来说,给出来的题目是对以前个人项目的一个精进,我和张琳结对,由于我们两比较熟悉对方,分工比较明确,最终在实现上我们取得了一个不错的成绩,对于有些我们两个都没有掌握的内容,都进行了学习。我发现结对编程的核心在于效率,而为了充分提高效率,结对开发的两个人最好还是要面对面,这样遇到任何问题都能非常及时高效地沟通和解决,在结对的二人进行交接时也能尽量减少不必要的沟通。
团队项目才是软件工程的重头戏,我也担任了团队小组长一职,在整个过程中对于我来说最困难的是就是任务的分配,当老师发布任务之后我就会第一时间的将任务分配下去,而每个人任务量的分配一直是我的一大难题。沟通问题也是一个难题,由于每个人擅长的部分不同,大家都从自己的角度出发谈论一个问题就容易出现意见不一致,但是由于彼此之间都比较了解,很多问题也就迎刃而解了。
总的说来,在软件工程这门课还是有不少收获的,例如MVC框架的熟悉,燃尽图管理,让我对团队开发的流程有了更深入的理解。此外还有团队沟通以及团队展示这些模块,都让我了解到了开发软件的大致流程。
5.总结这门课程的实践总结和给你带来的提升
(1)统计在软件工程实践中,你完成了多少行的代码;
15000多行
(2)你在软件工程实践的各次作业分别花了多少时间?(做一个列表)
(3)哪一次作业让你印象最深刻?为什么?
印象最深刻的就是团队项目立项的那次,因为最初我们的项目不能达到最初的立项要求,后面经过老师的指导之后我们在原有的基础上添加了线下的功能,这也成为了我们项目的一大亮点。
(4)累计花了多少个小时在软件工程实践上?平均每周花多少个小时?
一共14个任务,每个任务平均3-5个小时,有的任务比较多,可能在5小时之上,所有一共大概90个小时,平均每周的话5小时。
(5)你学习和掌握的新语言、新平台;
由于项目开发用到的一些语言我们之前就有学过,所以没涉及到新的语言。平台的话,www.leangoo.com是我新接触的一个管理项目的一个平台。
(6)填写下表,总结一学期的学习中,你学习或使用的软件工程开发工具、开发方法和建模方法;
软件开发工具、项目管理工具 | 软件开发方法软件建模方法 |
---|
eclipse、墨刀、Visio、在线作图工具ProcessOn、www.leangoo.con等 | 原型开发方法,面向对象的软件开发方法等 | 数据库建模、面向对象建模(用例图、类图、包图、流程图、时序图等) |
(7)其他方面的收获或提升。
在团队开发的过程中,我觉得收获最大的就是懂得团队之间的沟通,懂得在自己不懂的情况下要怎样去弥补,这些是比知识还要宝贵的收获。
6.你认为目前的课程存在哪些问题,你有什么更好的建议。
我觉得这门课程的实践性很强,安排的上机时间太少,应该再这个基础上能再加两节上机课就好了,这样我们遇到的问题既能得到及时的解决,而且也不会太占用学生的课余时间。