这个学期除了9月和10月两个月疯狂的学ArcEngine的二次开发包,就是在别的院系那边改一个遗留系统。(该系统用MFC和ACE开发)
遗留系统让人魔性大发:
1:代码极度的混乱
不是一般的混乱。代码被很多人修改过,很多人靠这个不成形的系统毕业(还是硕士论文)。代码没有统一的风格,像aaa,bbb之类的变量名称很常见。代码之间没有空行。网络,显示,算法的代码交织。在刚看代码的初期,很多的注释不是关于代码的解释,而是这段代码的修改人和修改时间。据说这个项目接下来已经三年的时间了,从最初的实验性尝试到现在还能看的作品,经历了许多的累积代码工作者(这些人的工作只是简单的累积代码,不是编程人员或者程序员)。
2:没有模块的概念
整个软件没有架构,没有整体的规划,上面的开会的任务是确定界面,然后实现他们需要的功能。虽然已经过了几年,没有看见一份软件设计的说明书之类的书面说明。
具体到代码,原先的设计竟然可以继承CStatic,弄一个CXXXStatic,然后不分功能的把所有绘制图形的的代码都放于其中。在FormView中拖入几个Static,其类是CXXXStatic,标签页用的是VC++6.0自带的tab,点击不同的tab标签,SW_SHOW或者SW_HIDE这些被拖入的Static控件。
3:功能不成形
这套软件的理论的基础还很新(主要是算法),有些功能还不能确定,国外的莱卡,天宝做的不错,上面下令模仿。其中有一块GIS的内容,原先的开发者们凭自己的GDI技术,弄出来“放大”、“居中”、“平移”,三项功能,这个确实很不错。不过为什么不用成熟的GIS控件呢?因为绘图的代码都在CXXXStatic里面了(那边没人用GIS控件)。
4:很多未知的bug
很多的bug,比如在接受电文的时候,需要进行加密,调试的状态(F5)和Debug(Ctrl+F5)获取的字符的长度是不同的。所以一直在F5的状态下运行软件。寻根溯源,这个问题还是很容易发现的(C++中最难控制的问题之一就是字符)。在发现问题处,有这样的一行代码:k=k-12,作用是截取字符串。12是怎样定下来的,是经过一次次的调试确定的…………
和那边主导该项目的博士闲扯的时候,才知道这个项目最初的版本是某几个学生的毕业设计,整个软件的结构都在那一刻被定性了,没有系统设计人员,没有软件测试人员,除了几个能写点代码的研究生在那边鼓弄。(当然学校中还是有很牛B的人的)
这几年的高校研究生的扩招,使得研究生开始和本科生一样不值钱。“什么东西到批量生产的时候,质量就得不到保证”。考研是二次高考,大三大四一年多的时间都在弄那些东西,英语、数学、专业课没的说,关键是还需要弄Party的政治。痛苦的一年,上了研究生,可以玩了。于是研究生变烟酒生。要做一个东西,不会,网上很多,不会的上网搜,google,百度,山寨。别人有写好的功能代码直接贴过来,于是一直贴,代码没有统一性。最后的作品,功能是有了,但没有扩展性可言,性能得不到保障,后来人再想弄这个的时候就很难下手。
在高校做IT有很多的弊端,研究生的水平并不比出去工作的人水平好。学生对整个系统的把握、分析和思考远不及在企业中的专业人员。很多新的思想和技术不能融入学校的IT。公司企业对其研发的能力超群:关系型数据库是IBM的,微软已经很好的解决了遥感图像道路线提取的问题。高校的话,还是最好能最好自己的本职工作,去做些实际的事情。
如果真要把项目给学生做毕业设计,让他们实现一个功能,成品是个dll就好了。系统架构的设计等问题还是需要专业人士的设计。毕竟一个好的软件架构对今后工作有莫大的好处。
刚接手系统的代码,很痛苦,几次想退出。做了很大修改,代码的提取,模块的分类、设计,以及克服MFC自身带来的难处。幸好,我还有音乐。谢谢许巍和信,我们的生活需要力量。
自己的老板马上回来,要开会说项目的事情,大四那群孩子的毕业设计就要从中弄题目,有机会跟他面谈这个事情。