设计文档写些什么才有用?

CMM3下的应用及改进 1。CMM3下的应用及改进      近2~3年来,软件能力成熟度模型在中国得到了广泛的重视,也进行了一些实践,但是总体效果并不令人满意,一些已经通过了CMM评估的企业的情况并没有得到应有的改变,其中的原因,让人深思。这其中固然有一部分守旧的软件开发和管理人员对于先进管理模式的排斥。但是,更多情况下,是CMM的实施者不了解这个变革的艰巨性和复杂性,忽视了对CMM实施至关重要的一些方面。如通 阅读详情

     一些公司用CMMI做软件开发过程管理,对详细设计过程要求很高,需产出Rose设计模型,画出序列图、活动图等等。本意是为了让Rose设计模型对后续的编码有指导意义。但实际实施过程中发现效果不佳,一是有人不愿意认真写详细设计文档,二是有人不愿意看详细设计文档,问题如下:

 

    1)当详细设计和编码人员实际为同一人时:既然是同一人,自己做事心里有数,整体想清楚了就开始编码,而不愿意写详细设计文档。

    2)当详细设计和编码人员不是同一人时:编码人员根本不愿意看Rose设计模型,一,详细设计要画的很细才有效果,这样一来要读懂别人的序列图、活动图反而不容易;二,如果详细设计做的不够细,那还不如直接看需求文档。

 

    文档有两个功能,一个是指导下游工序进行工作,二是作为档案供将来回忆或新人学习之用;由于上面两个原因,Rose设计模型的第一个功能“指导下游工序进行工作”的功能实际是失效了;而第二个功能呢?在与许多从事软件维护工作的开发人员访谈之后,得到的结论是:大多数人更愿意直接看代码,而不是看详细设计文档(因为设计文档要不就是太粗略,要不就是太细、重点不突出,看不懂)。因此Rose设计文档的第二个功能也失效了。这也验证了前人说的一句话:设计文档是一次性的,或者:代码即文档。

 

    再谈谈设计的目的。设计分为架构设计、概要设计、详细设计。如果说架构设计是规划房子的地基,概要设计则是规划房子的钢筋混凝土框架、详细设计就是规划管道、线路、门窗、外表等等(其中以管道、线路为首要)。对应到软件上,概要设计就是要规划出软件的结构 —— 模块、模块之间的关系、模块内部的类(接口)、类(接口)之间的关系。而详细设计就是规划出软件里的管道、线路,可以认为是贯穿全局的算法。

   

    那么设计文档该怎么写呢?设计文档不是越细越好,写得细了也没人看,稍微发生变化又要去修改。一个合理的设计文档是结构清晰的、重点突出的,也就是概要设计+关键详细设计。概要设计是对软件结构的描述,包括类的责任、接口的责任;关键详细设计,也就是对贯穿全局算法思路的描述。结构的描述,用类图就可以了。而贯穿全局的算法,用序列图活动图可以,用文字描述也行。说清即可,仅此足矣。那么类里面的属性、方法需要在Rose模型里体现吗?这是不必要的,有时间一个个输入到Rose里,不如在IDE里编码来的直接。

 

    设计文档如何使用?首先在设计评审时,供评委评价。其次,对详细设计和编码有限定作用。而详细设计编码最好就是同一个人来做,可省去不必要的文档交流。在编码完成后,设计文档的使命也就完成了。后续没有必要维护设计编码一致性,就算要维护一致性,因为我们的设计文档是只抓重点的,而重点的都是不容易改变的,因此维护一致性的工作量也不大。

 

    

 

系统设计(二)如何写技术设计文档 如何写一份优秀的系统设计文档? 作为一名架构师,系统技术方案设计文档应该是必备技能,一份优秀的设计文档应该包含:业务分析、系统架构设计、数据分析、风险防控和非功能性设计等几个大方面‘。 阅读详情

相关推荐

如何写软件设计文档?

对于文档的总结,本该在软工之后,文档书写完后进行的。可之前,对于文档的书写没有多少感觉。师傅检查了一遍我的文档,并对文档存在的问题及我的情况进行了分析,让我重新改一改。这一遍,让我对文档有了很多新的认识。          为什么要写文档?          这可能是很多人都想要问的一个问题。为什么要写文档呢?前前后后,那么琐碎,那么麻烦,要是想研究个什么方案,大家开个会,当面研究、解

不忘初心 1万+

【CMMI】13、CMMI评估-评估注意点

此处的CMM3、CMM4、CMM5指的是成熟能力等级,而非CMMI版本,一般CMMI版本叫 CMMIV2.0来表示,2024年到最新CMMIV3.0。

weixin_43606948的博客 1293

如何写软件设计文档

自己在公司1年多前写的一篇文章,今天翻出来,重温一下。 软件设计的不同模型:瀑布式、快速原型法以及迭代式 自从1968年提出“软件工程”概念以来,软件开发领域对于借鉴传统工程的原则、方法,以提高质量、降低成本的探索就从未停止过。而在这个过程中,提出了许多不同的软件开发模型,典型的有:瀑布式,快速原型法,以及迭代式开发等。 瀑布式模型 是由W.W.Royce在1970年最初提出的

danmao的专栏 3123

资深码农教你写详细设计(附示例模板)

很多小伙伴都不知道怎么写详细设计,本期就带大家看一下详细设计都有哪些内容。 喜欢听我叨叨的,直接看视频

甲蛙全栈 1万+

系统详细设计说明书_CMMI规范

本模板是软件系统详细设计文档的编写指南。 本模板给出系统设计阶段可能包括的基本信息,重点在于和需求分析文档、概要设计文档相联系。描述系统整体情况。如果某个章节在项目或当前阶段中无法描述,则可保留其标题,注明“不适用”;如果需要对本模板的个别章节详细描述,也可将其形成单独的文档,成为本文档附件。

CMM3 过程模板文档全套

CMMI3级软件过程改进方法与规范 1.1 CMMI简介 4 1.1.1 CMMI发展简史 4 1.1.2 CMMI的过程域 5 1.1.3 CMMI的两种表示法 6 1.2 CMMI阶段式表示法 7 1.2.1 成熟度等级L1:初始级的特征 8 1.2.2 成熟度等级L2:已管理级的特征 9 1.2.3 成熟度等级L3:已定义级的特征 9 1.2.4 成熟度等级L4:量化管理级的特征 9 1.2.5 成熟度等级L5:持续优化级的特征 10 1.3 CMMI连续式表示法 10 1.3.1 能力等级0-不完整级的特征 12 1.3.2 能力等级1-已执行级的特征 12 1.3.3 能力等级2-已管理级的特征 12 1.3.4 能力等级3-已定义级的特征 13 1.3.5 能力等级4-量化管理级的特征 13 1.3.6 能力等级5-持续优化级的特征 14 1.4 过程域的部件及解释 14 1.3.1 必需部件 15 1.3.2 期望部件 15 1.3.3 信息部件 16 1.5 CMMI评估 17 1.5.1 CMMI评估要求 17 1.5.2 CMMI标准评估方法SCAMPI 17 1.5.3 CMMI评估考虑事项 18 1.6 CMMI和CMM的比较 19 1.6.1 CMMI与CMM的模型比较 19 1.6.2 CMMI 与CMM 过程域比较 19 1.6.3 CMMI 与CMM评估方法比较 21 1.7 CMM/CMMI在中国 21

什么是cmm3规范?什么是CMMI5 呢?

cmm是项目管理 由美国卡内基梅隆大学的软件工程研究所(SEI)创立的CMM(Capability Maturity Model 软件能力成熟度模型)认证评估,在过去的十几年中,对全球的软件产业产生了非常深远的影响。CMM共有五个等级,分别标志着软件企业能力成熟度的五个层次。从低到高,软件开发生产计划精度逐级升高,单位工程生产周期逐级缩短,单位工程成本逐级降低。据SEI统计,通过评估的软件公司对项

清香的javabean 7589

条码打印工具-Bartender的使用

文章目录1、安装Bartender1.解压安装包,可获得bartender2021版本和破解文本2. 双击“BarTender_2021_R1_Full_x64.exe”文件运行,勾选协议及软件安装设置3. 选择安装选项,自行选择勾选,点击Browser可更换软件安装路径4. 耐心等待软件安装完成,直接点击完成退出5. 此时会弹出提示需要激活许可证,先点击取消6. 接着将Crack夹中的“BarTend.exe”破解文件复制到软件安装目录中替换7. 再双击“serial.reg”导入注册,点击确定即可8.

暮紫的笔记本 1万+

CMM3和CMMI4的差别--过程域

CMM3和CMMI4的区别---PA过程域的区别 CMM3涉及的KPA关键过程域CMMI4涉及的PA过程域差异说明项目管理PP:项目计划PP:项目计划CMMI4:增加了在计划阶段就要根据“组织基线”设定项目目标(质量、进度和成本)SPTO:软件项目跟踪和监控

微软新技术 3129

BH1750光强度传感器Stm32f103驱动(已测试ok)

1. 实验:Stm32f103 驱动 bh1750采集光照强度,串口打印采集到的数据。 2. 实验准备器材 开发版:stm32f103c8t6 器件:bh1750 GY-302 开发环境:win10,KILE4 下载程序的软件:FlyMcu.exe 串口调试助手:ComAssistant.exe 3. BH1750 的接线 VCC:5V或3.3V ...

weixin_53329977的博客 8928

Ubuntu22.04通过DKMS包安装Intel WiFi系列适配器(网卡驱动)

Ubuntu安装Intel WiFi系列适配器(网卡驱动)

lu_linux的博客 2600

写技术文档,不只是填模板 —— 从共情视角做有用的系统设计文档

📌 从“写给谁、解决什么问题”出发,而不是“我有啥内容就写啥”。很多“为了写而写”的文档,看起来内容齐全,实际上无用信息一堆。而共情式文档是一种“以用户为中心”的技术表达方式,它关注的是:谁会看这份文档?他/她在什么场景下会来看?他/她最需要什么内容?我们不是写作者,但我们是“系统的设计者”。

hemoparrot的专栏 870

中国高质量夜间灯光数据

中国高质量夜间灯光数据是CnOpenData与吉林高分遥感应用研究院有限公司合作的数据库 ,基于多源夜间灯光卫星遥感影像,经过科学手段对数据进行降噪、修正、分析统计,以年度、月度为更新频率,以省市县三级行政区划作为统计单元,制作高质量夜间灯光数据。

Sunny9qx的博客 3307

如何写好一份软件开发设计文档

设计文档- 也被称作技术规范和实现手册,描述了你如何去解决一个问题,是确保正确完成工作最有用的工具,其目的是迫使你对设计展开缜密的思考,并收集他人的反馈,进而完善你的想法,同时在软件交付和交接的过程中,能让其他人更通俗易懂的了解之前的设计目的和思路 目录: 一、什么是软件开发设计文档 二、为什么要写软件开发设计文档 三、写软件开发设计文档需要注意些什么 四、怎么写好一份开发设计文档 一、什么是软件开发设计文档 设计文档 - 也被称作技术规范和实现手册,描述了你如何去解决一个问题,是确保.

肖邦的夜曲的专栏 7万+

YOLOv11 结合多尺度卷积注意力机制(MSCA):小目标检测精度提升20%的完整实现指南

用不同尺寸的深度卷积(如d×7×1、d×1×7等)提取多尺度特征;通过通道融合,强化小目标的细节信息;仅增加4.2M参数,却能让小目标检测精度大幅提升(对比表见后文)。

m0_71589036的博客 184

到底什么是Harness工程?一篇文章从入门到企业落地全解析

随着OpenClaw爆火,Harness Engineering(驾驭工程)成为AI编程时代的热门概念,很多小白对其感到陌生。本文用通俗类比和真实案例,避开复杂术语,从基础定义入手,讲清Harness Engineering的核心逻辑——人类工程师设计“约束系统”(马具),让AI模型(烈马)安全高效地完成代码工作,同时拆解其核心组件、企业落地场景和实战成果,帮小白快速入门,读懂这项能解放人力、提升效率的新技术,轻松掌握它的核心价值和落地思路。

program哲学 3259

嵌入式方案设计文档该怎么写?

关注+星标公众号,不错过精彩内容作者 | strongerHuang微信公众号|嵌入式专栏俗话说,不会写文档的工程师不是好的工程师!如果你只会写代码,而从不写文档,迟早有一天会“出事”...

strongerHuang 1万+

成功解决raise Py4JError py4j.protocol.Py4JError: py4j.protocol.Py4JError: Could not find py4j jar at 

成功解决raise Py4JError("Could not find py4j jar at {0}".format(jarpath)) py4j.protocol.Py4JError: Could not find py4j jar at 目录 解决问题 解决思路 解决方法 1、第一步安装jdk 2、第二步安装或升级py4j 解决问题 raise Py4JError("Could not find py4j jar at {0...

头部AI社区如有邀博主AI主题演讲请私信—心比天高,仗剑走天涯,保持热爱,奔赴向梦想!低调,专注,谦虚,自律,反思,成长,还算比较正能量的博主,公益免费传播…内心特别想在AI界做出一些可以推进历史进程影响力的技术(兴趣使然,有点小情怀,也有点使命感呀 4624

设计文档应该怎么写?

作为一名软件工程师,如何写好一份优秀的设计文档,是十分重要的。 本文试图描述如何才能写好一份设计文档。 本文分为4个部分: 为什么要写一份设计文档 要包含在设计文档中的内容 怎么写 相关过程 为什么要写一个设计文档? 设计是软件过程的一个重要环节。而设计文档的编写,更是设计阶段的重要产物。设计文档也被业界人士认为是技术规范,描述是如何解决或实现需求中内容,最终于愿景达成最终一致性的比较文件。设计文档是确保正确完成工作的最有用工具。 设计文档中应该包含哪些内容? 设计文档描述了问题的..

wuxiaonan77的博客 8213

适航规章、标准,书籍资料下载汇总(增加DO-160G中英文版)

很多读者之前问我有没有DO-160G的资源,现在终于找到啦!如果大家有其他想要的资源,可以在留言区告诉我,有空我会帮大家找找看~文末有下载链接:更新日志:2024-9-28:初版。2024-10-21:增加DO-330英文版PDF下载。2024-10-30:增加DO-160G中文版(非机翻)和英文版PDF下载。以下是一些收集到的适航相关的资料,分享给大家。(如果没有你想要的资料,请留言,等找到会及时更新!

qq_41854911的博客 2756

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

如何写软件的需求和设计文档

编程快20年,写了一些的文档。之前也一直在思考如何写文档,这个过程中,有几次提升。一次是在华为,学习如何写设计文档。另外就是写需求文档,这次的项目,以前需求写得也比较多,但都是有足够的思间来慢慢写,这次时间比较紧张,所以,思考如何写作需求。==============================开始之前,我们还是先回下头,想想到底什么是软件。什么是硬件。这是因为,许多公司,特别是中国现阶段,实...

郝玉杰的专栏 2万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

如何写前端技术方案文档?

大厂技术高级前端Node进阶点击上方程序员成长指北,关注公众号回复1,加入高级Node交流群前言百度百科对计算机软件的的定义为:“计算机软件( Software,也称软件)是指计...

程序员成长指北 1万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

如何写好设计文档

本文主要为需要编写软件设计/开发文档的读者提供一些经验和建议。

观测云的博客 1649
上一篇: 从几个方面评价软件设计的合理性?
下一篇: JavaScript 的 Cross Site 脚本注入风险
AppFramework
博客等级 码龄19年 61粉丝 29原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值