从整个软件项目开发阶段来看,软件项目可以分为需求、设计、编码、验证四个阶段。设计承接需求分析,基于准确的需求分析,对项目目标进行结构化搭建。设计是用户需求到编码实现的必经阶段,软件项目在设计阶段的禀赋决定了软件项目的资质。设计阶段产生的设计说明书以及设计规范是编码阶段的作业指导,也是测试人员开发测试用例的指导书。好的软件设计不是软件项目成功的唯一条件,但是没有好的设计软件项目肯定无法做好。
一、软件设计的重要性体现在以下几个方面:
1、软件设计是对软件项目质量进行保障的关键步骤。
软件项目的质量与需求分析、设计、编码、验证段这四个阶段的质量之间的关系,可以用C语言表达为:最终的软件质量 = 需求分析质量 && 设计质量 && 编码质量 && 验证质量,这种“与”的关系表明任何一个阶段出现质量纰漏,软件项目的最终质量都无法保障。
2、设计阶段提供的软件表示,使软件项目质量的评价成为可能。
反映软件设计质量的要素有:准确性、稳健性、安全性、通信有效性、处理有效性、可操作性、完备性、一致性、可追踪性、可见性、可扩充性、复用性、模块性、清晰性、自描述性、简单性、结构性、硬件系统无关性、软件系统无关性、文档完备性等。通过这些考核要素对设计阶段质量进行控制,从而达到从项目前端控制软件质量的效果。同时该阶段的设计规范也是进行软件质量评价的参照标准与基本要求。
因此,想做好整个软件项目的质量保障,必须充分重视设计阶段的质量保障工作。山东省软件评测中心作为国内最早一批获得国家实验室认可并取得政府授权的中立的第三方机构,在十余年的软件项目质量服务过程中发现:
二、设计阶段经常出现的质量问题从大的方面看有以下几种原因:
1、需求分析阶段工作不充分
好的软件设计必然基于准确的需求分析,离开正确的需求分析,软件设计就是做得再好,在源头上也是错误的,更无任何意义,有时甚至是南辕北辙。有些软件项目因为工期紧张或乙方软件企业管理不规范,甲方用户人员技术受限或配合不到位或承建方需求分析人员业务、技术经验不足等这样那样的原因,需求调研没有做透,更有甚者基本的业务逻辑还没有完全理清,就匆匆开始需求分析然后又囫囵吞枣的进行自我想象中的架构设计,结果可想而知。
2、设计不充分
有许多软件企业不重视设计阶段的工作,或者略掉设计直接进行编码。这样必然把许多的问题遗留给编码阶段,等写了一部分代码后再后头看,错了,返工……另外,设计人员由于技术欠缺或经验不足,或者对业务理解不够深入,未能充分考虑后期需求变动对设计的影响也是造成设计不充分的一类重要原因。
设计不充分往往导致频繁变更与诸多性能、安全方面的漏洞。在软件项目里,越是在项目前期发现问题,解决成本越低。据相关机构统计,在设计阶段发现偏差比在需求分析阶段发现并修正要高出5 倍,在编码阶段觉察偏差则会提高到10倍,而如果延续到单元测试或系统测试阶段发现设计缺陷修正成本则会提高到20倍。另外,设计人员由于技术欠缺或经验不足,或者对业务理解不够深入,未能充分考虑后期需求变动对设计的影响也是造成设计不充分的一类重要原因。
3、过度设计
与设计不充分相对应的一种情况是设计过度,过度设计一般是由于设计人员在做项目分析设计时,过分的考虑潜在的、未来的以及准备扩展等因素,过度的抽象,过多思考封装、分离解耦,导致太多颗粒单位,太多插件等等,给设计资源造成不必要的浪费,并且可能导致原本可以简单实现的逻辑变复杂,造成系统整体性能的下降与维护成本的上升等等,以至于影响到用户体验或者简直没法用。
上述情况都会造成软件设计质量的下降,那么我们应该如何做好设计阶段的质量保障工作?
三、如何才能做好软件项目设计阶段的质量保障
1、思想上重视
充分认识设计阶段的重要性,从思想上强调设计阶段质量保障工作的必要性与重要性。关于软件设计的重要性前文已从几个方面作了总结,不再赘述。项目团队成员与甲方都要充分理解并一致认同设计规范与设计评审等质量管理措施对整个项目的意义与重要性。
2、项目管理上避免
项目管理是贯穿整个项目生命周期的,80%的软件项目质量问题是由项目管理造成的。软件设计阶段作为软件项目的一个重要环节,要做好质量保障自然离不开好的项目管理。从设计团队组建到角色分工与权责确定,到设计规范的制定与流程梳理,所有这些工作都需要一个好的团队负责人去把控。设计团队负责人还要重视设计评审,通过设计评审不断发现问题,逐步完善细化设计架构与详细设计说明书,作为后期代码实现与测试用例编写的指导。要重视项目经理的作用,项目经理的职责是进行沟通,促进沟通并建立沟通的渠道。只有通过沟通才能在项目成员间建立起认同与理解,从而将设计思路有效实现。
3、引入专业的第三方质量保障服务机构指导
一般的项目建设,乙方自己充当质量保障的角色,部分软件企业为了降低成本,尽可能的减少质量保障环节的资源支出,致使设计质量无法保障,即使有部分软件企业视质量为生命,建立了良好的质量管理体系,但是囿于精力所限或赶工期或质量保障经验上的限制,设计质量也是不能令人满意。而从甲方看,一般囿于人员、技术、精力的限制,甲方很难有精力或技术能力去对项目的质量进行深入的关注。更何况软件本身并不可见,充满复杂的逻辑关系,模块之间的耦合关联度不易把握。第三方质量保障服务机构靠技术与服务来赢得客户信任,因而更加重视项目的质量与最终用户体验。从而会更加专业的对待项目过程中的质量管理。
4、选用合适的设计思想、设计方法
设计开始,在充分了解需求与项目背景的前提下,结合项目情况采用恰当的设计思想与设计方法,从设计的指导思想与方法上避免设计阶段的质量瑕疵。我们在做软件设计时还要根据项目的具体情况与应用场景选用合适的设计思想作指导,选用合适的建模方法帮我们尽快理清系统的业务逻辑并理出思路。
不管采用什么样的设计方法进行架构设计,设计都需要以充分满足项目需求为目的,任何分析与设计方法只有针对具体问题才有实际意义。另一方面要考虑的是,采用的方法要侧重满足项目或产品的质量需求,也就是非功能性需求。确保设计阶段的质量无忧。
从方法学的角度来讲,软件的设计与开发从最初的机器语言-汇编语言发展到面向过程的结构化设计方法,到现在应用较多的面向对象、面向组件发展到面向服务,每一步都体现了不断抽象、更加贴近业务实务的发展趋势。