对第一次作业疑问的解答
- 问题1:单元测试的编写者
我在团队项目的两次迭代中分别处于两个不同的团队,都参与到了单元测试的编写,但在两个团队中所担任的任务不同,对于单元测试的编写者也就有了新体会。在第一个团队中我作为后端开发人员,对于自己所写的API接口编写了单元测试,主要目的为验证接口功能的正确性,因为此时的项目已经不再是原来程序设计课或数据结构课上编写的作业小程序,不能通过控制台输入输出来验证正确性,很多情况下要和前端交互数据才能实现功能,而此时通过编写单元测试代替前端提供数据的方式就十分的便捷有效,可以快速验证自己所想功能是否正确实现;而在第二个团队中,我作为专门负责测试的人员,也编写了不少的测试代码,但却没有细致到去为每个后端的接口都编写测试,更多的工作重心则是放在了前后端的有效对接以及各个模块的协作性测试上。
总的来说,单元测试的编写者和所需测试所处的层次有着较密切的联系,处于较低层的时候,由代码作者编写单元测试可以更快捷便利地验证自己所想功能,而涉及到较高层次,需要对大模块间的对接进行测试的时候,由专门的测试人员来负责,可以更好地实现对于项目的整体把握。
- 问题2:goto语句的使用规范
经过一学期的课程之后,我发现其实这个问题完全没有提的必要,在这门课刚开始的时候,我的思维尚停留在使用C++或Java编写命令行交互程序阶段(即之前的数据结构课和面向对象课),并没有真正的"软件开发"经验,所以对于之前强调的有关开发语言的注意事项比较在意,但实际上现在回头来想,软件开发所使用的编程语言已经不再只有最基础的C语言,更为普遍的是以Python、Java等为基础的高级开发框架,所以在实际开发过程中基本上都不会用到goto语句。就算是真的要使用,我再次给出的答案也是但用无妨,因为最开始时老师教学给出避免使用goto语句的忠告可能只是减少我们新手在理解上的复杂度以及避免可能会遇到的问题,当理解和掌握程度达到一定层次时便能很好地对goto语句的使用进行控制,为了实现所想的功能使用goto是没有任何问题的。
- 问题3:结对编程的潜在问题
由于本次的结对编程对象是比较熟悉的同伴,所以对于整个结对编程的过程还是比较满意的,并未出现之前提问时所想到的各种潜在问题,双方有时出现争执,但并不会较为严重地阻碍项目进度,而且相互交流在很大程度上拓展了开发思路,两个人之间所掌握知识和信息的共享可以很快的解决编程过程中遇到的大多数问题,同时我们两个人按照书中所提的"驾驶员-领航员"模式,也确实减少了输入代码时出现低级错误的可能性,总的来说本次的结对编程达到了教材中所提的效果,和较为熟悉的人进行结对编程应该可以很好的解决我之前所想的潜在问题。
- 问题4:何为真正的敏捷开发
以用户需求为驱动,经过Alpha和Beta两个阶段的迭代,最终各团队所完成的项目成果是比较惊人的,功能全面、界面优美,很好地诠释了敏捷一词,而我在团队项目的两次迭代中辗转两个团队,对于真正的敏捷开发更是深有体会。根据需求将项目分工细化,分成各个功能模块交付给每个开发成员,最后再由专门成员整合测试,责任具体、按照计划每日推进,实现快速开发,同时对于新增需求只需分配人员开发相应的新模块再整合到项目之中,方便迅速,从而做到了我所理解的真正的敏捷开发。
- 问题5:有关PM的疑惑
前面已经提到过,我在团队项目阶段由于转会参与了两个团队的项目,而这两个团队的PM恰好对应着我所提问题的两个方面,第一个团队中PM也是主要的技术开发人员,并且负责着较为关键的开发内容,能够为团队成员解决各种开发上遇到的问题,但是这也就导致了精力的分散,对于项目原型规格的设计不够到位,更新也不够及时,导致前后端开发在对接上出现了较大问题,最后全体成员多次长时间连麦才最终完成了整合;而在第二个团队中,PM则是完全不管项目代码细节,只是负责原型设计和开发任务的划分以及博客的编写,这样每位成员的任务都十分明确,同时接口文档十分完整并更新及时,在对接上十分轻松,但由于PM自身对于代码技术了解不深,故在整体上很难把握项目进度,最终的完成时间比较赶,也出现不少bug打乱了PM原本的计划。总的来说,一个好的PM应该将上述两者中和一下,保证自己一定代码水平以及对于项目整体把控能力的同时,不要过多地深入到开发中去,而是专注于做好原型和文档设计等指明团队整体开发方向以及保证协作性的工作,提高团队凝聚力。
软件工程各阶段所学到的知识点
- 需求
学习到了NABCD需求分析法,明白了需求驱动对于敏捷开发流程的重要意义,将用户需求调研做好做到位是一个好的软件工程项目的重要起点与基础。
- 设计
根据需求进行功能规格设计和技术规格设计,是将用户需求转换为专业的计算机语言的重要一步,也是承接需求和实现两个部分之间的桥梁,好的原型设计对于整个项目的方向性和进度规划有着十分重要的意义。
- 实现
该阶段是整个项目从无到有的最重要阶段,需要团队的每位开发成员都学习相关知识内容并认真完成自己所分配到的任务,同时需要相互之间积极沟通,对于及时解决出现的问题、规划并调整进度有着重要的保障。
- 测试
测试工作是对项目功能实现情况的验证,同样有着十分重要的意义。对于大型的团队项目,需要专门的测试人员负责测试,进行每位开发人员分工的各个模块的整合,可以使项目责任分工更具体,整体测试效果更佳。
- 发布
用户推广毫无疑问是发布阶段最为关键的内容,因为用户数量是一个软件工程项目成功程度的直接反映,同时根据用户反馈可以进一步改进项目功能和提升用户体验,再推广给更多用户,形成良性循环,将项目不断地完善提升。
- 维护
维护阶段除了保证项目功能的正常运行,还有就是对于上面所提的用户反馈进行更项目的进一步完善的过程,需要注意在更新的时候保证原有功能不受影响同时发布相应公告告知用户所更新的内容,实现与用户的积极互动。
个人总结
- 个人项目
个人项目仍为C++简单程序的编写,并未涉及到软件工程项目的层次,但对于软件开发所需的各种工具都有所使用,包括项目管理工具git,单元测试,代码覆盖率,性能分析等,为之后的结对项目和团队项目打下基础,同时也转变了我的相关思维和理解,不再仅停留在编写简单的程序通过控制台查看输入输出的初级层次。
- 结对项目
结对项目的相关体验在上面的问题解答中已经讲过,在此不过多赘述,在个人项目中发生的思维转变在本次结对项目得到了实际实现,UI界面的出现使得程序更加具有一个软件项目的样子,同时对于上面所提到的各种工具的使用理解也是更进一步。
- 团队项目
在两次迭代阶段分别进入了两个团队,并担任了不同职责,可以算是比较全面地体验了软件开发的六阶段,在第一个团队中作为一名后台开发人员,参与了原型和接口文档的设计,并为自己打的后端接口编写了单元测试代码,而在第二个团队中作为单独的测试人员,负责前后端的对接和各功能模块的测试以及在服务器上的部署发布。总的来说,在本学期的软件工程课中,自己的收获还是蛮大的,有在程序编程思维上向应用型软件项目的转变,也有对于各种开发中所需工具的使用理解,还有对于新的开发知识和语言的掌握等等各方各面。最后感谢老师和助教一学期以来的辛苦付出,希望自己能在未来的软件工程之路上能有更好的成绩。
posted @
2020-06-17 22:49
Miracle_dz
阅读(
155)
评论()
编辑
收藏
举报