2010年4月24日星期六

一个软件缺陷的来龙去脉


背景
P软件主要有两个模块C和M组成。前期发现C模块中的A组件存在问题,所以决定由另一项目组的一名开发发员W来改写A组件,暂称A'组件。
我负责修改P软件,以更换新的A'组件,同时修改若干其他问题。由于旧的A组件在M中所用的功能没有发现问题,所以我没有修改M模块。
我修改了C模块,采用新的A'组件,在未经严格测试的情况下,把P软件部署到了客户现场使用。

问题
由于A'组件未经严格测试,存在缺陷:采用A'组件生成的文件无法以普通方式打开。
而P软件通常并不以普通方式打开A'组件生成的文件,只是在C模块中采用A'生成文件,然后在M模块中通过A组件进行操作,转换为另一格式的文件。
但是在少数情况下,也需要以普通方式打开A'组件生成的文件。
很快,少数情况真的出现了,问题显露了,C模块生成的文件不能以普通方式打开。我确定了这一事实后,开始怀疑在M模块中是否能正确进行转换工作,因为P软件的C和M模块的采用的组件是不同的。
客户暴怒、技术支持愤慨,测试人员紧急测试一番,M模块工作正常,P软件工作正常。

反思
如果C和M模块的A组件被同时替换为A'组件,虽然问题不能避免,但出现问题时,不必考虑由于C和M模块中组件不一致会引起的可能性。
如果P软件经过严格测试,出现问题时,就不会考虑M模块功能是否正常,能确切知道缺陷影响的范围。
P软件对于未经严格测试的A'组件,有测试的义务,因为A'组件本身不是一个项目,只是一个开发人员写的组件。