怎样估算项目开发周期

如何更准确的预估开发时间? 最终,估计中型项目和大型项目的进度会包括4个任务,即把项目分解成多个较小的项目,估计这些小项目的进度,增加集成测试和调试的时间(也就是让各个小项目结合到一起并且正常工作的时间),然后通过一个乘数因子得到最终的合计结果。首先,作为软件工程师而言,你通常没有足够的背景、教育经历或经验来确定时间进度,所以你应该与项目经理进行沟通,向他们解释时间进度表中需要考虑的事项(不仅仅是编写代码所需的时间),然后构建一个估计时间的方法。在一个较大的项目中,许多人(包括工程师以外的人)都会影响到对进度的估计。 阅读详情

项目是指以一定的成本在一定时间内取得预期收益的系列活动。项目的“生命期”是管理项目的重要指标,而对项目周期的估算则是管理项目的重要一环。本期“项目管理”介绍对软件项目周期进行估算的技巧。

  估算是软件开发中很重要的一个环节:项目周期估算过短会造成人力低估、成本预算低估、日程安排过短,最终人力资源耗尽,成本超出预算,为完成项目不得不赶工,影响项目质量,甚至导致项目失败;项目周期估计过长表面看来影响不大,但是实际上也会带来成本估计过高、充分效率低下的后果。周期估算如同盖楼房中打地基,是后续工作的基础,它的影响会贯穿整个项目。

  但软件开发是一项非常复杂的工程,不仅包含需求分析、设计、编码、测试、实施、维护等不同的子过程,还涉及到开发工具、开发人员、项目管理、风险等众多因素,不同因素对估算产生的影响不尽相同。在进行软件估算时(包括利用工具辅助估算)必须考虑到这些方面,否则估算结果就会和实际结果有很大的偏差。下面,我们对几个常见的因素做一些探讨。

软件规模是项目估算的基础

  软件规模通常指的是软件的大小,可以通过程序代码行的长度、功能函数的数量、数据库中表的数量、数据库的大小等要素来描述软件规模。一般而言,软件规模越大,所花费的开发周期就越长。但这并不是一个简单的线性函数关系,也要考虑代码重用问题。比如一个模块代码很长,但是可能包含了很多公用函数,那么在估算时就应适当减少代码行数量。

  软件项目中包含的功能模块越多、越复杂(或者说软件越大),开发周期越长。这个时间绝不是模块开发时间的简单叠加,因为模块功能数量的增加直接带来了软件模块间相互关联度、复杂度的成倍增加,这导致了在需求、设计等阶段需要花费更多的时间,比单独考虑一个模块复杂得多。另一方面,对于产品化程度高的项目开发,随着模块数量增加,开发周期的增加却不是特别明显。这是因为相当数量的模块可以完全重用,实际开发量大大减少。

  所以,在实际进行软件开发周期估算的时候,软件规模肯定是首先考虑的因素。具体估算时,在考虑软件规模时要去除可重用的部分。另外,软件功能之间的关联所造成的复杂性也必须足够重视。

风险影响周期

  任何一个项目都或多或少存在风险,软件项目开发过程中也避免不了这种情况而且有自己的特点。最常见的风险来自于:技术、客户、项目人员等方面。开发周期估算时项目风险应该适当考虑,尤其是技术风险和客户风险——

技术风险 技术风险主要来自于软件本身的技术难度。对于一套成熟的产品,定制开发的技术风险相对非常小,因为重要的技术已经成型,客户也很少有新的、能带来高难度技术问题的需求,这种风险较小。但是对于完全重新开发的项目,或是研发类的项目,技术风险必须特别重视。以开发平台为例,开发平台必须适合本项目所涉及的软件开发、满足最终的需求,平台的错误选择将导致庞大的开发工作量,即便满足了用户需求也可能造成系统效率低下、扩展性差的致命问题,软件可能会很快被淘汰。

  在实际估算中,建议将技术难度分为十级,每一级在初次估算的代码行上增加10%,

  最终估算代码长度=初始估算代码长度×(1+0.1×n)

  假设模块A的初次估计代码行为15000行,但考虑技术难度高的风险,设定技术难度级别为二级,最终代码行的估算数量为15000×(1+20%)=18000。

  由于技术风险的分析是一项技术性很强的工作,要求做技术风险分析的人必须是技术专家,在相关技术领域有着丰富的经验。对重大技术风险的分析结果必须要经过评审,保证准确性。

客户风险 客户风险存在于客户化项目中,客户行业特点不尽相同,技术、理解水平也相差甚远。在我经历开发的项目中,80%的项目延期是由于客户方的原因,而且这种风险可控性很低,对项目影响超过技术风险。

  在开发周期估算前,项目经理要仔细分析客户的具体状况,包括客户方的计算机水平、管理水平、可沟通程度,在此基础上结合以往的经验综合判断是否会对开发带来明显的影响,可以按照上述的技术风险的方式将客户分级,最终确定开发周期。在这个过程中,项目经理的经验极其重要,对客户的分析基本上要依赖经验做判断,要求管理人员有大量的客户经验和行业分析能力。

项目团队影响速度

  对于软件开发项目来说,人力资源是核心力量。人力资源对估算的影响表现在技术水平、理解能力、沟通能力等几个方面。项目技术人员编程水平、工作效率、团队适应性、沟通能力等素质,都会对开发进度产生影响,其中技术水平是最关键的因素。评价程序员的技术水平可以从编程熟练程度、编程速度、解决技术问题的能力等几个因素考虑:编程熟练程度指的是程序员使用编程工具实现软件的功能的熟悉程度;编程速度指的是完成某个功能的速度;解决技术问题的能力可以反映程序员的技术功底—如果以100%作为总和,这三个因素分别占的合适比例为70%、15%和15%。

  软件开发周期估算前,应对开发人员定级,建议按新手、初级程序员、中级程序员、高级程序员来划分,每一级人员再评定上述三个因素。初次估算时可以假定开发人员为中级程序员,然后依据项目组实际人员的水平做修正,这样结果的准确度能大大提高。

宝贵的经验

  依据历史数据估算软件开发周期是一种比较常见的方法,这种方法以历史软件开发周期为依据,在估算时把当前软件项目的情况与历史数据加以对比,从而得出最终结果。

  按照历史数据估算开发周期的准确度还是相当高的,但这种方法只适用于对某类软件的开发,比如某个行业业务系统的开发。当要估算的软件与历史软件相差太多,比如开发工具完全不同、或者项目类型完全不同,就不能再依赖这种方法,最起码应该辅助使用其它估算法。如果没有历史数据或是开发一种新领域软件,可以使用代码行或功能点估算法,在此基础上再通过其它方法校正。

  在实际使用历史数据估算法时,建议项目经理建立一个历史项目数据库。在库中包含以前所有项目的开发周期、项目规模、开发人员状况、客户状况等详细数据。当估算时根据当前项目的状况在库中寻找最类似的历史项目,然后再比较两个项目之间在项目规模、项目风险、人力资源之间的区别,我们假定历史项目开发周期为A,当前项目的周期可以依据下列公式得出:

  估算项目周期 = A×(2×S+R+P+2×C)/6

  S:代表软件规模 R:代表风险 P:代表人力资源 C:代表客户

  (以上值均指当前项目与历史项目的比率)

  实际的比较因素应该不止这些,但软件规模、风险、人力资源及客户状况是其中最重要的,对软件开发的影响也最大,所以这个公式中只考虑了这些因素。其中软件规模和客户两项占的权重最大,这也是根据项目管理经验得出的,在实际使用历史数据估算法时还可以灵活加入其它因素

十九,如何用AI评估项目复杂度和开发周期 数据驱动胜过直觉:利用AI分析历史数据和行业基准,避免基于感觉的估算。分解是关键:将大项目分解为小功能点,再分解为具体任务,使估算更准确。多维度评估:考虑技术、业务、团队、外部依赖等多个维度的复杂度。风险意识:识别高风险点并设置适当缓冲,做好最坏情况的准备。持续调整:项目估算不是一次性活动,而是需要随着项目进展不断调整的过程。记住,即使有AI辅助,项目估算仍然是一门艺术与科学的结合。最重要的是保持谦虚和学习的态度,不断完善你的估算方法。 阅读详情

相关推荐

24、软件项目工期与成本估算全解析

本文深入解析了软件项目工期与成本估算的重要性及具体方法,涵盖了估算在产品开发生命周期中的位置、常用估算模型(如COCOMO和SLIM)、估算步骤、优缺点比较以及应对估算风险的策略。通过详细分析,帮助项目经理更准确地进行项目规划和资源分配,提高项目的成功率。

kite3的博客 119

怎样估算软件项目周期-代码行估算法

项目是指以一定的成本在一定时间内取得预期收益的系列活动。项目的“生命期”是管理项目的重要指标,而对项目周期的估算则是管理项目的重要一环。本期“项目管理”介绍对软件项目周期进行估算的技巧。   估算是软件开发中很重要的一个环节...

cnpm89348的博客 667

项目周期方案模板

项目开发周期方案模板,可直接参考,复制使用。可附加开发流程

如何科学预估开发时间

一个开发人员能否精确评估开发时间,是一件非常重要的事情。如果你掌握了这项技能,你在别人的印象中会大大加分。这也是专业度的体现。

Ethan_LG的专栏 6295

一个完整的软件开发周期

一个完整的转件开发周期,可以帮助你更加了解企业的开发环境,早日走到工作岗位

电子数据取证实战:从“平航杯”竞赛看计算机检材分析的关键技术与案例解析

本文通过'平航杯'电子数据取证竞赛案例,深入解析计算机检材分析的关键技术,包括USB设备追踪、浏览器历史分析、AI换脸取证、虚拟货币交易追踪等实战技巧。重点探讨了数字痕迹的发现与关联,以及电子取证工具链的应用,为从业人员提供实用的技术参考和案例分析。

www00的博客 537

软件开发周期项目

软件产品开发周期一般由:规划,设计,实施,不乱和发布五个阶段构成, 每个阶段又都是重复的相互迭代的过程, 这个过程必要多方的合作找出最佳的实践过程. 第一阶段:规划(plan) 目标:规划软件的整体架构 各部门完成标准:  1.市场开发人员    衡量市场机遇提供市场机遇文件(mod)    定义用户需求提供市场需求文件(mrd)    认定主要用户案例user scenario

682

Ubuntu20.04下运行VINS系列:VINS-Mono、VINS-Fusion和GVINS

安装好了VINS-Mono所需的ROS noetic、Eigen3.4.0、Ceres2.10和OpenCV4.2.0等。VINS-Mono是在ROS melodic以及Ceres1的环境下开发的,因此需要适配高版本的环境。

zardforever123的博客 2万+

项目开发周期和项目管理

本文主要总结阐述目前经历的的开发周期和项目管理, 阅读大概12分钟 适合新手+项目管理新手+有经验进行自我总结 身为前端开发,目前在三家公司做过开发 两家上市公司+一家200人的小公司,这三家公司以下就简单简称A/B/C吧 A公司的开发流程 一个项目的生命周期 1、开发组长和产品商量开发人员(需要哪些人,大概工期) 2、产品建群发需求文档 3、开始需求会议(此时UI基本完成,再次确定难度和事件) 4、根据接口时间开始开发(一般前端在后端完成60%之后才开始) 5、到测试时间开始发布测试环境开始测试 .

qq_16546829的博客 3291

Spring AI + RAG 构建电商智能客服:从 PDF 文档解析到精准问答的全链路实战

核心框架:向量数据库:- PostgreSQL + pgvector (生产推荐)- Redis Stack (轻量级方案)- ChromaDB (快速原型)文档解析:- Apache PDFBox: PDF 文本提取- Spring AI Document Readers: 结构化解析大模型:- 阿里云百炼 (DashScope)- 本地部署:Qwen/ChatGLM/*** 电商领域实体*/@Data@Builder@ToString/*** 商品类型。

一起修行,不孤单。这里有编程语言、开发工具、学习方法论和踩坑笔记。用简单的话说复杂的事,陪你从小白到进阶。周更干货,欢迎一起成长! 381

燧原科技云燧ESL64-O超节点:国产AI芯片与OEX光互联架构解析

分布式AI训练通过将计算任务拆分到多个节点并行执行来加速模型训练,其核心原理涉及数据并行和模型并行等策略。在技术价值层面,分布式训练能显著提升大规模深度学习任务的效率,但传统GPU集群常因网络通信瓶颈导致性能受限。OEX光互联架构作为解决通信瓶颈的关键创新,采用硅光技术实现高带宽、低延迟的节点内互联,优化了AI训练中的集合操作。这种硬件级优化特别适用于千亿参数大模型训练和科学计算等场景,能有效降低AI集群的总体拥有成本(TCO)。云燧ESL64-O超节点正是基于国产自研AI芯片与OEX架构的集成方案,为大规

weixin_29071809的博客 371

为什么软件开发人员会对估算产生误解的4个最大原因

估计很困难。 即使在平凡的情况下,大多数人也不擅长此事。 例如,当我的妻子问我要花多长时间解决我正在处理的问题或回家时,我几乎总是总是回答“五分钟”。 我几乎总是老老实实地相信只需要五分钟,但是从来没有。 在大多数情况下,我的五分钟都花了半个小时或更长时间。 但是,与软件开发工作相比,我的五分钟估算通常是相当准确的-仅相差六分之一左右。 将软件开发的估计数减少多达一百倍并...

danpu0978的博客 322

水气泵控制原理,三角波发生电路,LM331M/TR芯片,高速运放芯片

气泵的控制采用闭环控制,根据气泵的FG反馈信号进行反馈调节,由于气泵的反馈信号是脉冲反馈,即频率改变,占空比不变,即需要通过F/V转换芯片转换成电压信号,变为电压与转速成正比,其电压进入比较器与基准电压进行比较,将比较结果进行运算并进行PWM控制信号。水泵的控制采用闭环控制,根据水泵的pwm信号进行反馈调节,水泵的反馈信号是脉冲反馈,即频率改变,占空比不变,即需要通过F/V转换芯片转换成电压信号,变为电压与转速成反比,其电压进入比较器与基准电压进行比较,将比较结果进行运算并对PWM控制信号。

m0_51010122的博客 2856

【DevCloud·敏捷智库】如何利用故事点做估算

团队在使用敏捷开发过程中,团队对故事点不了解,需要学习什么是故事点?

华为云官方博客 3092

【Claude Code 源码解析教程】总体大纲

本教程旨在深入解析 Anthropic Claude Code 项目的源码架构和实现细节。Claude Code 是一个基于 TypeScript + Bun 构建的 AI 编程助手 CLI 工具,代号 "Tengu",具有复杂的多模块架构和丰富的功能特性。本教程基于Claude Code 的源码分析来生成,将帮助您全面掌握 Claude Code 的源码架构和实现细节,为开发类似 AI 编程助手工具奠定坚实基础。

rengang66的博客 388

python+playwright 学习-10.pytest-playwright插件编写测试用例

pytest-playwright插件完美的继承了pytest 用例框架和playwright基础使用的封装,基本能满足工作中的常规需求了,不需要我们再做额外的插件开发。

qq_27371025的博客 2519

软件规模估算

为了估算软件项目的工作量和完成期限,首先需要估算软件规模。目前已经形成了一些比较系统化和理论化的软件规模估算方法,其中包括:Delphi估算法,这是由几位项目领域的专家按照历史资料、经验和直觉得出意见并进行处理,以达成共识的一种方法;类比估算法,这是一种通过新项目与历史项目的比较得到规模估计的方法;代码行估算法(Lineof Code,LOC),这是一种比较有代表性的软件规模估算方法,是通过对源程序中的文本进行计数以得到软件项目规模的方法;

技术日常 489

基于树莓派4B与NCNN的YOLOv8高效部署实战:无GPU环境下的C++加速优化全流程指南**

本文详细介绍了在树莓派4B上基于NCNN框架部署YOLOv8目标检测模型的全流程。内容包括:从PyTorch模型导出NCNN格式文件、树莓派环境配置(OpenCV和NCNN编译)、C++实现代码解析(含模型加载、推理及后处理),以及实际部署测试结果。在树莓派4B上达到约2FPS,并提供INT8量化、多线程等优化建议。该方案为无GPU设备提供了轻量化目标检测的实用部署方案,适合边缘计算场景。

FJN110的博客 917

项目估算

原来的方式:一个页面2天;项目管理四要素:成本、时间、范围、质量;引用: "那么如何衡量一个团队的总”人天”?如果一个团队已经经过长期的磨合,那么可以从以往的数据来获得他们的开发量。如果是新建立的团队,没有经过磨合...

cisiruan3500的博客 104

深度学习工具包 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")

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

如何估算时间

时间估算一直是困扰我们的大难题。经过对最近几个项目的总结,我罗列了一些估算时间方面的经验,仅供参考。 1.别为赶进度而过早定时间 我们是做产品,而不是仅仅为了完成工作。过于赶进度,容易忽略细节上的难点,导致无法按期完成,且会影响产品质量。 2.别让产品经理给你定时间 一定要自己确定开发时间,因为你才是最了解具体开发周期的人 产品经理觉得时间长,不允许怎么办? 罗列需求,

1638

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

怎么评估项目的开发周期?

评估项目的开发周期首先要明确开发的过程,典型的过程阶段是: 总体需求,总体设计,迭代开发,系统测试,用户验收,上线.然后明确各个阶段的工作时间,方法是:1.首先确定该阶段的工作内容,例如,总体需求的工作主要是:业务调研,业务分析,系统分析,需求编档,需求确认.2.确定这些工作的人员,以及需要的工作时间,如果人员到位了,请工作人员自己估计,项目经理指导和评价;如果人员不到位,则项目经理采用可能人员的...

狮子座人生 891

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

为什么软件开发周期是估计的两到三倍?

放图一张。 如同那个Quran的高赞回答一样,我们的想象跟实际总是有很大出入,如同阿凡达2无限推迟上映,计划也是总赶不上客户的需求变化等等…… 软件开发是一个涉及到智力层面的工作,比如把某个库更新到新版本,可能会多花一天的时间,你甚至还得自己写一个库。如果有哪一部分让人觉得不清楚,要么是你应该了解更多相关知识,要么得把它分解为更细致的步骤。与此同时,如果一个步骤太细的话,又可能会太脆弱导致整个计划无效,所以要把握好这个度。想要知道你的文档里应该考虑哪些东西,关键在于跟 PM 沟通清楚,消除有歧义的地方,这样

qq_55933859的博客 178

光环国际PMP:项目经理如何回答“这个项目要多久完成?”

这个项目要多久开发完成? 这个问题是我最常碰到的一个,也是我最难回答的一个。对这种问题最好的回答方式是用全职员工来推算天数。这非常容易,你只需要找出有多少个不重叠的功能特征,然后每个人负责一个。一旦各个功能块被分成了不能再分的任务,你计算需要多少人天,这就是你的答案。你无论如何都不可能用比这更少的时间开发完这个项目。 “一个女人生一个孩子要10个月,不论你再增加多少个女人来做这事,

S_king_的博客 927

估算

 大多项目超过估算的25%(1994),准确的估算是最大可能加快开发速度的基础。软件开发是一个改进的过程,能提前做出的决策越多,估算越精确。创建准确的开发进度:估算产品规模、估算工作量(人月)、估算进度、提供某一范围内随进度改进的估算。估算正确性依赖于软件定义的修正程度。 进度压缩因子=期望进度/初始进度   压缩进度工作量=初始工作量/进度压缩因子  0.83=期望1

秋天的树 371

区块链 Web3 应用的开发周期和费用

区块链Web3应用开发周期和成本因项目复杂度差异显著。简单DApp(如NFT平台)需2-4个月,费用约5-10万美元;中等项目(如DEX)需4-8个月;复杂系统(如公链)可能超过1年,成本可达百万美元。费用构成包括:开发团队人力(占主要成本)、区块链网络费用、智能合约审计(1-20万美元)及运营推广支出。关键影响因素包括技术栈选择、团队地域分布和功能集成需求,安全审计是必要环节。合理规划可有效控制项目周期和预算。

qq_48256438的博客 606

软件版本变更的一点感触

  大学里面学的软件工程里面软件项目管理早已经忘记许多,最近接了一个婚姻的flash来做,和一个师弟一起干这样的活,对这个软件开发管理有一点感触。由于制作这个flash 的时候需求不完整的。在制作过程当中,需求不断更改,并且不断满足客人的需要。我们大学老师金老师说过,软件的需求是一直伴随软件开发项目的开始到结束。也就是说,需求不能一下子完全满足客人的需求,在开发的过程中,需要更改并加以完善。 

夏天的树人的专栏 685
上一篇: hibernate配置文件hibernate.cfg.xml的详细解释
下一篇: 估算项目的时间进度!
dw_java08
博客等级 码龄15年 122粉丝 66原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值