软件开发的生命周期,通常由 需求-设计-开发-测试,这几个过程构成。在主流的瀑布开发模式中,为了保证过程执行的规范性与可追溯性,每个阶段我们都需要完成对应的中间交付物-文档。比如,需求,设计文档,然后由QA来进行审计以落实质量保证工作。
但是在实践中,软件QA在做过程审计时,经常会发现研发很多时候都是在补文档,而不是真正按照设计再实现的方式来完成软件开发的。最常见的情况就是,一拿到需求,为了赶进度,直接就开始写代码了,等代码都写完了,因为公司有相应的流程规范要求,QA检查时发现缺设计文档,于是事后就开始补个设计文档交差。当然,还有很多公司的研发人员会挑战软件QA:我们做这些设计文档到底有啥作用呢?写完有谁会看吗?。这时QA往往也不知道该如何回答,因为很多时候,确实设计文档写完基本没人再去看了。总不能说:这是流程规定的吧。这样的显的太不专业了。那么,软件设计文档是不是必须的动作,或者说设计环节是不是一个必备动作呢?
宋老师中级软件质量训练营讲设计质量保证时,也同样有同学提出了这样的问题,相信上过我课后应该能理解了。
为什么需求过后,不是直接开发而是要增加一个设计环节呢?
什么是软件工程?其实很多人并不理解,具体的定义大家自行百度,其本质就是希望用最低成本、可重复过程,不依赖于某个NB的人,开发出符合要求的软件。其中很重要的1条,就是进行专业化分工。
在实际其他工程活动中其实早就存在,比如,建筑设计人员,与施工人员,往往是不同专业人员在完成。在生产制造中,把计划于生产分离出来。这样的调整,实际上都大幅提升了施工与生产的效率与质量。同样,设计与代码实现分离,也是这类思维的体现。
在软件开发过程中,有些大型的复杂软件系统的设计与开发,实际上需要的能力也是不同的。大型复杂软件系统,需要设计人员具备系统抽象能力、复杂逻辑的简化解耦能力、对业务的深刻洞察与理解。而真正的代码实现人员则需要根据设计,完美的实现出代码,不要出错,这要求,逻辑清晰、遵从编码规范、代码的内在质量设计能力。所以,我们会发现很多软件系统架构师,写代码不一定就很擅长。当然,一名优秀的程序员也做不一定就能做好软件架构设计师。
所以,大家可以看到,在大型复杂系统软件中,设计、实现,本身都需要非常专业的,需要不同的技能与知识、经验,因此,设计与实现是无法合一的。同样,这么复杂而规范化的信息要传递、可追溯,这时设计文档的无法少的。
另外,设计本身也是对复杂性进行降解的过程。宋老师在中级课程中讲到软件代码出错的核心,在于复杂性。因此,设计过程实际是可以使的实现人员处理的逻辑复杂度降低,从而降低出错概率;另外,因此对复杂逻辑处理能力的降低,也可以用更低的成本招聘到可替代的人员。这才是企业最关心的核心问题。
有同学可能会说,宋老师,你说的是大型复杂系统的设计,那么对于不那么复杂的系统呢?
宋老师认为,无论复杂与否,设计这个思维过程实际是无法省略的。但是,通过前面分析大家可以知道。如果是简单系统,也就是本身系统的逻辑复杂度就不高,现有的实现人员都能够很好的解决,那么降解复杂度,实际是没有意义或者多余的行为了。而且,设计文档确实存在,写完就束之高阁的情况,那么,还需要些设计文档吗?
宋老师认为,高层设计文档还是需要,细节设计文档就完全可以不用了。我们直白一点说,就是概要设计文档就可以了,详细设计完全可以不用做了。概要设计文档的意义在于,计划与协调,因为一个软件系统是由团队来开发的,各自开发的模块要想能顺利、高效的集成在一起,需要做好顶层的分解还有相互之间接口、数据结构的定义,这个不可裁剪掉的。但针对每个子模块如何做的设计,由于本身就很简单,实现人员可以直接完成,再去写一份以后也不会再看的文档,即使牺牲了效率,对质量本身也没什么意义。
在现实中其实还存在另一误区,就是人岗错配。
很多公司是按照,设计再开发实现的过程去做了,但是发现宋老师上面说的好处好像还是没体现出来啊?这就是中国软件企业常犯的另一个误区。
很多研发leader本身是从NB的程序员提拔起来的,对软件工程的管理其实是没有经验的,认为写代码更有成就感,而且显的更出活。把设计,看成了一件,文案性质的工作。因此,把设计工作安排给新手或者经验水平一般的程序员来做。然后,水平高的就写代码,然后解决、攻关客户处重大问题。
这会导致,新手做设计,自然设计质量不过关,导致后面实现时的问题多,然后真正的技术高手去救火没时间去做设计,然后大家都很忙,但实际工作效率和产出都很低。
其实换一下,让高手做设计,设计质量有保障了,新手做实现,这样通过设计把复杂度降解,新手去做实现也不容易出错了,救火的事就少了,自然效率与产出就大幅提升了。
所以,软件QA人员,真正理解软件设计环节对质量的意义,就能灵活处理和裁剪相关流程,不会僵化去执行过程审计活动。另外,针对研发人员挑战,相信也会回答的更有底气。
另外,相信各位QA人员也能够很好的理解,软件开发过程的,人、流程、工具与技术,铁三角的含义了。仅仅,只有软件开发流程,但是没有按流程设计的核心逻辑去匹配对应具备知识、技能的人员,软件质量还是没法提升的。
因此,我们在谈到过程符合度的时候,一定要注意,过程符合,包含的含义是,按流程程序做的,每个动作都是由具备匹配能力的人做的,这些人采用了正确的工具与技术。而不仅仅是这件事按流程步骤做了。
希望,这篇文章对各位QA从业者有所帮助,当然也算是给软件质量中级班学员问题的详细解答。
-End-
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!