软件开发设计文档怎么写(软件开发项目文档怎么写)
今天给各位分享软件开发设计文档怎么写的知识,其中也会对软件开发项目文档怎么写进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
Java企业软件开发设计说明书如何做
1、组织与风格(1).关键词和操作符之间加适当的空格。(2).相对独立的程序块与块之间加空行(3).较长的语句、表达式等要分成多行书写。(4).划分出的新行要进行适应的缩进,使排版整齐,语句可读。(5).长表达式要在低优先级操作符处划分新行,操作符放在新行之首。(6).循环、判断等语句中若有较长的表达式或语句,则要进行适应的划分。(7).若函数或过程中的参数较长,则要进行适当的划分。(8).不允许把多个短语句写在一行中,即一行只写一条语句。(9).函数或过程的开始、结构的定义及循环、判断等语句中的代码都要采用缩进风格。注:如果大家有兴趣可以到安安DIY创作室博客,有相关说明性的文章和解释。2、注解Java 的语法与 C++ 及为相似,那么,你知道 Java 的注释有几种吗?是两种?// 注释一行/* ...... */ 注释若干行不完全对,除了以上两种之外,还有第三种,文档注释:/** ...... */ 注释若干行,并写入 javadoc 文档注释要简单明了。String userName = null; //用户名边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性。在必要的地方注释,注释量要适中。注释的内容要清楚、明了,含义准确,防止注释二义性。保持注释与其描述的代码相邻,即注释的就近原则。对代码的注释应放在其上方相邻位置,不可放在下面。对数据结构的注释应放在其上方相邻位置,不可放在下面;对结构中的每个域的注释应放在此域的右方;同一结构中不同域的注释要对齐。变量、常量的注释应放在其上方相邻位置或右方。全局变量要有较详细的注释,包括对其功能、取值范围、哪些函数或过程存取它以及存取时注意事项等的说明。在每个源文件的头部要有必要的注释信息,包括:文件名;版本号;作者;生成日期;模块功能描述(如功能、主要算法、内部各部分之间的关系、该文件与其它文件关系等);主要函数或过程清单及本文件历史修改记录等。/*** Copy Right Information : Neusoft IIT* Project : eTrain* JDK version used : jdk1.3.1* Comments : config path* Version : 1.01* Modification history :2003.5.1* Sr Date Modified By Why What is modified* 1. 2003.5.2 Kevin Gao new**/在每个函数或过程的前面要有必要的注释信息,包括:函数或过程名称;功能描述;输入、输出及返回值说明;调用关系及被调用关系说明等/*** Description :checkout 提款* @param Hashtable cart info* @param OrderBean order info* @return String*/public String checkout(Hashtable htCart,OrderBean orderBean)throws Exception{}javadoc注释标签语法@author 对类的说明 标明开发该类模块的作者@version 对类的说明 标明该类模块的版本@see 对类、属性、方法的说明 参考转向,也就是相关主题@param 对方法的说明 对方法中某参数的说明@return 对方法的说明 对方法返回值的说明@exception 对方法的说明 对方法可能抛出的异常进行说明3、命名规范定义这个规范的目的是让项目中所有的文档都看起来像一个人写的,增加可读性,减少项目组中因为换人而带来的损失。(这些规范并不是一定要绝对遵守,但是一定要让程序有良好的可读性)较短的单词可通过去掉元音形成缩写;要不然最后自己写的代码自己都看不懂了,那可不行。较长的单词可取单词的头几发符的优先级,并用括号明确表达式的操作顺序,避免使用默认优先级。使用匈牙利表示法Package 的命名Package 的名字应该都是由一个小写单词组成。package com.neu.utilClass 的命名Class 的名字必须由大写字母开头而其他字母都小写的单词组成,对于所有标识符,其中包含的所有单词都应紧靠在一起,而且大写中间单词的首字母。public class ThisAClassName{}Class 变量的命名变量的名字必须用一个小写字母开头。后面的单词用大写字母开头userName , thisAClassMethodStatic Final 变量的命名static Final 变量的名字应该都大写,并且指出完整含义。/***DBConfig PATH**/public static final StringDB_CONFIG_FILE_PATH =com.neu.etrain.dbconfig;参数的命名参数的名字必须和变量的命名规范一致。数组的命名数组应该总是用下面的方式来命名:byte[] buffer;而不是:byte buffer[];方法的参数使用有意义的参数命名,如果可能的话,使用和要赋值的字段一样的名字:SetCounter(int size){this.size = size;}4、文件样式所有的 Java(*.java) 文件都必须遵守如下的样式规则:版权信息版权信息必须在 java 文件的开头,比如:/** Copyright ? 2000 Shanghai XXX Co. Ltd.* All right reserved.*/其他不需要出现在 javadoc 的信息也可以包含在这里。Package/Importspackage 行要在 import 行之前,import 中标准的包名要在本地的包名之前,而且按照字母顺序排列。如果 import 行中包含了同一个包中的不同子目录,则应该用 * 来处理。package hotlava.net.stats;import java io.*;import java.util.Observable;import hotlava.util.Application;这里 java。io.* 使用来代替InputStream and OutputStream 的。Class接下来的是类的注释,一般是用来解释类的。/*** A class representing a set of packet and byte counters* It is observable to allow it to be watched, but only* reports changes when the current set is complete*/接下来是类定义,包含了在不同的行的 extends 和 implementspublic class CounterSetextends Observableimplements CloneableClass Fields接下来是类的成员变量:/*** Packet counters*/protected int[] packets;public 的成员变量必须生成文档(JavaDoc)。proceted、private和 package 定义的成员变量如果名字含义明确的话,可以没有注释。存取方法接下来是类变量的存取的方法。它只是简单的用来将类的变量赋值获取值的话,可以简单的写在一行上。/*** Get the counters* @return an array containing the statistical data. This array has been* freshly allocated and can be modified by the caller.*/public int[] getPackets() { return copyArray(packets, offset); }public int[] getBytes() { return copyArray(bytes, offset); }public int[] getPackets() { return packets; }public void setPackets(int[] packets) { this.packets = packets; }其它的方法不要写在一行上构造函数接下来是构造函数,它应该用递增的方式写(比如:参数多的写在后面)。访问类型 (public, private 等.) 和 任何 static, final 或 synchronized 应该在一行中,并且方法和参数另写一行,这样可以使方法和参数更易读。publicCounterSet(int size){this.size = size;}克隆方法如果这个类是可以被克隆的,那么下一步就是 clone 方法:publicObject clone() {try {CounterSet obj = (CounterSet)super.clone();obj.packets = (int[])packets.clone();obj.size = size;return obj;}catch(CloneNotSupportedException e) {throw new InternalError(Unexpected CloneNotSUpportedException: +e.getMessage());}}类方法下面开始写类的方法:/*** Set the packet counters* (such as when restoring from a database)*/protected finalvoid setArray(int[] r1, int[] r2, int[] r3, int[] r4)throws IllegalArgumentException{//// Ensure the arrays are of equal size//if (r1.length != r2.length || r1.length != r3.length || r1.length != r4.length)throw new IllegalArgumentException(Arrays must be of the same size);System.arraycopy(r1, 0, r3, 0, r1.length);System.arraycopy(r2, 0, r4, 0, r1.length);}toString 方法无论如何,每一个类都应该定义 toString 方法:publicString toString() {String retval = CounterSet: ;for (int i = 0; i data.length(); i++) {retval += data.bytes.toString();retval += data.packets.toString();}return retval;}}main 方法如果main(String[]) 方法已经定义了, 那么它应该写在类的底部.5、代码可读性避免使用不易理解的数字,用有意义的标识来替代。不要使用难懂的技巧性很高的语句。源程序中关系较为紧密的代码应尽可能相邻。6、代码性能在写代码的时候,从头至尾都应该考虑性能问题。这不是说时间都应该浪费在优化代码上,而是我们时刻应该提醒自己要注意代码的效率。比如:如果没有时间来实现一个高效的算法,那么我们应该在文档中记录下来,以便在以后有空的时候再来实现她。不是所有的人都同意在写代码的时候应该优化性能这个观点的,他们认为性能优化的问题应该在项目的后期再去考虑,也就是在程序的轮廓已经实现了以后。不必要的对象构造不要在循环中构造和释放对象使用 StringBuffer 对象在处理 String 的时候要尽量使用 StringBuffer 类,StringBuffer 类是构成 String 类的基础。String 类将 StringBuffer 类封装了起来,(以花费更多时间为代价)为开发人员提供了一个安全的接口。当我们在构造字符串的时候,我们应该用 StringBuffer 来实现大部分的工作,当工作完成后将 StringBuffer 对象再转换为需要的 String 对象。比如:如果有一个字符串必须不断地在其后添加许多字符来完成构造,那么我们应该使用StringBuffer 对象和她的 append() 方法。如果我们用 String 对象代替StringBuffer 对象的话,会花费许多不必要的创建和释放对象的 CPU 时间。大家可以来安安DIY创作室一起讨论。避免太多的使用 synchronized 关键字避免不必要的使用关键字 synchronized,应该在必要的时候再使用她,这是一个避免死锁的好方法。7、编程技巧byte 数组转换到 characters为了将 byte 数组转换到 characters,你可以这么做:Hello world!.getBytes();Utility 类Utility 类(仅仅提供方法的类)应该被申明为抽象的来防止被继承或被初始化。初始化下面的代码是一种很好的初始化数组的方法:objectArguments = new Object[] { arguments };枚举类型JAVA 对枚举的支持不好,但是下面的代码是一种很有用的模板:class Colour {public static final Colour BLACK = new Colour(0, 0, 0);public static final Colour RED = new Colour(0xFF, 0, 0);public static final Colour GREEN = new Colour(0, 0xFF, 0);public static final Colour BLUE = new Colour(0, 0, 0xFF);public static final Colour WHITE = new Colour(0xFF, 0xFF, 0xFF);}这种技术实现了RED, GREEN, BLUE 等可以象其他语言的枚举类型一样使用的常量。他们可以用 '==' 操作符来比较。但是这样使用有一个缺陷:如果一个用户用这样的方法来创建颜色 BLACK new Colour(0,0,0)那么这就是另外一个对象,'=='操作符就会产生错误。她的 equal() 方法仍然有效。由于这个原因,这个技术的缺陷最好注明在文档中,或者只在自己的包中使用。8、编写格式代码样式代码应该用 unix 的格式,而不是 windows 的(比如:回车变成回车+换行)文档化必须用 javadoc 来为类生成文档。不仅因为它是标准,这也是被各种 java 编译器都认可的方法。使用 @author 标记是不被推荐的,因为代码不应该是被个人拥有的。缩进缩进应该是每行2个空格. 不要在源文件中保存Tab字符. 在使用不同的源代码管理工具时Tab字符将因为用户设置的不同而扩展为不同的宽度.如果你使用 UltrEdit 作为你的 Java 源代码编辑器的话,你可以通过如下操作来禁止保存Tab字符, 方法是通过 UltrEdit中先设定 Tab 使用的长度室2个空格,然后用 Format|Tabs to Spaces 菜单将 Tab 转换为空格。页宽页宽应该设置为80字符. 源代码一般不会超过这个宽度, 并导致无法完整显示, 但这一设置也可以灵活调整. 在任何情况下, 超长的语句应该在一个逗号或者一个操作符后折行. 一条语句折行后, 应该比原来的语句再缩进2个字符.{} 对{} 中的语句应该单独作为一行. 例如, 下面的第1行是错误的, 第2行是正确的:if (i0) { i ++ }; // 错误, { 和 } 在同一行if (i0) {i ++}; // 正确, { 单独作为一行} 语句永远单独作为一行.如果 } 语句应该缩进到与其相对应的 { 那一行相对齐的位置。括号左括号和后一个字符之间不应该出现空格, 同样, 右括号和前一个字符之间也不应该出现空格. 下面的例子说明括号和空格的错误及正确使用:CallProc( AParameter ); // 错误CallProc(AParameter); // 正确不要在语句中使用无意义的括号. 括号只应该为达到某种目的而出现在源代码中。下面的例子说明错误和正确的用法:if ((I) = 42) { // 错误 - 括号毫无意义if (I == 42) or (J == 42) then // 正确 - 的确需要括号9、代码编译1.编写代码时要注意随时保存,并定期备份,防止由于断电、硬盘损坏等原因造成代码丢失。2.同一项目组内,最好使用相同的编辑器,并使用相同的设置选项。3.合理地设计软件系统目录,方便开发人员使用。4.打开编译器的所有告警开关对程序进行编译。5.在同一项目组或产品组中,要统一编译开关选项。6.使用工具软件(如Visual SourceSafe)对代码版本进行维护。如果大家有不明白的可以到安安DIY创作室留言。10、可移植性Borland Jbulider 不喜欢 synchronized 这个关键字,如果你的断点设在这些关键字的作用域内的话,调试的时候你会发现的断点会到处乱跳,让你不知所措。除非必须,尽量不要使用。换行如果需要换行的话,尽量用 println 来代替在字符串中使用\n。你不要这样:System.out.print(Hello,world!\n);要这样:System.out.println(Hello,world!);或者你构造一个带换行符的字符串,至少要象这样:String newline = System.getProperty(line.separator);System.out.println(Hello world + newline);PrintStreamPrintStream 已经被不赞成(deprecated)使用,用 PrintWrite 来代替它。
如何写详细设计文档
在大多数软件项目中,要末不作详细设计,要么开发完成后再补详细设计文档,质量也不容乐观,文档与系统往往不能同步,使详细设计文档完全流于形式,对工作没有起到实际的帮助。
·
详细设计是相对概要设计而言的,是瀑布开发流程的一个重要环节,在概要设计的高层设计的基础上,从逻辑上实现了每一模块的功能,是编码阶段的主要参考资料,是从高层到低层、逐步精化思想的具体实现。
详细设计文档的内容包括各个模块的算法设计,
接口设计,
数据结构设计,交互设计等。必须写清楚各个模块/接口/公共对象的定义,列明各个模块程序的
各种执行条件与期望的运行效果,还要正确处理各种可能的异常。
·
在开发过程中,由需求及设计不正确、不完整所导致的问题是项目进度拖延、失败的一个主要因素,而软件系统的一个重要特性就是需求和设计的不断构建和改进,在写详细设计文档过程中,
详细设计实际上是对系统的一次逻辑构建,可以有效验证需求的完整性及正确性。
如果不写详细设计文档,一般就从概设直接进入编码阶段,这时开发人员所能参考的资料就是需求规格说明书及页面原型、数据库设计等,不能直接进行开发,需要进行信息的沟通,把页面原型不能体现的设计讲清楚,这样既容易遗忘,也容易发生问题,详细设计文档可以作为需求人员、总体设计人员与开发人员的沟通工具,把静态页面无法体现的设计体现出来,包含整体设计对模块设计的规范,体现对设计上的一些决策,例如选用的算法,对一些关键问题的设计考虑等等,使开发人员能快速进入开发,提高沟通效率,减少沟通问题。
对于系统功能的调整,后期的维护,详设文档提供了模块设计上的考虑、决策,包括模块与整体设计的关系、模块所引用的数据库设计、重要操作的处理流程、重要的业务规则实现设计等等信息,提供了对模块设计的概述性信息,阐明了模块设计上的决策,配合代码注释,可以相对轻松读懂原有设计。
·存在的问题要由专门的人写,是比较麻烦的,也是很需要时间的,会对进度造成压力,也容易形成工作瓶颈,使设计人员负担过重,而开发人员无事可作。对于现在一般的以数据库为中心的管理系统而言,这个工作始终是要作的,区别只不过是不是形成专门文档,形成文档可能会多花一两周时间,但相对于规避的风险和问题来说,也是值得的,另外由于现在高级语言的流行,所以更详细的设计应该直接体现在代码的设计上,而文档则只体现设计上的一些决策,协调整体设计与模块设计的关系,把页面原型所不能体现的设计情况文档化,所以所花费的时间是有限的。
设计内容容易过细,但设计阶段是不能考虑特别清楚地,时间也不允许。
对于这个问题,一个对策是上边所提到的,文档只体现设计上的决策,页面原型所不能反映的信息,详细设计只体现总体设计对模块设计的一些考虑,例如对功能的数据库设计等等,而具体的实现实现,则到代码中再去实现,相关的设计也仅体现在代码中。
需求、设计需要不断的被更新、构建,则设计文档需要不断的重新调整,文档的维护需要跟上,否则文档和系统的同步就很难得到保障了,且造成多余的工作量。文档的内容易流于形势,质量糟糕,不能成为开发人员的参考手册,一是要建立起相关制度,如有修改,先改文档,后作开发,从工作流程上切实保障文档与系统的同步,二是要规范文档质量,对文档该写什么,不该写什么,标准是什么,粒度是什么,语法应该如何组织,有明确的标准和考虑,同时,建立审计文档评审、审核制度,充分保障系统的使用。·
首先是文档的内容,根据项目和团队的不同,详细设计文档的内容也有所不同,一般说来,粒度不宜过细,不能代替开发人员的设计和思考,但要把有关设计的决策考虑进去,包括与其他模块、整体设计的关系、操作的处理流程,对业务规则的设计考虑等,有一个标准为,凡是页面原型、需求规格说明书所不能反映的设计决策,而开发人员又需要了解的,都要写入文档。
其次是文档所面向的读者,主要为模块开发人员、后期维护人员,模块开发人员通过详细设计文档和页面原型来了解所开发的功能,后期维护人员通过实际系统、模块代码、详细设计文档来了解一个功能。
再有就是谁来写文档,因为文档主要考虑的是设计上的决策,所以写文档的人应该为负责、参加设计的技术经理、资深程序员,根据团队情况和项目规模、复杂度的不同,也有所不同。
还需要保证文档的可读性、准确性、一致性,要建立严格的文档模板及标准,保证文档的可读性及准确性,同时建立审核及设计评审制度,来保障设计及文档的质量,另外在工作流程中要强调,要先设计、先写文档,再进行开发。
软件文档怎么写
1.0概述 这部分提供对整个设计文档的概述。描述了所有数据,结构,接口和软件构件级别的设计。
1.1 目标和对象 描述软件对象的所有目标。
1.2 陈述范围 软件描述。主要输入,过程功能,输出的描述,不考虑详细细节。
1.3 软件内容 软件被置于商业或者产品线中,讨论相关的战略问题。目的是让读者能够对“宏图”有所了解。
1.4 主要系统参数 任何商务软件或者产品线都包含软件规定、设计、实现和测试的说明和规范。
2.0 数据设计 描述所有数据结构包括内部变量,全局变量和临时数据结构。
2.1 内部软件数据结构 描述软件内部的构件之间的数据传输的结构。
2.2 全局数据结构 描述主要部分的数据结构。
2.3 临时数据结构 为临时应用而生成的文件的描述。
2.4 数据库描述 作为应用程序的一部分,描述数据库结构。
3.0 结构化和构件级别设计 描述程序结构。
3.1 程序结构 详细描述应用程序所选定的程序结构。
3.1.1 结构图 图形化描述结构。
3.1.2 选择性 讨论其它可供考虑的结构。选定3.1.1中结构类型的原因。
3.2 构件描述 详细描述结构中的每个软件构件。
3.2.1 构件过程叙述(PSPEC) 描述构件的过程。
3.2.2 构件接口描述 详细描述构件的输入和输出。
3.2.3 构件执行细节 每个构件的详细演算描述。
3.2.3.1 接口描述
3.2.3.2 演算模型(e.g., PDL)
3.2.3.3 规范/限制 ]
3.2.3.4 本地数据结构
3.2.3.5 在3.2.3.6设计中包含的执行结果
3.3 软件接口描述 软件对外界的接口描述
3.3.1机器对外接口 与其他机器或者设备的接口描述。
3.3.2系统对外接口 对其它系统、产品和网络的接口描述。
3.3.3与人的接口 概述软件与任何人的界面。
4.0 用户界面设计 描述软件的用户界面设计。
4.1 描述用户界面 详细描述用户界面,包括屏幕显示图标、图片或者类型。
4.1.1 屏幕图片 从用户角度描述界面。
4.1.2 对象和操作 所有屏幕对象和操作的定义。
4.2 界面设计规范 用户界面的设计和实现的规范和标准。
4.3 可见构件 实现的GUI可见构件说明。
4.4 UIDS描述 用户界面开发系统描述。
5.0约束、限制和系统参数 会影响软件的规格说明、设计和实现的特殊事件。
6.0测试标准 测试策略和预备测试用例描述。
6.1 测试的类别 规定实施测试的类别,包括尽量详细的描述。这里是针对黑盒测试现象的描述。
6.2期待软件反馈 测试期待的结果描述。
6.3执行界线 特殊执行需要的说明。
6.4 重要构件确认 决定性构件或者需要特殊注意的构件的测试确认。
7.0附录 设计说明的补充信息。
7.1系统可跟踪矩阵 一个定期回归系统规格跟踪软件需求的矩阵。
7.2 产品战略 如果规格说明书是为一个产品设计的,描述相关的产品战略。
7.3 使用分析算法 描述所有分析活动所使用到的分析算法。
7.4 补充信息 (如果有需要特别说明的)
android 开发设计文档怎么写
软件需求文档格式的标准写法 1.引言 1.1 编写目的 · 阐明开发本软件的目的; 1.2 项目背景 · 标识待开发软件产品的名称、代码; · 列出本项目的任务提出者、项目负责人、系统分析员、系统设计员、程序设计员、程序员、资料员以及与本项目开展
如何写软件设计文档?
1 引言
1.1 编写目的
说明编写这份详细设计说明书的目的,指出预期的读者范围。
1.2 背景
说明:
a. 待开发的软件系统的名称;
b. 列出本项目的任务提出者、开发者、用户以及将运行该项软件的单位。
1.3 定义
列出本文件中用到的专门术语的定义和缩写词的原词组。
1.4 参考资料
列出要用到的参考资料,如:
a. 本项目的经核准的计划任务书或合同、上级机关的批文;
b. 属于本项目的其他已发表的文件;
c. 本文件中各处引用的文件、资料,包括所要用到的软件开发标准。
列出这些文件的标题、文件编号、发表日期和出版单位,说明能够得到这些文件资料的来源。
如何学习写程序设计文档
写程序设计文档,要注意简洁和逻辑性,需要明确的是:文档并不是进行设计的目标,也不是设计过程中额外的工作。具体模块和步骤为:
1.需求分析
需求分析的结果通常需要使用需求说明文档来描述,目前主流的需求描述方法包括:用户例图、用户故事等方式。这些方式有所不同的侧重,其核心思想就是描述清楚用户的使用场景。
2.功能设计
对于主要是用户界面的软件项目来说,功能设计可以看作是画出原型界面,描述使用场景,获得用户认可的过程。而对于没有界面的软件项目来说,则功能设计与需求分析的区分更为模糊。
3.系统架构设计
系统架构设计是一个非常依赖于经验的设计过程。需要根据软件项目的特定功能需求和非功能性需求进行取舍,最终获得一个满足各方要求的系统架构。系统架构的不同,将很大程度上决定系统开发和维护是否能够较为容易的适应需求变化,以及适应业务规模扩张。
4.模块/子系统概要设计
模块/子系统的概要设计,由架构师参与,核心设计和开发人员负责的方式进行。
在概要设计工作中,需要在架构确定的开发路线的指导下,完成模块功能实现的关键设计工作。在概要设计阶段,需要关注于模块的核心功能和难点进行设计。
5.模块详细设计
在瀑布式开发模型中,模块的详细设计会要求比较严格,将所有类进行详细设计。除了一些对于系统健壮性要求非常严格的软件项目,如国防项目,金融项目还要求有详细设计文档之外。其他的项目大多采用其他方式来处理这样的工作,如自动化测试等。
综上所述,软件设计文档作为软件开发团队的沟通、理解、知识共享的手段,具有非常重要的意义。
软件开发设计文档怎么写的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于软件开发项目文档怎么写、软件开发设计文档怎么写的信息别忘了在本站进行查找喔。