概要设计和详细设计怎么写 知乎
撰写的设计文档主要分为:总体概要设计文档 + 详细设计文档,后简称为“概设”+“详设”。
总设和详设都应该包含的部分:(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倍计算;互联网公司,产品迭代块,项目周期长,基本没有“文档”一说,但其实写好文档,对系统和项目未来的维护是非常有帮助的。
详细设计的方法
传统软件开发方法的详细设计主要是用结构化程序设计法。
详细设计的表示工具有图形工具和语言工具。
图形工具有业务流图、程序流程图、PAD图(Problem Analysis Diagram)、NS流程图(由 Nassi和 Shneidermen开发,简称 NS)。
语言工具有伪码和PDL(Program Design Language)等。
应用软件是怎样设计的?
软件系统的开发是按阶段进行的,一般划分为以下阶段:可行性讨论;需求分析;系统设计(概要设计、详细设计);程序开发;编码,单元测试;系统测试;系统维护。
软件开发过程中要明确各阶段的工作目标、实现该目标所必需的工作内容以及达到的标准。
只有在上一个阶段的工作完成后,才能开始下一阶段的工作。
1.可行性讨论 明确系统的目的、功能和要求,了解目前所具备的开发环境和条件,论证的内容有:① 在技术能力上是否可以支持;② 在经济上效益如何;③ 在法律上是否符合要求;④ 与部门、企业的经营和发展是否吻合;⑤ 系统投入运行后的维护有无保障。
可行性讨论的目的是判定软件系统的开发有无价值。
分析和讨论的内容形成“系统开发计划书”,主要内容有: (1) 开发的目的及所期待的效果; (2) 系统的基本设想,涉及的业务对象和范围; (3) 开发进度表,开发组织结构; (4) 开发、运行的费用; (5) 预期的系统效益; (6) 开发过程中可能遇到的问题及注意事项。
2、系统需求分析 系统需求分析是软件系统开发中最重要的一个阶段,直接决定着系统的开发质量和成败,必须明确用户的要求和应用现场环境的特点,了解系统应具有哪些功能、数据的流程和数据之间的联系。
需求分析应有用户参加,到使用现场进行调研学习,软件设计人员应虚心向技术人员和使用人员请教,共同讨论解决需求问题的方法,对调查结果进行分析,明确问题的所在。
需求分析的内容编写成“系统需求分析报告”。
3.系统设计 可根据系统的规模分成概要设计和详细设计两个阶段。
概要设计包括:① 划分系统模块;② 每个模块的功能确定;③ 用户使用界面概要设计;④ 输入输出数据的概要设计;⑤ 报表概要设计;⑥ 数据之间的联系、流程分析;⑦ 文件和数据库表的逻辑设计;⑧ 硬件、软件开发平台的确定;⑨ 有规律数据的规范化及数据惟一性要求。
系统的详细设计是对系统的概要设计进一步具体化,其主要工作有:① 文件和数据库的物理设计;② 输入输出记录的方案设计;③ 对各子系统的处理方式和处理内容进行细化设计;④ 编制程序设计任务书。
程序说明书通常包括程序规范、功能说明、程序结构图,通常用HPIPO(Hierarchy Plus Input Process Output)图描述。
4、程序开发 根据程序设计任务书的要求,用计算机算法语言实现解题的步骤,主要工作包括:① 模块的理解和进一步划分;② 以模块为单位的逻辑设计,也就是模块内的流程图的编制;③ 编写代码,用程序设计语言编制程序;④ 进行模块内功能的测试、单元测试。
程序质量的要求包括:① 满足要求的确切功能;② 处理效率高;③ 操作方便,用户界面友好;④ 程序代码的可读性好,函数、变量标识符合规范;⑤ 扩充性、维护性好。
降低程序的复杂性也是十分重要的。
系统的复杂性由模块间的接口数来衡量,一般地讲,n个模块的接口数的最大值为n(n-1)/2;若是层次结构,n个模块的接口数的最小值为n-1。
为使复杂性最小,对模块的划分设计常常采用层次结构。
要注意编制的程序或模块应容易理解、容易修改,模块应相互独立,对某一模块的修改应对其他模块的功能不产生影响,模块间的联系尽可能少。
5.系统测试 测试是为了发现程序中的错误,对于设计的软件,出现错误是难免的。
系统测试通常由经验丰富的设计人员设计测试方案和测试样品,并写出测试过程的详细报告。
系统测试是在单元测试的基础上进行的,包括:① 测试方案的设计;② 进行测试;③ 写出测试报告;④ 用户对测试结果进行评价。
6、文档资料 文档包括开发过程中的所有技术资料以及用户所需的文档,软件系统的文档一般可分为系统文档和用户文档两类。
用户文档主要描述系统功能和使用方法,并不考虑这些功能是怎样实现的;系统文档描述系统设计、实现和测试等方面的内容。
文档是影响软件可维护性、可用性的决定因素,有句话讲,系统编程人员的每一张纸片都要保留,所以文档的编制是软件开发过程中的一项重要工作。
系统文档包括:开发软件系统在计划、需求分析、设计、编制、调试、运行等阶段的有关文档。
在对软件系统进行修改时,系统文档应同步更新,并注明修改者和修改日期,如有必要应注明修改原因,应切记过时的文档是无用的文档。
用户文档包括:① 系统功能描述;② 安装文档,说明系统安装步骤以及系统的硬件配置方法;③ 用户使用手册,说明使用软件系统方法和要求,疑难问题解答;④ 参考手册,描述可以使用的所有系统设施,解释系统出错信息的含义及解决途径。
7、系统的运行与维护 系统只有投入运行后,才能进一步对系统检验,发现潜在的问题,为了适应环境的变化和用户要求的改变,可能会对系统的功能、使用界面进行修改。
要对每次发现的问题和修改内容建立系统维护文档,并使系统文档资料同步更新。
软件设计方法有哪些步骤?
概要设计的主要任务是把需求分析得到的系统扩展用例图转换为软件结构和数据结构。
设计软件结构的具体任务是:将一个复杂系统按功能进行模块划分、建立模块的层次结构及调用关系、确定模块间的接口及人机界面等。
数据结构设计包括数据特征的描述、确定数据的结构特性、以及数据库的设计。
显然,概要设计建立的是目标系统的逻辑模型.详细设计是软件工程中软件开发的一个步骤,就是对概要设计的一个细化,就是详细设计每个模块实现算法,所需的局部结构。
在详细设计阶段,主要是通过需求分析的结果,设计出满足用户需求的嵌入式系统产品。
...
软件开发是什么
软件开发的内容是:需求、设计、编程和测试!需求:不仅仅是用户需求,应该是开发中遇到的所有的需求。
比如,你首先要知道做这个项目是为了解决什么问题;测试案例中应该输入什么数据......为了清楚地知道这些需求,你经常要和客户、项目经理等交流。
设计:编码前,肯定有个计划告诉你要做什么,结构是怎样等等。
你一定要按照这个来做,否则可能会一团糟。
编程:如果在项目截止日,你的程序不能跑起来或达不到客户的要求,你就拿不到钱。
测试:目的是让你知道,什么时候算是完成了。
如果你聪明,你就应该先写测试,这样可以及时知道你是否真地完成了。
否则,你经常会不知道,到底有哪些功能是真正完成了,离预期目标还差多远。
软件开发中,客户和开发人员都有自己的基本权利和义务。
客户: 定义每个用户需求的商业优先级; 制订总体计划,包括用多少投资、经过多长时间、达到什么目的; 在项目开发过程中的每个工作周,都能让投资获得最大的收益; 通过重复运行你所指定的功能测试,准确地掌握项目进展情况; 能随时改变需求、功能或优先级,同时避免昂贵的再投资;能够根据各种变化及时调整项目计划; 能够随时取消项目;项目取消时,以前的开发工作不是一堆垃圾,已开发完的功能是合乎要求的,正在进行或未完成的的工作则应该是不难接手的。
开发人员: 知道要做什么,以及要优先做什么; 工作有效率; 有问题或困难时,能得到客户、同事、上级的回答或帮助; 对工作做评估,并根据周围情况的变化及时重新评估; 积极承担工作,而不是消极接受分配; 一周40小时工作制,不加班。
软件开发过程可以包括以下6个阶段:计划对所要解决的问题进行总体定义,包括了解用户的要求及现实环境,从技术、经济和社会因素等3个方面研究并论证本软件项目的可行性,编写可行性研究报告,探讨解决问题的方案,并对可供使用的资源(如计算机硬件、系统软件、人力等)成本,可取得的效益和开发进度作出估计。
制订完成开发任务的实施计划。
分析软件需求分析就是回答做什么的问题。
它是一个对用户的需求进行去粗取精、去伪存真、正确理解,然后把它用软件工程开发语言(形式功能规约,即需求规格说明书)表达出来的过程。
本阶段的基本任务是和用户一起确定要解决的问题,建立软件的逻辑模型,编写需求规格说明书文档并最终得到用户的认可。
需求分析的主要方法有结构化分析方法、数据流程图和数据字典等方法。
本阶段的工作是根据需求说明书的要求,设计建立相应的软件系统的体系结构,并将整个系统分解成若干个子系统或模块,定义子系统或模块间的接口关系,对各子系统进行具体设计定义,编写软件概要设计和详细设计说明书,数据库或数据结构设计说明书,组装测试计划。
设计软件设计可以分为概要设计和详细设计两个阶段。
实际上软件设计的主要任务就是将软件分解成模块是指能实现某个功能的数据和程序说明、可执行程序的程序单元。
可以是一个函数、过程、子程序、一段带有程序说明的独立的程序和数据,也可以是可组合、可分解和可更换的功能单元。
模块,然后进行模块设计。
概要设计就是结构设计,其主要目标就是给出软件的模块结构,用软件结构图表示。
详细设计的首要任务就是设计模块的程序流程、算法和数据结构,次要任务就是设计数据库,常用方法还是结构化程序设计方法。
编码软件编码是指把软件设计转换成计算机可以接受的程序,即写成以某一程序设计语言表示的"源程序清单"。
充分了解软件开发语言、工具的特性和编程风格,有助于开发工具的选择以及保证软件产品的开发质量。
当前软件开发中除在专用场合,已经很少使用二十世纪80年代的高级语言了,取而代之的是面向对象的开发语言。
而且面向对象的开发语言和开发环境大都合为一体,大大提高了开发的速度。
测试软件测试的目的是以较小的代价发现尽可能多的错误。
要实现这个目标的关键在于设计一套出色的测试用例(测试数据和预期的输出结果组成了测试用例)。
如何才能设计出一套出色的测试用例,关键在于理解测试方法。
不同的测试方法有不同的测试用例设计方法。
两种常用的测试方法是白盒法测试对象是源程序,依据的是程序内部的的逻辑结构来发现软件的编程错误、结构错误和数据错误。
结构错误包括逻辑、数据流、初始化等错误。
用例设计的关键是以较少的用例覆盖尽可能多的内部程序逻辑结果。
白盒法和黑盒法依据的是软件的功能或软件行为描述,发现软件的接口、功能和结构错误。
其中接口错误包括内部/外部接口、资源管理、集成化以及系统错误。
黑盒法用例设计的关键同样也是以较少的用例覆盖模块输出和输入接口。
黑盒法。
维护维护是旨在已完成对软件的研制(分析、设计、编码和测试)工作并交付使用以后,对软件产品所进行的一些软件工程的活动。
即根据软件运行的情况,对软件进行适当修改,以适应新的要求,以及纠正运行中发现的错误。
编写软件问题报告、软件修改报告。
一个中等规模的软件,如果研制阶段需要一年至二年的时间,在它投入使用以后,其运行或工作时间可能持续五...
应用软件是怎样设计的?
软件系统的开发是按阶段进行的,一般划分为以下阶段:可行性讨论;需求分析;系统设计(概要设计、详细设计);程序开发;编码,单元测试;系统测试;系统维护。
软件开发过程中要明确各阶段的工作目标、实现该目标所必需的工作内容以及达到的标准。
只有在上一个阶段的工作完成后,才能开始下一阶段的工作。
1.可行性讨论 明确系统的目的、功能和要求,了解目前所具备的开发环境和条件,论证的内容有:① 在技术能力上是否可以支持;② 在经济上效益如何;③ 在法律上是否符合要求;④ 与部门、企业的经营和发展是否吻合;⑤ 系统投入运行后的维护有无保障。
可行性讨论的目的是判定软件系统的开发有无价值。
分析和讨论的内容形成“系统开发计划书”,主要内容有: (1) 开发的目的及所期待的效果; (2) 系统的基本设想,涉及的业务对象和范围; (3) 开发进度表,开发组织结构; (4) 开发、运行的费用; (5) 预期的系统效益; (6) 开发过程中可能遇到的问题及注意事项。
2、系统需求分析 系统需求分析是软件系统开发中最重要的一个阶段,直接决定着系统的开发质量和成败,必须明确用户的要求和应用现场环境的特点,了解系统应具有哪些功能、数据的流程和数据之间的联系。
需求分析应有用户参加,到使用现场进行调研学习,软件设计人员应虚心向技术人员和使用人员请教,共同讨论解决需求问题的方法,对调查结果进行分析,明确问题的所在。
需求分析的内容编写成“系统需求分析报告”。
3.系统设计 可根据系统的规模分成概要设计和详细设计两个阶段。
概要设计包括:① 划分系统模块;② 每个模块的功能确定;③ 用户使用界面概要设计;④ 输入输出数据的概要设计;⑤ 报表概要设计;⑥ 数据之间的联系、流程分析;⑦ 文件和数据库表的逻辑设计;⑧ 硬件、软件开发平台的确定;⑨ 有规律数据的规范化及数据惟一性要求。
系统的详细设计是对系统的概要设计进一步具体化,其主要工作有:① 文件和数据库的物理设计;② 输入输出记录的方案设计;③ 对各子系统的处理方式和处理内容进行细化设计;④ 编制程序设计任务书。
程序说明书通常包括程序规范、功能说明、程序结构图,通常用HPIPO(Hierarchy Plus Input Process Output)图描述。
4、程序开发 根据程序设计任务书的要求,用计算机算法语言实现解题的步骤,主要工作包括:① 模块的理解和进一步划分;② 以模块为单位的逻辑设计,也就是模块内的流程图的编制;③ 编写代码,用程序设计语言编制程序;④ 进行模块内功能的测试、单元测试。
程序质量的要求包括:① 满足要求的确切功能;② 处理效率高;③ 操作方便,用户界面友好;④ 程序代码的可读性好,函数、变量标识符合规范;⑤ 扩充性、维护性好。
降低程序的复杂性也是十分重要的。
系统的复杂性由模块间的接口数来衡量,一般地讲,n个模块的接口数的最大值为n(n-1)/2;若是层次结构,n个模块的接口数的最小值为n-1。
为使复杂性最小,对模块的划分设计常常采用层次结构。
要注意编制的程序或模块应容易理解、容易修改,模块应相互独立,对某一模块的修改应对其他模块的功能不产生影响,模块间的联系尽可能少。
5.系统测试 测试是为了发现程序中的错误,对于设计的软件,出现错误是难免的。
系统测试通常由经验丰富的设计人员设计测试方案和测试样品,并写出测试过程的详细报告。
系统测试是在单元测试的基础上进行的,包括:① 测试方案的设计;② 进行测试;③ 写出测试报告;④ 用户对测试结果进行评价。
6、文档资料 文档包括开发过程中的所有技术资料以及用户所需的文档,软件系统的文档一般可分为系统文档和用户文档两类。
用户文档主要描述系统功能和使用方法,并不考虑这些功能是怎样实现的;系统文档描述系统设计、实现和测试等方面的内容。
文档是影响软件可维护性、可用性的决定因素,有句话讲,系统编程人员的每一张纸片都要保留,所以文档的编制是软件开发过程中的一项重要工作。
系统文档包括:开发软件系统在计划、需求分析、设计、编制、调试、运行等阶段的有关文档。
在对软件系统进行修改时,系统文档应同步更新,并注明修改者和修改日期,如有必要应注明修改原因,应切记过时的文档是无用的文档。
用户文档包括:① 系统功能描述;② 安装文档,说明系统安装步骤以及系统的硬件配置方法;③ 用户使用手册,说明使用软件系统方法和要求,疑难问题解答;④ 参考手册,描述可以使用的所有系统设施,解释系统出错信息的含义及解决途径。
7、系统的运行与维护 系统只有投入运行后,才能进一步对系统检验,发现潜在的问题,为了适应环境的变化和用户要求的改变,可能会对系统的功能、使用界面进行修改。
要对每次发现的问题和修改内容建立系统维护文档,并使系统文档资料同步更新。
转载请注明出处51数据库 » 软件开发详细设计方案
我假装不懂的样子