----
我一年来的工作和体会:
关键词:理论、实践、商用系统、人际
(一)对比:真实项目vs实验室模型
作为一个做技术的,经常思考沉淀才有醒悟,裹脚于技术中,看不到应用的前景,不是什么好事。
现在列出我的想法如下:
1)真实项目中,甲方、乙方按着合同行事。实验室项目无非学生按着老师想法实现,具体质量难保证。
在软件设计原则中,对应有dbc (design by contract)的说法。这句话的翻译,我认为,约定的做好,没有要求的就不做。
既然是约定,就要把基础功能先实现,附加功能后实现,不要求的功能不实现。
很多时候,我们学生在实现时,抓不到主线,在边角,在不要求的功能上耽搁很多时间。
2)真实项目上线就像上战场,实验室项目上线很多时候走过场。
没有经历过“智能电网-220kv变电站网络管理系统”的上线,我不会知道,
项目上线是门功夫活。
项目整个过程中的需要单人管理代码版本,
项目上线前3天的基线版本最后不能变,且该版本要严格经过测试。
项目上线是乙方对甲方的演示过程,整个演示过程需要充分体现自己的工作点。
项目上线中不免出现问题,要提前准备好相应的应对措施。
3)要明确实验室的环境和 项目真实上线环境的区别。
很多时候,我们研制的项目所需要的客观环境不能一一满足,比如一套上百万的设备不可能直接搬到学校。
我们只能在实验室自己模拟,既然还是模拟,设计出来的产品必然跟真实有差距。
针对这方面问题,要努力跟甲方沟通,要尽量减少设备等因素对项目研制的干扰。
并且在上线前,充分估计下每个功能点在实测时需要的数据。一句话,上线后的数据会说话,要抓住这个数据和结果来优化项目。
(二)论商用系统的高可靠性和稳定性。
跟一些金融做it的同学打过交流,他们做的技术往往不是最新的,但往往是最稳定的,
拿最近做的项目来说,“智能电网-220kv变电站网络管理系统”(后称nms),此项目的要求就是高可靠性和稳定性。
为了达到这一点,我们在项目中实施了压力测试。具体方法如下:
1)产生5000次随机点击,1秒钟一次,看界面是否正常响应、响应速度、系统资源消耗。
nms第一版经受住100次就僵住了,经查有控件的组合没有实现对应的逻辑,
还有些事件响应需要等待,比如拓扑发现时至少需要10秒钟以上,在该段事件内要用同步变量禁止所有事件的响应,
改版后的第二版经受住1000次,整个系统就反应慢了,经查nms
分配的有些对象必须要推出程序时才释放。简言之,分配内存的方案有问题。
我们从以下解决:
一次性分配足够的内存,避免过多的系统调用,
把需要重用的部分缓存起来,
再次改版,5000次随机点击可以通过,但有时不稳定,我们进入系统稳定性测试。
整个稳定性测试,我们主要的内容是,设计尽量多的测试覆盖,抓住异常并处理。
比如:网络连接异常,分配内存异常等等。
---------------简化版 总结。
我一年来的工作和体会:
一)对比:真实项目vs实验室模型
1)真实项目中,甲方、乙方按着合同行事。实验室项目大多数是学生按着老师想法实现,难保证具体质量。
2)真实项目上线就像上战场,实验室项目上线很多时候走过场。
项目上线要把握至少3点:版本控制,功能点测试、上线应急处理方案等
3)要明确实验室的环境和 项目真实上线环境的区别。
简言之,充分估计环境差别,努力在实际环境中抓取数据来健壮自己的系统。
(二)实践系统的高可靠性和稳定性。
以“智能电网-220kv变电站网络管理系统”为例,
此项目的要求就是高可靠性(7*24小时运行)和稳定性(系统内存10m以内)。
为了达到这一点,我们在项目中实施了压力测试和稳定性测试。
关键点有:量化系统短板,优化系统瓶颈,保证系统主要数据的稳定可靠。
如上,是一年来技术上的一些想法。
具体方法如下:
1)系统保证90%事件响应在20s内响应,如果超过20s不响应,会保存相应结果并自动重启程序。
2)不仅测试单个控件点击、测试单个控件连击(1s一次,连续100次),多个控件组合点击(尤其是有相关顺序的)
3)当一个需要长时间响应的事件发生时,要禁用其他所有的事件响应
4)系统的内存分配在1000次-5000次随机点击时,内存保证在10m以下。内存分配方案自己定制。
5)系统的瓶颈部分,比如作图环节,考虑缓存,减轻作图压力。
如上,仅仅是项目实践中的一些想法。