1. 概要设计和详细设计怎么写 知乎
撰写的设计文档主要分为:总体概要设计文档 + 详细设计文档,后简称为“概设”+“详设”。
总设和详设都应该包含的部分:
(1) 需求:一般以产品的语言描述,这一块可以拷贝产品需求文档中的story list部分;
(2) 名词解释(可选):非相关领域内的同学需要看到文档需要提前了解的一些概念性质的东西;
(3) 设计目标:又分为功能目标和性能目标,功能目标一般是对产品需求的技术描述,性能目标是根据产品给出的数据对性能进行的评估。一般来说,新服务必须要有性能目标一项,性能目标可能会影响设计方案。
除了都应该包含的部分,总体概要设计一般还包含:
(1) 系统架构:一般来说会有个简单的架构图,并配以文字对架构进行简要说明;
(2) 模块简介:架构图中如果有很多模块,需要对各个模块的功能进行简要介绍;
(3) 设计与折衷:设计与折衷是总体概要设计中最重要的部分;
(4) 潜在风险(可选);
输出总体概要设计的时候,很多方案还是不确定的,需要在设计评审会议上确认。
总体概要设计重点在“方案折衷”,总体概要设计评审完毕之后,此时应该是所有方案都确认了,需要输出各模块的详细设计,详细设计重点在“详细”:
(1)总体概要设计结论汇总(可选):达成一致的结论有个简要概述,说明详设是对这些结论的实现;
(2)交互流程:简要的交互可用文字说明,复杂的交互建议使用流程图,交互图或其他图形进行说明;
(3)数据库设计:这个是应该放在总设还是详设呢?
(4)接口形式:有了数据库+接口+流程,别的同学拿到详设文档,基本也能够搞定了;
(5)其他细节:例如公式等;
理论上输出了详细设计之后,无论谁拿到了这个详设文档,都是能够完成该项目的。
个人实践分享:
一、大图
(1) 大系统或复杂流程,其架构图或者流程图会非常大,经常比A4纸或word的一页大很多,此时不宜在word中直接贴图形,贴了也看不清,建议将图放在wiki上,文档中直接贴链接;
(2) 一定要保存viso或者其他图形的源文件,否则今后改动起来要重画,代价可想而知;
二、设计与折衷
(1) 设计与折衷是总设中最重要的内容,总设评审中,主要就是讨论这些折衷的优劣;
(2) 评审过后,不但要邮件周知结论,还要在总设中进行更新,说明最终决定使用了哪种方案,为什么使用这种方案;根据自己的经验,接手别人的模块、项目,拿到代码和文档,设计方案对我来说完全是个谜!!!
(3) 有时候因为排期或者其他原因,不一定采用了最优的设计方案,此时更应该在总设中记录决策的过程与原因;
(4) 最后,设计折衷是一个很好的自我辩解的机会:因为项目进度,或者历史遗留问题,我不得不采取了一个这样的设计,不要再骂我了。
三、性能目标
性能目标是新模块文档必不可少的一部分,很多项目对性能影响较大的话,也必须撰写性能目标,性能一般来说可能包含以下部分:
(1) 日平均请求:一般来自产品人员的评估;
(2) 平均QPS:日平均请求 除以 4w秒得出,为什么是4w秒呢,24小时化为86400秒,取用户活跃时间为白天算,除2得4w秒;
(3) 峰值QPS:一般可以以QPS的2~4倍计算;
互联网公司,产品迭代块,项目周期长,基本没有“文档”一说,但其实写好文档,对系统和项目未来的维护是非常有帮助的。
2. 系统概要设计怎么写
软件文档中概要设计也称“总体设计”,是开发人员在明确用户需求(要什么)后对系统的一个总体考虑(明确系统目标、设计原则,初步考虑数据库设计和功能设计),国家关于这方面有相关标准(概要设计说明书(GB8567-88))。
在具体实践中可以按下列提纲撰写内容:1.引言1.1编写目的 [说明编写这份概要设计说明书的目的,指出预期的读者。]1.2背景 a.[待开发软件系统的名称;] b.[列出本项目的任务提出者、开发者、用户。
]1.3定义 [列出本文件中用到的专门术语的定义和外文首字母组词的原词组。]1.4参考资料 [列出有关的参考资料。
]2.总体设计2.1需求规定 [说明对本系统的主要的输入输出项目、处理的功能性能要求。包括]2.1.1系统功能2.1.2系统性能2.1.2.1精度2.1.2.2时间特性要求2.1.2.3可靠性2.1.2.4灵活性2.1.3输入输出要求2.1.4数据管理能力要求2.1.5故障处理要求2.1.6其他专门要求2.2运行环境 [简要地说明对本系统的运行环境的规定。
]2.2.1设备 [列出运行该软件所需要的硬设备。说明其中的新型设备及其专门功能。
]2.2.2支持软件 [列出支持软件,包括要用到的操作系统、编译(或汇编)程序、测试支持软件等。]2.2.3接口 [说明该系统同其他系统之间的接口、数据通信协议等]2.2.4控制 [说明控制该系统的运行的方法和控制信号,并说明这些控制信号的来源。
]2.3基本设计概念和处理流程 [说明本系统的基本设计概念和处理流程,尽量使用图表的形式。]2.4结构 [给出系统结构总体框图(包括软件、硬件结构框图),说明本系统的各模块的划分,扼要说明每个系统模块的标识符和功能,分层次地给出各模块之间的控制与被控制关系。
]2.5功能需求与系统模块的关系 [本条用一张矩阵图说明各项功能需求的实现同各模块的分配关系。]2.6人工处理过程 [说明在本系统的工作过程中不得不包含的人工处理过程。
]2.7尚未解决的问题 [说明在概要设计过程中尚未解决而设计者认为在系统完成之前必须解决的各个问题。]3.接口设计3.1用户接口 [说明将向用户提供的命令和它们的语法结构,以及相应的回答信息。
] [说明提供给用户操作的硬件控制面板的定义。]3.2外部接口 [说明本系统同外界的所有接口的安排包括软件与硬件之间的接口、本系统与各支持系统之间的接口关系。
]3.3内部接口 [说明本系统之内的各个系统元素之间的接口的安排。]4.运行设计4.1运行模块组合 [说明对系统施加不同的外界运行控制时所引起的各种不同的运行模块组合,说明每种运行所历经的内部模块的支持软件。
]4.2运行控制 [说明每一种外界的运行控制的方式方法和操作步骤。]4.3运行时间 [说明每种运行模块组合将占用各种资源的时间。
]5.系统数据结构设计 [不涉及软件设计可不包含]5.1逻辑结构设计要点 [给出本系统内软件所使用的每个数据结构的名称、标识符以及它们之中每个数据项、记录、文卷和系的标识、定义、长度及它们之间的层次的或表格的相互关系。]5.2物理结构设计要点 [给出本系统内软件所使用的每个数据结构中的每个数据项的存储要求,访问方法、存取单位、存取的物理关系、设计考虑和保密条件。
]5.3数据结构与程序的关系 [说明各个数据结构与访问这些数据结构的各个程序之间的对应关系。]6.系统出错处理设计6.1出错信息 [用一览表的方式说明每种可能的出错或故障情况出现时,系统输出信息的形式、含意及处理方法。
]6.2补救措施 [说明故障出现后可能采取的变通措施。]6.3系统维护设计 [说明为了系统维护的方便而在程序内部设计中作出的安排,包括在程序中专门安排用于系统的检查与维护的检测点和专用模块。
] 概要设计是一个设计师根据用户交互过程和用户需求来形成交互框架和视觉框架的过程,其结果往往以反映交互控件布置、界面元素分组以及界面整体板式的页面框架图的形式来呈现。这是一个在用户研究和设计之间架起桥梁,使用户研究和设计无缝结合,将对用户目标与需求转换成具体界面设计解决方案的重要阶段。
[1] 概要设计的主要任务是把需求分析得到的系统扩展用例图转换为软件结构和数据结构。设计软件结构的具体任务是:将一个复杂系统按功能进行模块划分、建立模块的层次结构及调用关系、确定模块间的接口及人机界面等。
数据结构设计包括数据特征的描述、确定数据的结构特性、以及数据库的设计。显然,概要设计建立的是目标系统的逻辑模型,与计算机无关。
(1)层次图。层次图用来描绘软件的层次结构。
一个矩形框代表一个模块,方框间的连线表示调用关系。如图,最顶层的方框代表正文加工系统的主控模块,它调用下层模块,完成正文加工的全部功能。
第二层的每个模块完成正文加工的一个主要功能。(2)HIPO图。
HIPO图是IBM公司发明的“层次图加输入/处理/输出图”。层次图加上编号称为H图。
在层次图的基础上,除最顶层的方框之外,其余每个方框都加了编号。层次图中每一个方框都有一个对应的IPO图(表示模块的处理过程)。
每张IPO图应增加的编号与其表示的(对应的)层次图编号一致。IPO图是输入/加工/输出图的简称。
(3)结构图。结构图是Yordon提出的进行软件结构设计的工具,结构图和层次图类似,一个方框代表一个模块。
3. 系统概要设计怎么写
是软件的概要设计么?网上应该到处都有的,我以前也会打过一样的问题给你一个我以前用的吧~概要设计说明书1引言1.1编写目的说明编写这份概要设计说明书的目的,指出预期的读者。
1.2背景说明:a. 待开发软件系统的名称;b. 列出此项目的任务提出者、开发者、用户以及将运行该软件的计算站(中心)。1.3定义列出本文件中用到的专门术语的定义和外文首字母组词的原词组。
1.4参考资料列出有关的参考文件,如:a. 本项目的经核准的计划任务书或合同,上级机关的批文;b. 属于本项目的其他已发表文件;c. 本文件中各处引用的文件、资料,包括所要用到的软件开发标准。列出这些文件的标题、文件编号、发表日期和出版单位,说明能够得到这些文件资料的来源。
2总体设计2.1需求规定说明对本系统的主要的输入输出项目、处理的功能性能要求,详细的说明可参见附录C。2.2运行环境简要地说明对本系统的运行环境(包括硬件环境和支持环境)的规定,详细说明参见附录C。
2.3基本设计概念和处理流程说明本系统的基本设计概念和处理流程,尽量使用图表的形式。2.4结构用一览表及框图的形式说明本系统的系统元素(各层模块、子程序、公用程序等)的划分,扼要说明每个系统元素的标识符和功能,分层次地给出各元素之间的控制与被控制关系.2.5功能器求与程序的关系本条用一张如下的矩阵图说明各项功能需求的实现同各块程序的分配关系: 程序1 程序2 …… 程序n功能需求1 √ 功能需求2 √ …… 功能需求n √ √2.6人工处理过程说明在本软件系统的工作过程中不得不包含的人工处理过程(如果有的话)。
2.7尚未问决的问题说明在概要设计过程中尚未解决而设计者认为在系统完成之前必须解决的各个问题。3接口设计3.1用户接口说明将向用户提供的命令和它们的语法结构,以及软件的回答信息。
3.2外部接口说明本系统同外界的所有接口的安排包括软件与硬件之间的接口、本系统与各支持软件之间的接口关系。3.3内部接口说明本系统之内的各个系统元素之间的接口的安排。
4运行设计4.1运行模块组合说明对系统施加不同的外界运行控制时所引起的各种不同的运行模块组合,说明每种运行所历经的内部模块和支持软件。4.2运行控制说明每一种外界的运行控制的方式方法和操作步骤。
4.3运行时间说明每种运行模块组合将占用各种资源的时间。5系统数据结构设计5.1逻辑结构设计要点给出本系统内所使用的每个数据结构的名称、标识符以及它们之中每个数据项、记录、文卷和系的标识、定义、长度及它们之间的层次的或表格的相互关系。
5.2物理结构设计要点给出本系统内所使用的每个数据结构中的每个数据项的存储要求,访问方法、存取单位、存取的物理关系(索引、设备、存储区域)、设计考虑和保密条件。5.3数据结构与程序的关系说明各个数据结构与访问这些数据结构的形式:6系统出错处理设计6.1出错信息用一览表的方式说朗每种可能的出错或故障情况出现时,系统输出信息的形式、含意及处理方法。
6.2补救措施说明故障出现后可能采取的变通措施,包括:a. 后备技术说明准备采用的后备技术,当原始系统数据万一丢失时启用的副本的建立和启动的技术,例如周期性地把磁盘信息记录到磁带上去就是对于磁盘媒体的一种后备技术;b. 降效技术说明准备采用的后备技术,使用另一个效率稍低的系统或方法来求得所需结果的某些部分,例如一个自动系统的降效技术可以是手工操作和数据的人工记录;c. 恢复及再启动技术说明将使用的恢复再启动技术,使软件从故障点恢复执行或使软件从头开始重新运行的方法。6.3系统维护设计说明为了系统维护的方便而在程序内部设计中作出的安排,包括在程序中专门安排用于系统的检查与维护的检测点和专用模块。
各个程序之间的对应关系,可采用如下的矩阵图的形式;。
4. 如何做概要设计
概要设计的目标是描述软件模块的外观以及处理逻辑。
模块对外暴露的服务接口,以及需要引用的接口,接口标识,接口的访问协议,接口描述都属于模块的外观,其他的模块通过这些接口和模块打交道,自然需要在概要设计阶段对接口做细致的刻画,初此之外,对于关键的模块,外观还应该说明模块的非功能属性,比如并发处理能力,数据吞吐量以及接口调用的反馈时长等等。处理逻辑是指模块从输入到输出的转换过程,描述其转换算法。
无论通过何种图例和表现形式,只要能够清晰地说明模块外观和处理逻辑描述,就是好的概要设计。 概要设计过程一般包括四块内容,这四块内容都是围绕着外观和处理逻辑这两个目标进行。
第一部分是模块划分,把架构设计中划分的业务模块按照开发模式迭代细化,拆分成符合高内聚低耦合的功能模块。第二部分是接口描述,重点要放在刻画模块内外部交互的接口形式。
第三个部分是模块的逻辑描述,最后一个部分逻辑模型设计,包括数据库的逻辑模型设计以及值对象的概要说明。 模块划分 模块划分的粒度很难确定,不同的设计师会用不同的划分策略,相同的一组功能聚集有人会分为2个功能模块,有的人可能划分为4个或者更多。
模块的粒度越大,对模块的维护成本就越大,因为修改模块的任何一个点,都有可能更新整个模块;而且越难以解决模块复杂耦合的问题,随着产品的维护,模块内的耦合会越来越严重,有些是因为新的需求引起模块内联系的增加,而有些是缺少硬约束下采用最直接的方式修改代码造成的。当然也不是模块划分的越小越好,因为小粒度的模块虽然降低了模块自身的维护成本,但过多的模块会增加模块间关系维护的成本以及系统管理的复杂性。
通常来看,模块划分要符合开闭原则和高内聚和低耦合的原则。开闭原则强调的是维护频度不同的功能不要放在同一个模块内,比如有些需要本地化的功能可以通过接口和实现分离的方式划分为业务模块和二次接口实现模块。
高内聚和低耦合的原则强调的是把内部关联紧密和外部交互比较单一的功能划分成一个模块。 同时鉴于模块划分的重要性,建议尽可能把模块划分的工作前移到架构设计阶段,一方面架构设计团队的整体素质比较高,另外一方面架构设计师更能够站在全局的视角合理地划分模块。
接口描述 接口描述应该清晰地说明接口的类型,访问方式,接口的入参和出参。通常在概要设计阶段不考虑物理实现,不需要描述的非常详细,之所以如此关照接口,原因在于通过清晰的接口描述为流程逻辑和后面的详细设计建立一个硬约束。
模块内的数据流和控制流的入口和出口都能限定在这个约束之内,方便评审的时候能及时发现设计中存在的问题。 逻辑描述 逻辑描述的目标是说清楚从输入到输出的转换过程。
根据不同的模块的特点,可以选用不同的描述形式,对于以数据流为主的模块,可以使用数据流图,控制比较复杂的可以使用数据流图或者IPO图,而对于规范使用UML的项目可以考虑使用活动图。 可能有人会很疑惑在设计中没有谈到是用面向对象方法还是结构化的方法,这可是关键的方法论问题。
确实,软件研发的坛子里面除了哪种语言更好的话题以外,最容易挑起纷争的就是结构化分析与设计和面向对象分析与设计之争了。我在这里不做结论,只做一个评说。
结构化分析设计出现的比较早,那时候软件的主要使用场景更多是科学计算或者自动化控制,典型的特点是用户交互界面简单,更多是批处理的作业方式,更多关注程序的处理过程是否正确高效。随着PC机时代的到来,人机交互界面在软件中占有越来越重要的地位,原来的一套软件只有一个操作员,而现在可能有很多的使用者,为了清楚地描述不同人群对软件的诉求,业务用例应运而生,这就是面向对象的起点。
不同的基因决定了他们各擅道场,一个擅长于后台计算的产品设计,另一个长于面向客户服务的产品设计。 在设计中,我们可以根据需求把两者的特点灵活地结合在一起,比如算法密集的处理模块,我们可以采用数据流图,而对于和外部交互比较复杂的模块,可以引入用例图标识模块支持的使用场景。
逻辑模型的设计 逻辑模块的设计主要是数据库的设计和值对象的设计。对于数据库的逻辑模型,可以统一设计,模块中添加引用。
也可以在模块中针对所引用的库表独立描述。这两种方式都可以,如果库表结构比较复杂的建议统一建模,而比较简单的模型可以采用分开描述,提升模块设计的可读性。
数据库建模现在已经比较成熟,这里不再多说。 模块的输入输出,以及中间的数据对象,我们统称为值对象,在概要设计阶段的重点是描述值对象的关键属性。
需要注意的一点是值对象要和处理逻辑对应起来,特别是处理逻辑中的数据流,出口入口数据,都要在值对象上加以描述。
5. 软件概要设计说明书怎么写
通用的软件概要设计说明书国家有标准。例如概要设计说明书(GB8567-88)包括如下内容:
1引言
1.1编写目的
1.2背景
1.3定义
1.4参考资料
2总体设计
2.1需求规定
2.2运行环境
2.3基本设计概念和处理流程
2.4结构
2.5功能器求与程序的关系
2.6人工处理过程
2.7尚未问决的问题
3接口设计
3.1用户接口
3.2外部接口
3.3内部接口
4运行设计
4.1运行模块组合
4.2运行控制
4.3运行时间
5系统数据结构设计
5.1逻辑结构设计要点
5.2物理结构设计要点
5.3数据结构与程序的关系
6系统出错处理设计
6.1出错信息
6.2补救措施
6.3系统维护设计
根据具体项目内容可以有所微调。
6. 概要设计
最低0.27元开通文库会员,查看完整内容> 原发布者:烟枪杆 第4章软件概要设计32313133353236313431303231363533e59b9ee7ad9431333433623735学习本章,我们要考虑以下几个问题:软件概要设计指的是什么?软件概要设计要做的事情是什么?用什么来评价软件设计的技术质量?软件结构优化的准则是什么?如何进行软件概要设计?以上问题就是本章所要讨论的内容。
一、软件概要设计指的是什么?我们知道,软件设计是把一个软件需求转换为软件表示的过程,而概要设计(又称结构设计)就是软件设计最初形成的一个表示(这里的表示是一个名词),它描述了软件的总的体系结构。简单地说软件概要设计就是设计出软件的总体结构框架。
而后对结构的进一步细化的设计就是软件的详细设计或过程设计。本章所学内容主要就是软件的概要设计内容。
二、软件概要设计的基本任务软件概要设计阶段要做的事情是什么呢?总的来看有四个方面:它们是1、设计软件系统结构(软件结构)2、数据结构及数据库设计3、编写概要设计文档4、评审在需求分析阶段,已经把系统分解成层次结构,而在概要设计阶段,需要进一步分解,划分为模块以及模块的层次结构。划分的具体过程是:(1)采用某种设计方法,将一个复杂的系统按功能划分成模块。
(2)确定每个模块的功能。(3)确定模块之间的调用关系。
(4)确定模块之间的接口,即模块之间传递的信息。(5)评价模块结构的质量。
对于大型数据处理的软件系统,还要对数据结构及数据库进行设计。在概要设计阶段,还要编写概要设计文档,我们初学者有一个不是很好的做法,就是在编程序时,往往不注意文档的编写,导致以后软件修改和升。