这次接手的这个项目是我遇到的项目中比较另类的项目之一。这个项目本来是小W负责的,他负责开发了两个模块,后来就不做了,于是乎这个项目就落到我手上了。具体来讲,就是把XXX的课件加入到MTK平台,XXX只提供打包好的lib库和接口头文件;以及一个平台相关函数接口,这个是要我们自己来实现的,像文件操作和内存管理这些部分。
接手的时候,小W告诉我平台相关文件是要我们自己写的,而他已经做了两个模块了,而且也是简单的调用MTK平台的相关函数接口,所以我想当然的认为他写的这个文件是正确的。XXX提供的接口只有不详细的函数说明,和一些没什么用的使用说明。加上对MTK平台不熟。所以刚开始遇到问题,都不知道从哪里解决。
在做阅读王的时候,读课件《简爱》时,列标题的时候老是出现“简爱第一章”中只显示“简爱第”的情况,从一开始我认为XXX读课件时调用的函数EBOOK_ReadBookName出错,通过各种方式来检查,都没有结果,最后打印出它们的十六进制数,发现如果标题有出现0x0(因为是宽字符)的时候,都会出现后面的字显示不出来。当时想这是他们那里实现的功能,错误肯定在他们那里,已是和XXX的技术员讨论,大家一至的看法是在读取出来做复制时候出错。大家围绕这种情况做分析,还是没找到合理的解释。最后一个偶然的机会,我看到平台相关文件关于内存考贝的函数,小W既然用strncpy来实现memcpy的功能。Kao,strncpy实现的是字符串的考贝,在按位考贝过程中,遇到0x0(结束符)就会停止考贝,而不管传入的长度是多少。Memcpy实现按位考贝,不管中间是不是出现0x0。连这么简单的都能搞错,而且既然他做的两个模块不会出问题!
本来这个项目的规划是一个月的时间,我当然是没有反对了,谁愿意自己项目的时间少呢,我私下认为只要用10天就能搞定了。结果单内存问题从检查到解决都用了半个月的时间去了。还好今天是项目计划的最后一天,项目能够完成。
做这种有第三方提供中间件的项目,虽然我不是第一次做了,像以前在X公司里面做项目的时候就遇到,那时是做java的项目,所以可以把.class文件反编译成java文件,看它是怎么实现的。而这次完全是在对着黑盒做开发,根本不确定他们提供的接口是正确的,又对他们的实现原理不知道,是在摸着石头过河,所以遇到了形形色色的问题,对我以后的项目管理倒是有帮忙。
结论:做第三方提供中间件的项目,在项目开始的时候,要与第三方厂商的技术人员讨论他们的实现原理,最少要知道他们各种操作是什么进行的。要求得到详细的说明书或使用手册,搞到一些不明不白的使用手册,被它误导的可能性很大。拿到他们的demo程序,看他们是什么做的,最少也得有单元测试代码,这样对于理解接口有很大的帮助。遇到不知道的问题时,要及时找各方的人员一起讨论,像这种多方开发的东西,谁也没办法保证自己是正确的。跟第三方技术人员有顺畅的沟通方式。
接手的时候,小W告诉我平台相关文件是要我们自己写的,而他已经做了两个模块了,而且也是简单的调用MTK平台的相关函数接口,所以我想当然的认为他写的这个文件是正确的。XXX提供的接口只有不详细的函数说明,和一些没什么用的使用说明。加上对MTK平台不熟。所以刚开始遇到问题,都不知道从哪里解决。
在做阅读王的时候,读课件《简爱》时,列标题的时候老是出现“简爱第一章”中只显示“简爱第”的情况,从一开始我认为XXX读课件时调用的函数EBOOK_ReadBookName出错,通过各种方式来检查,都没有结果,最后打印出它们的十六进制数,发现如果标题有出现0x0(因为是宽字符)的时候,都会出现后面的字显示不出来。当时想这是他们那里实现的功能,错误肯定在他们那里,已是和XXX的技术员讨论,大家一至的看法是在读取出来做复制时候出错。大家围绕这种情况做分析,还是没找到合理的解释。最后一个偶然的机会,我看到平台相关文件关于内存考贝的函数,小W既然用strncpy来实现memcpy的功能。Kao,strncpy实现的是字符串的考贝,在按位考贝过程中,遇到0x0(结束符)就会停止考贝,而不管传入的长度是多少。Memcpy实现按位考贝,不管中间是不是出现0x0。连这么简单的都能搞错,而且既然他做的两个模块不会出问题!
本来这个项目的规划是一个月的时间,我当然是没有反对了,谁愿意自己项目的时间少呢,我私下认为只要用10天就能搞定了。结果单内存问题从检查到解决都用了半个月的时间去了。还好今天是项目计划的最后一天,项目能够完成。
做这种有第三方提供中间件的项目,虽然我不是第一次做了,像以前在X公司里面做项目的时候就遇到,那时是做java的项目,所以可以把.class文件反编译成java文件,看它是怎么实现的。而这次完全是在对着黑盒做开发,根本不确定他们提供的接口是正确的,又对他们的实现原理不知道,是在摸着石头过河,所以遇到了形形色色的问题,对我以后的项目管理倒是有帮忙。
结论:做第三方提供中间件的项目,在项目开始的时候,要与第三方厂商的技术人员讨论他们的实现原理,最少要知道他们各种操作是什么进行的。要求得到详细的说明书或使用手册,搞到一些不明不白的使用手册,被它误导的可能性很大。拿到他们的demo程序,看他们是什么做的,最少也得有单元测试代码,这样对于理解接口有很大的帮助。遇到不知道的问题时,要及时找各方的人员一起讨论,像这种多方开发的东西,谁也没办法保证自己是正确的。跟第三方技术人员有顺畅的沟通方式。