0.前言
这是公司的年终总结,也是自己这半年来的主要工作,虽然干的不太爽,至少还是有收获的嘛。
1.5100MP全光谱预测需求分析,功能开发,方案优化
工作难度/创新点:
1.近红外光谱建模软件训练集制作,模型搭建,模型训练、评估,数据预测功能移植
2.算法实现从.Net平台移植到Python平台,分离算法和开发职责
3.算法的移植性
1.重构原有代码数据预测,评估模块,理清业务逻辑,完成模块移植
2.使用脚本调用和TCP通讯两种交互方式,使用txt文件实现数据交互,将数据预测,建模,数据分析,自动建模等业务进一步分离到python部分,使用pyqt创建可视化界面
3.建立算法数据分析数据库,方便后续自动建模等业务的数据分析
4.使用策略模式实现不同算法的替换
2.5100MP数据存储查询模块重构
1.分离测量数据和光谱数据,提高查询速度
2.抽象数据查询接口,提炼查询逻辑
3.提炼数据查询逻辑,查询界面
4.重构历史数据查询,核查记录,标定曲线,标定数据,标定曲线等模块
1.找出数据查询的性能优化点(反射赋值多个光谱点花费时间),完成5100测量数据和光谱数据分离,提升查询速度(1000条数据从5000ms提升至300ms)
2.提炼数据查询模块,重建数据查询继承体系,将光谱存储类中光谱点存储属性改为Dictionary<string, List>,增强灵活性
3.优化数据文件存储规则,将谱点图数据按照月份进行存储
4.重构数据查询界面,提炼数据查询基本控件,减少大量冗余代码
3.小型站开发,历史问题排查,现有架构优化
工作难度/创新点:
1.水站平台代码量大,功能模块众多,大量冗余代码
2.历史遗留问题较多,测试人员反映问题众多,很难找到问题点
3.接入设备多,模块之间耦合较大
4.部分功能使用不人性化
5.代码修改后很难验证
1.先理清Data,Timer,Operation三个核心模块,知道程序任务如何编辑,触发,执行。再了解Equipment,Remote,DB,Device,Business等主要几个业务模块,知道程序的主要功能是什么
2.在理清软件主要运行逻辑后,深入研读业务代码,定位当前bug,在修改bug的同时,利用方法提炼,字段封装,抽象业务等手法重构当前部分代码。
3.参与编写数据采集主要流程,定位问题点来自流程还是软件自身
4.清理无用代码,减少开发人员阅读代码难度
5.创建DataExtend模块,增加数据模拟,自定义显示等功能,降低代码验证难度,提高bug排查,联调速度。
4.小型站认证工作
工作难度/创新点:
1.原有212协议模块间耦合严重,发现多个隐藏bug
2.212反控协议指令众多,部分反控指令和现有调用体系冲突
3.如何抽象原有212相关协议的各个业务
1.重构CommandParameter,GBCommand等参数模块,使用特性,反射等技术简化现有代码,提高拓展性,使用单元测试,保证重构过程的可靠性
2.解决定时器多次重复创建隐藏bug
3.分离定时器,数据组帧,发送器,接收器等业务,将212指令实现和指令触发解耦,基于组合优于继承原则,提炼ICommand接口,实现协议和业务解耦
亮点
1.在开发全光谱算法预测模块中,使用Python作为开发算法语言。通过脚本调用或tcp通讯实现算法程序和主程序的交互,使得软件开发和算法开发的职责更加清晰,借助python强大的科学计算库,可以快速,高效地搭建算法服务。
提高了算法人员开发效率,降低了开发人员工作量。
2.在水站小型站开发中,使用重构等相关知识对原有业务代码进行优化,抽象业务接口,分离不同功能模块,提高软件的稳定性
不足和改进思路
1.小型站维护过程中没有考虑平台兼容性的要求,修改了很多平台相关代码,做了很多返工。在以后的重构过程中需要确定代码的所有权,只对自己相关的业务代码进行修改。
2.全光谱算法功能开发过程中没有太多需求反馈,版本迭代太慢。在后面的开发工作中主导算法模块的开发,测试,功能定制。
学习计划
1.继续深入学习C#基础知识,学习wpf相关知识,在小项目中可以应用该技术
2.学习TDD开发流程,在项目中运用该方法,有心得后在部门内开展几次相关培训
3.持续学习算法,设计模式相关知识
发展建议
1.多开展技术交流,提高大家技术水平和软件质量意识
2.拓展现有技术栈,可以考虑wpf,qt等其他桌面开发平台
3.考虑现有便携业务的增长,可以布局安卓端开发,发展kotlin等技术栈