提问回顾与个人总结
提问回顾与个人总结
项目 | 内容 |
---|---|
北航2020软工 | 班级博客 |
作业要求 | 提问回顾与个人总结 |
我的课程目标 | 学习软件工程相关知识,增强自己的开发能力。 |
个人博客 | 提问博客链接 |
问题解答与分析
老问题
-
关于软件的完美:作者从bug的角度分析了软件好与坏的一些判定,但是从我个人的使用经验来看,是否存在bug其实只是使用体验的一个很基础的标准。对我来言,软件的逻辑结构,界面设计,流畅度都很影响我的使用体验,所以完美究竟该如何理解。同时,如果从这么多主观的方式来评价软件,又会存在不同用户的偏好不同的问题,所以说我们如何有一套客观的标准来指引我们向完美开发。
通过这学期的团队作业,我才认识到,在实际项目中不存在一套唯一的标准,也没有必要建立这样的标准。不同的项目有不同需求,面向不同的客户,不同的开发的资源。因此,我认为在确定标准的时候,更重要的是弄清楚实际的情况,找到最适合自己的方向。
-
作者在讲解单元测试的技巧和作用时,多次强调了单元测试的路径覆盖率:在上上学期的面向对象的课程中,我们尝试过把软件的每一个部分都用严密的逻辑表达确定,并且可以生成自动测试。但是从实际体验上来说,却并不理想,我觉得有以下原因。1. 如果把程序的每个函数都严格的测试,工作量十分浩大,并且不够灵活,比如对程序的架构调整甚至方法的优化,就可能需要重新构建测试。2. 哪怕经过了严格的测试,也不能排除一些逻辑上的错误,通过测试也没有办法从宏观角度检验软件。3. 测试的工具其实有很多不方便的地方,有的东西感觉也不够成熟。综合以上的问题,我对测试的价值,以及需要测试的程度产生了一些怀疑。
根据这次课程的经历,我有了更多的体会。首先,测试并不是一个一成不变的环节。要进行全面的测试,需要耗费的精力非常大,所以业界才会有专门的测试岗位。作为开发,很多时候需要做的只是basic function测试和针对edge cases的测试。
-
关于第四章中提到的“结对编程”:那么如何判断一个团队是处于“磨合阶段”还是说这个团队的人员配置本身真的存在问题呢?
如何判断是否磨合的好,我个人感觉可以从多个方面感受。1. 双方对于项目的理解程度是否接近。2. 两人的开发进度是否接近。虽然说这样的判断并不是特别的严谨,但是实际上两个的合作比团队项目要简单许多,也没有那么苛刻的追求。
-
大部分成功的创新者都不是先行者:确实如作者所说,计算机领域,尤其是IT中,很多先行者都被淘汰掉了。由于互联网天生的互联特性,我们也发现整个行业逐渐出现了几大寡头,如果提出了一些创新,也经常败在这些互联网巨人的资本之下,这是否意味着未来的IT领域,创新者的生存空间在逐渐缩小?
这个问题,是我保留的问题。通过这门课程的经历,我有一个非常深刻的感受,技术不代表一切,我觉得更重要的是分析需求,然后用让用户最满意的方法完成它。创新者或许有很好的技术,或许有好的点子,但是往往都没有沉淀下来把这些做好。
新问题
PM如何在组员人心涣散的时候有效的鼓励团队气氛?同时如果出现个别组员进度落后时是选择主动帮助,还是采取其他措施?
如果一个团队开发项目时对于项目所使用到的技术并不熟悉,同时时间并不允许他们将大量的时间用于开发前的学习中,那么整个开发的流程该如何安排?如果开发时出现了较大的技术问题该如何处理?
学到了什么
需求
对于一个比较大型的项目,我认为这是整个软件开发流程中最重要的一环,直接决定项目的可用性以及合理性。在此阶段需要考虑大量的相关内容,包括具体的实现目标、开发日程、可实现性如何、可使用的资金、人手等大量内容。在我们组的项目中,由于第一阶段需求确立的并不是很好导致开发出的成果并不是很尽如人意。而在beta阶段中吸取了alpha阶段的教训,重新进行了需求分析,有效地推动了后续的开发进度。
设计
在确定了需求之后就要进行整个项目的设计。主要包括3个部分,包括项目规格说明书、开发接口说明书以及分工安排。在beta阶段中,作为PM,我将全部的内容划分成了3个部分分别进行开发。在会议上,我们确定我们的需求,大家在充分的讨论后,把需求写在文档中。PM会把其转化为相应的issues。
实现
在编程的过程中,我们虽然每个同学只需要完成自己的部分,但是实际上,所有都需要对于整体的构架有一定的了解,这样才能达到整个工程的结构。得益于敏捷开发迭代的特性,我们从简单的开始实现,相当于是一个学习的过程,最终大家共同学习,共同完成了这项工程。
测试
由于本项目运行于微信的小程序平台,我们不仅需要对逻辑上的业务复杂,还需要在实际设备上运行。我们从两个方面入手,一方面是我们会让相关的同学从逻辑的角度检测小程序的合理性,另一方面我们会模拟用户,通过手机的客户端来检查我们的程序。
发布
项目的开发的最终目的就是号召用户来使用它。如果推广不到位,那么整个开发过程就像在闭门造车,毫无意义。因此必须积极拓广渠道将所开发的内容推销出去。
维护
项目上线后,需要根据用户反馈积极修复BUG,改善用户体验。另一方面需要不断检查软件的运行情况,避免无法登陆以及数据库丢失等重大问题出现。
理解与心得
个人项目
个人项目的难度并不高,总体上就是编个程序。但由于需要严格遵循软件开发的流程,体验感还是和数据结构中的编程截然不同的。在编程之外,还需要确保程序的模块化、可读性、可扩展性以及通过各种手段确保其正确性。在此过程中我还抛弃了一直使用的clion,学习了visual studio的相关知识。该项目让我意识到软件工程并不只是编程那么简单,需要考虑到的内容还是相当多的。
结对项目
结对项目是在个人项目的扩展。由于我个人项目的可扩展性较好,其实我认为我一个人就能完成所有内容。但由于课程的要求,我和另一位同学组队完成。总体上还是比较顺利的,我负责代码开发部分,他负责进行代码的复核以及测试。在测试过程中他采用的是黑盒测试法,使用.exe文件进行测试。而我作为项目的开发人员进行了一系列的单元测试。在此过程中我感受到了软件开发中1+1>2的力量。由于无法面对面编程,因此体验并不是十分完美,但也还行。
团队项目
在alpha和beta阶段中,我是pm,主要负责任务的分配和文档的编辑。在整个项目中,我花了很多努力和成员交流,沟通,在这个过程中我感觉自己的搜获的还是蛮多。