`
liuwei1981
  • 浏览: 771987 次
  • 性别: Icon_minigender_1
  • 来自: 太原
博客专栏
F8258633-f7e0-30b8-bd3a-a0836a5f4de5
Java编程Step-by...
浏览量:161218
社区版块
存档分类
最新评论

让设计指导而不是操纵开发

 
阅读更多

设计文档与代码实现到底如何才能平衡,设计文档到底有多详细才可以进行代码级别的实现?

 

经历过比较正规的大型软件项目,也参与过开发过程简陋到极致的小型软件项目。对文档的要求是完全不同的。

 

小项目因为工期非常紧张,且客户要求也不多,最后只要有可以正常运行的软件系统即可。项目验收也就是一顿酒席罢了,能省则省,别说文档,甚至源代码都不做任何要求。最多要求有一个操作手册,也好给上级领导交差。

 

正规的大型项目则不同了。对文档要求极为严格,在完成系统的试运行后,进行系统项目的验收,就是主要把精力放在文档的处理上了。各类软件工程文档自不必说,还有各种的项目报告,客户独特要求的文档,移交项目内容清单等等,五花八门,种类繁多,在最后验收阶段,全员皆兵,参与到文档的编写修改洪流当中去了。

 

那么在软件项目开发正式开始前,文档的编写到底需要到什么程度,设计文档到底需要详细到什么程度呢。

 

首先需求文档必须有,也就是需求调研过程决不能跳过。正规的软件项目,需求文档必须完整且通过双方的确认,这是软件项目的基石。虽然总是说,客户的需求不会是一成不变的,需要适应变化,但是实际上项目工期、成本的压力,是绝不容许客户在软件项目开发周期内,随意的变更软件需求的。即使有,也得在需求说明的基础上,有限制的改动,前提是决不能变动了整体软件项目需求文档的基础内容。如果出现颠覆性的变化,只能看是前期需求分析人员的失误呢?还是客户在软件项目理解上出现了根本性的失误,再来决定最后项目的走向了。

 

需求文档也是最后项目验收的基准。在最后验收的时候,软件功能到底完成了没有,完成了多少,是否符合用户的业务需要,性能上是否符合要求,都是依据需求文档来的。一旦双方对软件的结果产生的分歧,最终都会以需求文档作为依据。

 

下来就该是设计文档了。设计文档的编写都是依据于需求文档的。很多时候需求分析以及编写人员,和系统设计以及文档编写人员不是一批人,当然如果是一批人是最好的。即使不是,在进行设计的时候,一定要对需求文档认真阅读,对客户的业务认真理解分析,保证得到正确的设计结果。

 

概要设计文档要保证软件子系统的划分、系统组织结构的划分、整体系统数据流、业务过程的设计的正确性,要以软件实现的角度对客户业务过程完整准确的实现。这点是非常重要的。

 

设计文档,先不讨论它的详细程度,更重要的是,好的设计应该是正确的,而不是精确的。

 

就拿我参与过的一个软件项目来说,当时直接参与到软件项目的开发过程中,对项目整体上还没有什么认识,只是简单的对自己负责开发的模块进行了分析理解,就开始编码,倒是也很顺利的完成了编码工作,也完全符合设计文档的要求。

 

但是就在一个基本业务功能子系统完成之后,在客户确认时候,去遭到了客户的否定。认为该业务功能中,数据处理的业务流程,完全不符合客户提出的需求。于是整个的开发完全终止了下来。

 

代码的实现是完全依照设计文档的,那么到底是设计过程出现问题,还是需求分析调研过程出了问题?

 

既然软件开发停止了,大家的精力都放在了系统功能需求设计和分析文档的阅读理解上,来看倒是是设计过程出现了失误,还是需求分析过程中对客户的业务理解就出现了偏差了。

 

一开始看,系统业务数据结构设计基本上没有什么问题,都是照着客户的业务表单来的。主要是业务功能的业务流程出现了问题,无法应用到用户日常业务的处理中。是这样的,用户的业务数据分为几大类,每天各个部门都需要将业务数据上报到上级单位,进行最后的审核与汇总。

 

但是就是这个上报的方式与时间点,出现了问题。在设计的时候,只是简单的将几类业务数据按照下级单位进行归类处理,统一每天进行上报。

 

但是实际上,这些业务数据上报时间点是不一致的。有的是每天上报一次,有的是每小时上报一次,有的是按照三班倒,每班上报一次。

 

这下就问题大了,不仅业务流程设置上需要调整,整体的业务数据结构也无法应对该业务需要,需要非常大的改动。

 

拿设计文档与需求文档来比较,基本上都对应的上,难道是需求分析过程出现了问题,当时没有深入研究,导致对这个业务点没有任何说明?需求文档的重点放在了业务数据内容与组成结构的描述上了。但是在业务功能说明之前,已经比较醒目的说明了各类业务数据上报时间点的不同了。但是设计的时候,完全忽略了这一点,简单粗暴的以一种方式来对待。

 

最终结果自然是设计的失误,只得重新进行数据库的设计,导致已经开发出的软件完全不符合要求,完全丢弃,重新进行开发。导致最后项目的开发周期超期了。

 

现在返回来看那份设计文档,不可谓不详细,不精确,已经详细到具体业务字段,业务流程实现设计,甚至页面的设计布局,但是这么精确的文档,最终导致了项目的返工和延期,就是因为它只是详细精确的,但却不是正确的。

 

设计满足实现即可,不必过于详细。

 

设计文档给予需求文档。客户的需求在整个软件开发过程中谁也保证不会发生变化,所以,需求的变化必然会导致设计的变化,最终导致代码实现的变化。

 

基于以上原因,我们要保证的是需求分析与设计的结果是正确的,就可以了。只要设计文档可以满足开发的要求,就可以进行开发了。最后开发的结果及时反馈客户,以客户的反馈为标杆,进行功能开发的完善变更。毕竟很现实的情况是,开发工期都很紧张,用户急于看到软件的实现结果,没有那么多的时间用来进行详细设计文档的编写,与客户的沟通互动更为重要。

 

如果设计文档非常详细,但是却和最终实现软件代码对不上,那还不如没有。

 

有个取巧的办法,在软件得到确认后,以软件的最终实现结果来完成详细设计文档的编写,这点是用来完成软件项目验收的,实际上对软件的开发实现没有什么大的帮助。

 

 

0
3
分享到:
评论

相关推荐

    敏捷开发,敏捷开发,敏捷开发,敏捷开发

    - **让设计指导而不是操纵开发**:通过良好的设计指导开发过程,而不是限制开发者的创造力。 - **合理地使用技术**:选择最适合当前项目的技术栈。 - **保持可以发布**:确保每次迭代结束后都有一个可发布的版本...

    高效程序员的10个习惯,希望对你有所帮助

    让设计指导而不是操纵开发 设计阶段应当作为开发工作的指南,而非束缚。高效的程序员应理解设计的目的和原则,灵活运用它们来解决问题,而不是机械地遵循每一个细节。这样既能保证代码的质量,又能促进创新和优化...

    高效程序员的10个习惯

    #### 三、让设计指导而不是操纵开发 良好的设计能够指引开发的方向,避免不必要的重构工作。设计应当灵活适应需求的变化,而不是成为开发过程中的枷锁。 **实施策略**: - **模块化设计**:采用模块化的设计模式...

    汽车操纵动力学(郭孔辉).pdf

    随着计算机技术的飞速发展,通过仿真技术可以预测汽车在各种操纵情况下的动态响应和操纵性能,这对于新车型的开发具有重要的指导意义。在郭孔辉的《汽车操纵动力学》一书中,介绍了如何利用计算机仿真技术来进行汽车...

    dsp集成开发环境ccs开发指南

    《DSP集成开发环境CCS开发指南》是一本针对数字信号处理(DSP)初学者的优秀教程,它深入浅出地介绍了如何使用Code Composer Studio(CCS)这一强大的集成开发环境进行DSP应用程序的开发。CCS是由德州仪器(TI)推出...

    Borland InterBase 7.0 应用开发指南

    Borland InterBase 7.0 是一款高效、轻量级的关系型数据库管理系统(RDBMS),由Borland公司开发,它以其高可用性、强大的性能和跨平台支持而闻名。这款数据库系统在20世纪90年代末期至21世纪初被广泛应用,尤其在...

    数据库设计指南PDF

    《数据库设计指南》是一本深入探讨数据库设计的宝贵资源,主要涵盖了从概念设计到实现的全过程,旨在帮助读者理解和掌握创建高效、稳定、易于维护的数据库系统的关键技术。该压缩包包含了一份PDF格式的详细教程,是...

    Android-这个库让你可以为Android创建一些自定义操纵杆控件

    1. **自定义样式**:允许开发者改变操纵杆的外观,包括背景、大小、颜色、形状等,以适应不同的应用主题和设计风格。 2. **多方向支持**:操纵杆通常支持水平和垂直方向的移动,该库可能提供了处理这两个维度输入的...

    PROE练习材料 CA6140进给箱操纵机构

    "CA6140进给箱操纵机构"则明确了我们将在PROE中模拟设计的对象,CA6140是一种标准的卧式车床,进给箱是车床的重要组成部分,负责控制刀具的进给速度,而操纵机构则是操作进给箱的机械装置。 【描述解析】 "PROE ...

    操纵位图的开发包(78KB)

    标题中的“操纵位图的开发包”表明这是一个用于处理位图图像的软件开发工具包,主要功能可能包括读取、编辑、保存或显示位图文件。位图是计算机图形学中常见的一种图像格式,它存储的是像素信息,可以进行各种图像...

    学习任务五三交通灯操纵系统线路连接与软硬件联合调试单片机应用技术实训指导.pdf

    本文档作为实训指导材料,不仅为学习者提供了详尽的实践指南,还强调了在设计和调试中需要注意的关键点,帮助学习者顺利实现从理论到实践的过渡,最终掌握单片机应用技术。通过这样的实训,学习者将能够更深入地理解...

    载人六足机器人人机功能分配及操纵系统设计.pdf

    通过情景意识原则、人机功能分配以及模糊决策模型等技术手段,提升了机器人的自主控制能力,为未来类似机器人的操纵系统开发提供了宝贵的经验和指导。 此外,这项研究还强调了在机器人技术发展的过程中,人与机器...

    微软环境DB2 UDB 7.1开发指南

    《微软环境DB2 UDB 7.1开发指南》是一本专为在Windows操作系统环境下使用IBM的DB2 Universal Database(UDB)7.1版本进行应用程序开发的技术书籍。该指南详细阐述了如何在微软平台上充分利用DB2的强大功能,为开发者...

    Visual LISP应用程序开发指南——利用AP-API开发高效应用程序.pdf

    3.3 不是为了嵌套而嵌套 44 3.4 隐藏对话框 46 3.5 在对话框中显示幻灯片 47 3.6 获得字符串 49 3.7 获得整型数 52 3.8 获得实数 55 3.9 复选框和单选按钮 57 3.10 列表框和弹出式列表 60 第4章 用activex ...

    软件项目安全开发规范手册

    自定义错误信息可以向用户提供友好的错误提示,而不是显示敏感的系统信息。 **4.3.3. 隐藏用户信息** 在返回错误信息时,不应泄露用户的个人信息或其他敏感数据。 **4.3.4. 隐藏系统信息** 错误信息也不应泄露系统...

    行业资料机电操纵系统剖析与设计课程大年夜功课之一基于MATLAB的直流电机双闭环调速系统的设计与仿.docx

    本文针对机电操纵系统剖析与设计课程的大作业之一,对基于MATLAB的直流电机双闭环调速系统的设计与仿真进行了深入研究,旨在通过理论计算与软件仿真实践相结合,来实现对直流电机精确、快速的控制。 直流电机作为一...

    数据库设计指南(英文).pdf

    根据提供的文件信息,我们可以推断出这是一份关于数据库设计的指南文档,主要涉及数据库设计的基本原则、方法以及相关的法律声明等内容。接下来,我们将从标题、描述、标签以及部分内容出发,详细阐述其中所包含的...

    汽车智能制动系统操纵机构设计与分析.pdf

    【汽车智能制动系统操纵机构设计与分析】 随着汽车电子技术的快速发展,汽车智能化的要求日益提升,其中汽车制动系统是至关重要的部分。线控制动系统作为未来汽车制动技术的趋势,因其结构简洁、响应速度快、控制...

Global site tag (gtag.js) - Google Analytics