个人总结
软件工程个人总结
项目技术总结
所有项目源码:https://github.com/tilmto
在此次软件工程课中共完成了三个项目,分别是文件字符统计、小学生算术软件UI设计和团队项目U-help快递代领app。
文件字符统计项目中,使用的工具是Visual Studio和C++,核心数据结构是 unordered_map() ,这个项目主要考验算法能力,需要递归遍历文件夹对每一个文件进行分析,最复杂的点就是设计统计最高频词组的算法。Windows上和Linux上系统提供的C函数库是不一样的,所以在递归遍历文件夹时需要针对不同系统设计不同版本。另外需要对代码进行黑盒测试和白盒测试,比如一个空文件很可能使代码崩溃,这是需要认真考虑的问题。这个项目增强了我对STL库的使用,也让我对程序可移植性和完备性有了更深的认识。
小学生算术软件UI设计中,使用的工具是QT和C++,这个项目是我第一次完整地设计UI界面,考验的是对QT控件的使用以及界面逻辑的设计。与上一个C++项目不同,QT更加体现出面向对象编程的特点。各种控件的使用方法都很简单,但是想要UI完美得运行不出差错,需要注意很多细节问题,比如控件对象到底建立在堆上还是栈上,以及彼此之间的通信,这些都需要一个完备的界面逻辑去控制,经常新增一个控件和逻辑整个程序就会崩溃,必须完全掌控自己的代码才能及时纠错。这次项目中还有一个重要的问题,就是接口规范,由于一上来缺少统一的接口规范,所有UI与内核的对接都十分麻烦,像我一开始以为所有组都会使用 xml 文件格式来更加规范地对接,所以UI与内核的接口全部使用 xml 解析库,事实上除了我没有人使用 xml ,这让我对接口规范的重要性有了深刻的认识。
U-help快递代领app中,客户端使用了android studio和java,服务器端使用python和flask框架。android端的技术框架十分成熟,其核心是四大组件activity、service、fragment、broadcast,除此以外就是丰富的View控件和功能库。我们的代码结构十分清晰,设计了一系列activity,通过intent与控件点击事件在不同activity之间进行切换,并使用了okhttp3框架与服务器进行通信,将返回的数据通过adapter展示在UI界面上,以此实现MVC模式。在这套核心结构之外就是实现了各种精美的界面功能,比如menu、navigationview等界面工具,并在安大美工同学的帮助下美化界面。服务器端的flask框架也十分清晰,使用json格式传递数据,安卓端发送json字符串到服务器的特定路由上,服务器经过操纵数据库等处理后再以json格式发送回安卓端。
个人经验总结
我觉得我在这门课程中提升最大的就是技术学习能力,以前需要学习新技术的时候总会有些抵触,因为上手速度慢且易出错,而在此次的软件工程课中需要学习大量的新技术框架,这对我来说是一个很好的锻炼。从字符串统计的unorder_map() 到QT库函数再到安卓开发,这个过程中我为了获取所需的技术框架,浏览了大量的博客和官方文档,对于新技术的接受能力越来越强。
随之而来的还有在引入他人代码时候的debug能力。今后在项目中正确使用现成代码是必要的能力,但由于文件配置或者接口问题引入第三方代码后程序经常会出现很多错误,这时需要对配置文件进行修改或者调整源码的结构。比如android studio在引入他人项目代码的时候经常会出现配置错位,包括找不到sdk或者依赖关系错误,这时需要对项目和app的gradle配置文件进行修改,在这个过程中debug能力将会大大提升。
当然,这次课程也让我收获了很多软件工程方面的知识,除了丰富了技术栈,强化了VS、Qt、安卓及服务器的使用,还为我带来了许多实际软件开发的常识。比如需求分析,我始终记得老师在课堂上举的例子,让我意识到有时候技术和市场需求是两回事,解决痛点的技术也可能十分简单,所以需求分析是开发流程中至关重要的一环,分析需求可以用NABCD法,面对动态需求要及时更改功能设计。同时,一个团队项目开发中整个团队的交流沟通、步调一致远比个人的技术能力重要,团队充分的信息交流能够减少许多重复的无用功,能制定出更完备的接口,集体出谋划策优化程序,使得开发过程更加高效。
团队项目总结
这次的团队开发我主要负责安卓端设计,前期完成了安卓端登录注册界面功能以及相应的服务器脚本,并使用okhttp3 框架实现了和服务器的通信。暑期我去了美国加州做量子计算相关研究,主要的代码工作交给了大二的同学们,我协助进行一些debug工作。我觉得我们团队整体上项目完成得较成功,特别是大二的同学在前期技术栈不够全面的情况下,后期承担了主要的代码任务,将界面设计得很漂亮,整个代码结构也较合理。可能美中不足的是,整个项目过程中的规范性并没有做得非常好,特别是前期彼此之间的交流不够充分,后期由于全员投入代码规范性大大增强。今后的开发过程中需要更加严格得遵守规范,认真编写设计文档。
其实上述不足之处是完全可以理解的,毕竟组员来自大二大三不同专业,各有各的事情,比如暑研申请与准备以及实验室筹备文章等对于现阶段的我们更为重要,所以很难真正拧成一股绳,只有到了暑假大家才有相对统一的时间,但也会受到时差之类的干扰(比如在美国的我)。所以建议将软工课程转入小学期,让大家完全投入进项目开发,这样想必会有更大的收获。