赞
踩
当开始进行模块开发时,系统负责人会给模块开发负责人描述模块功能与要求,但是此时模块功能与需求一般是比较粗线条和不完备的,例如很多细粒度异常情况处理需求一般系统负责人可能会考虑不到。
模块负责人通过详细设计完成:细化和确定模块的功能(包括异常处理需求)、识别关键问题和实现策略与流程、以及主要静态类和线程结构设计等。
详细设计完成并通过评审之后,模块负责人根据详细设计指导,进行编码并实现模块。
需要指出的是即使详细设计,但一般只是初步设计了主要的类和线程结构,以及一些比较大方面的异常情况处理。虽然可能不同的人完成的详细设计的细致粒度存在差别,即使是设计比较细致的详细设计一般不能到达可以直接根据详细设计自动生成代码的粒度,当然个人认为类和线程结构等实现方面的设计也没有必要太过细致,要把握好度,不要太过也不要不够。因此即使在编码和实现阶段其实也存在大量的设计工作,此时设计的粒度较为细致,一般是类级别的详细设计和编码实现(包括详细划分和确认类的功能规格说明书,并实现类的功能)。
虽然个人认为在详细设计阶段类和线程结构等实现方面的设计不必要太过细致,但是对模块功能规格(包括异常处理需求)的确认和细化一定要尽可能细致和想全。对关键问题和实现策略也一定要尽可能的细致和想全。对实现方面的类和线程结构设计能够想细还是细的为好,即尽量想细一点为好。所谓“谋定而后动”,只有先设计好了,想好了后面才能少出错。
根据上面论述,我们可以得出不管是详细设计还是编码实现都包括两个阶段工作:首先确认和细化功能规格,然后是实现功能规格。对详细设计而言是确认和细化模块的功能规格,并初步设计如何实现模块功能。对编码实现而言是确认和细化各个类的功能规格,然后实现各个类功能,最终实现模块功能。
而导致模块质量不高的主要原因是整个开发过程,没有明确地区分“确认和细化功能规格”和“实现功能规格”两个阶段,很多开发者的开发过程是两个过程混在一起,整个过程属于没有明确方向和不断变化的状态,恶果是导致很多例外情况没有考虑到并进行妥当处理,最终导致大量BUG的出现。具体表现如下:
ü 详细设计时,模块功能需求确认不够细致,甚至是一直到编码实现阶段都是处于模糊状态,导致很多情况没有想到。例如各个对外提供接口的功能细节,特别是在一些异常情况下的返回值细节或者响应细节都不是很明确。
ü 详细设计时,不仔细考虑会存在哪些异常情况,以及设计相应异常处理措施,导致在设计阶段很多异常根本没有考虑。
ü 详细设计时,不识别模块实现中关键问题,导致很多关键实现策略要到编码时才确定,但是由于编码时一般思维焦点是当前类,导致确定实现策略时缺乏全局考虑,同时加上还要考虑如何实现,因此会导致采用不是最优的或者是错误的实现策略。
ü 详细设计时,类、类状态变化、线程结构设计等考虑太粗。由于详细设计时能不考虑具体实现,会忽略一些细节,这样更能集中精力从整体和全局来考虑一些关键的实现策略和以及类和线程结构设计。而实现阶段一般更加关注细节,但只关注当前类细节和局部细节,因此详细设计时类、类状态变化、线程结构设计等考虑太粗会导致这些问题遗留到开发阶段,使得整个编码过程混乱,最终很多例外情况想不到。至少要保证详细设计完成后,模块开发者能在自己大脑里面把模块跑起来。
ü 编码实现阶段,还没有制定清楚每个类、类方法的详细功能规格说明(即要处理哪些情况,异常情况下如何处理等)的情况下,就开始编码实现。
明确区分两个阶段的好处是每次大脑只需要集中精力考虑一个方面问题,这样大脑考虑问题会比较轻松,使得问题能够容易想全,出现纰漏的概率要小一些。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。