阿金的软工实践总结&个人技术博客
这个作业属于哪个课程 | 2021春软件工程实践|W班(福州大学) |
---|---|
这个作业要求在哪里 | 软件工程实践总结&个人技术博客 |
这个作业的目标 |
1.课程回顾与总结 2.个人技术总结 |
其他参考文献 | Mybatis的核心对象及运行流程 mybatis MyBatis 教程 |
课程回顾与总结
以前提问题的博客链接:软工实践寒假作业2/2。
一学期后的问题认知
问题一、仅在必要时,才使用“类”?
- 问题出处:4.3.4如何处理C++中的类中提到,只有在必要的情况下才使用类。
- 自我认知:在c++的学习当中,类是作为一个很重要的知识点进行学习,上课写程序老师也是尽量让我们用类进行书写。根据《构建之法》,c++课程对类的教学投入那么多时间是否必要,而且类与结构体相似,书中也提交能用结构体就不要使用类,是书过于片面还是我的认知有误。
- 寻求解答:类封装很多时候都是为了安全。C++语言中定义一个函数,那么在其他文件中(假定你有很多.c文件)定义的函数是可以访问的。除非把函数定义成static。有了类,只要把函数改成private,那么该函数就只有自己可以访问了,其他文件都访问不了。相当于把自己写的函数保护起来了。类还有作用就是继承。比如汽车和火车可以同时继承于车。这样可以使程序的结构很清晰 至于其他的,类中属性也是很强大的存在。get和set方法等。一个private变量通过get和set方法可以保证其他类可以用该变量有可以保护该变量不被非法访问。
- 目前认知:必要时才用类封装对我来说还是不太能理解,在一学期的软工实践中,我无时不刻都在使用类,在spring boot 框架中对类的使用可是不用类举步维艰,所以我觉得这里说的太过绝对,还有待商榷。
问题二、老板驱动的流程(Boss-Driven Process)引发的思考
- 问题出处:5.3开发流程
- 自我认知:私以为老板驱动的流程不算是一种开发流程,开发流程应该是从需求开始,从程序发布结束。而老板只能算是旁观者,特殊的用户,通过老板的要求进行程序的推进,但推进流程依然按照正常的步骤进行。
- 寻求解答:当软件订单的获得不是主要靠技术实力,而是靠个人关系,或者暗箱操作的时候,老板的能力决定了一个团队是否能获得订单,既然软件的具体功能并不重要(或者哪个团队做水平都差不多),那么老板说做什么就做什么。但这与开发流程是一个事情吗?抱有疑问
- 目前认知:在经受社会摧残后,有一个个人能力出众的老板确实很重要,虽然不太符合开发流程,但是订单什么的由老板获取,说明老板也有很强的个人实力,跟着老板做软件流程也不一定会失败,当然在某些情况下有自己的看法也可以跟老板提出来,以寻求最优解答。
问题三、用户调查问卷如何获得正确的需求?
- 问题出处:8.3 获取用户需求——用户调查
- 自我认知:这种方法是指向用户提供事先规定好的问题,让用户回答。但是,这种情况下用户一般不会专心或者说符合自己内心想法地填写问卷,一般都是随意填写,随便选择。如此收集到的用户需求如何提取出重要的信息,筛选掉杂乱问卷。纵然依照《构建之法》里所说的设计问卷,但还是无法引导用户来正确表达自己内心的需求。
- 寻求解答:明确调查目的和内容,问卷设计应该以此为基础;明确针对人群,问卷设计的语言措辞选择得当;在问卷设计的时候,就应该考虑数据统计和分析是否易于操作;问题数量合理化、逻辑化,规范化。
- 目前认知:在项目开始阶段,我们的软工实践团队作业也进行了用户调查问卷,锁定了大学城的女生群体。当时我们男生还是会认为这个软件可能需求不是那么大,但是在结束后,有一些用户要我们改进算法,升级软件,我就知道,当时的问卷没有错,这个软件有市场,有需求。所以在问卷设计之初,就要有足够大的基数,针对点要明确,这样得到的结果一般不会偏离大方向。
问题四、PM的盛行会导致产品跟不上潮流或者因为过多的调研而导致在一项领域的占领落于下风吗?
- 问题出处:9.3 PM做开发和测试之外的所有事情
- 自我认知:目前软件更新迭代过快,一个新的领域出现到一家独大不过数月之短。若一个PM调研时间过长,讨论过久,是否会错过该软件发布的最佳时间,导致在其他拥有巨大用户的公司的竞争下销声匿迹。例如飞信与微信的竞争,飞信“灰飞烟灭”,微信长盛不衰。
- 寻求解答:随着产业的发展,软件应用的深度和广度、软件的复杂度、软件团队的复杂度都极大地提高了,PM起到沟通、交换、影响、润滑、讨价还价的作用————就像商业社会的金钱一样。
- 目前认知:PM的重要性在这次团队作业中显现的淋漓尽致。抓住痛点,把握大方向。这次的软工实践正因为有我们的目光长远的pm我们才会在这个outfits软件上坚持下来。而且,纵观互联网,后来居上的也不缺来着,在淘宝一家独大时,拼多多悄然问世,现已成为一个庞然大物。正因为有拼多多的pm毒辣的目光,针对便宜的商品,消费较低的人群,才有拼多多的现在。
问题五、对于顺序执行的代码段也有多种组合吗?
- 问题出处:在13.2.2中的代码覆盖率测试中提到不同的代码是否执行,有很多种组合。一行代码被执行过,没有出现问题,并不表明这一行代码在所有可能条件的组合下都能正确无误地运行。
- 自我认知:我所知道的代码除了多线程之外,其他的一般是顺序执行,即使有循环结构,也是一遍一遍顺序执行下去,所以这里所说的一行代码有很多组合是不是有所夸大。
- 寻求解答:不知是我理解有误还是问题太过浅显,通过多种关键词进行检索找不到答案
- 目前认知:目前还是没什么认知,对这块还是知识盲区,代码的运行顺序多种组合,是针对什么而言?
实践中学习知识点
需求阶段
- 在需求阶段,主要还是对产品的分析,看想做的这个软件有无受众,能否实现,做成的效果会是什么样,要有一个未来的展望。在这个阶段,我锻炼了分析需求的能力,同时也编辑了大量文档,对NABCD的掌握也更加熟悉。
设计阶段
- 在设计阶段,我有负责了对数据库的设计,以及对系统接口的设计。在这个阶段,去熟悉了数据库设计的通用规则,符合规范,同时对约束,范式等知识点进行了巩固。之前因为设置外键导致删除或者添加而不成功的现象也得到了解决。在系统接口设计时,同前端组长进行商讨,对接口规范也更加了解,学了spring boot的初级内容,以及对postman的简单使用。
实践阶段
- 在实践阶段,学习了spring boot的使用,包括idea插件的了解,以及xshell的使用,在原本不会使用服务器的我,学会了对linux的配置以及将项目打包到服务器运行。
测试阶段
- 在测试阶段,说实话,测试阶段我参与的不多,主要还是写完代码的单元测试,以及对等价类划分的黑盒测试。测试功能能否实现,因为我主要的需求就是能运行,且运行正确,不出bug,而不是代码优化。
发布阶段阶段
- 在发布阶段,这时候重要的就有代码优化这个内容。此时学了spring boot的面向切面编程,然后把一些能够复用的代码提取出来,成为工具类,使代码简洁。同时,对于反馈回来的bug进行修改与版本迭代。
在个人项目/结对编程/团队项目的心得
个人项目
- 理解:先掌握一些编程基础,以防止在后面的作业中无立足之地。
- 心得:个人项目容易对博客作业的要求产生误解,导致作业做错,而且也没有验证正确性的机会,提交之后要么去再次理解博客,但人会被自己主观印象影响,导致发现不了什么问题。而最后出成绩,又会发现自己明明会做,只是理解出了偏差,导致满盘皆输。所以,个人作业要么有其他人一起互相帮助,但互相帮助容易产生作业相似的情况;要么只能看命,理解对了那就得分,理解错了就没分。希望下一届能有验证正确性的机会,而不是一刀切,毕竟是作业,而不是考试。
结对编程
- 理解:体验配合与沟通能力,两个人能完成,那对团队来说也能完成。
- 心得:结对编程是我决定最合适的一个作业,他考验个人的代码能力,沟通能力,团队荣誉感。在配合中产生摩擦,也能及时得到解决。同时,有人负责一边,会觉得安心,没有那种腹背受敌的感觉。而且对作业的理解,两个人考验互相交换意见,得到一个最好的解决方案,已完成一个优秀的软工作业。
团队项目
- 理解:体验和去公司一般的团队工作,提前适应社会的工作状态。
- 心得:团队项目6-10的人员安排挺合理的,但由于一些同学并没有好的技术支持,而大佬也没有时间去教导“菜鸟”,导致一部分同学只能去做文档工作。所以我认为在这里可以插入一个作业,已提高项目内各个同学对项目技术栈的初级掌握。再者是有的同学要参加考研,所以对项目的热情不是那么大,而作业的安排空隙几乎没有,导致积极性更低,所以希望下一届能有一点点时间放空一下自己,而不是被两件事挤得满满当当,甚至是被一件事挤得满满当当。
个人技术总结
菜狗阿金技术总结博客链接
概述:在准备篇中为自己定制的学习路线其实都有在学习,因为团队作业也是做app端的,所以组里的大佬在我有不懂的地方我会去询问他。在团队开发中,我负责java spring boot写后端接口工作,而这个工作对于我准备篇的技术也有帮助,他让我明白了,android可以调用spring boot 写的接口,这样,android写一些网络编程与前端界面足以。一学期过去了,我觉得收获颇丰,在技术总结中的mybatis操作更让我得心应手。