前言:
对非软件领域的其他领域[比如化工、船舶等等]的工程项目有了解的人,应该都知道:工程规模扩大,其他相应的人力成本,过程计算,工程周期等等并不是线形关系。更经常地,您会发现,有时候小工程和大工程适用的科学理论体系都是不同的。
依据小工程的经验判断大工程问题是单纯的幻想,那么,软件领域又有哪些值得注意或者有趣的规律呢?
软件规模和沟通交流的关系
多人项目潜在的交流途径为 N(N-1)/2 个。比如N=10,潜在交流途径则为45个。
交流的途径越多,消耗的时间也就越多,交流出错的可能性就越大。
改善途径:
在可能的情况下,分解项目团队的规模。
阅读和撰写文档是减少交流次数的有效方法之一。
软件规模和BUG的关系
软件规模既影响BUG的数量,也影响BUG的类型。
小的软件项目中,对质量影响最大的是开发者的技能。
越大的软件项目中,需求和架构的错误对质量的影响逐步加大。但无论多么大型的项目,开发者带来的问题依然超过问题总数的50%以上。
在其他条件都相等的时候,大的软件项目生产率低于小的软件项目
项目大小[代码行] | 每人年的代码行数[括号里是cocomo II均值] |
1K | 2500 - 25000 [4000] |
10K | 2000 - 25000 [3200] |
100K | 1000 - 20000 [2600] |
1000K | 700 - 10000 [2000] |
10000K | 300 - 5000 [1600] |
在其他条件都相等的时候,大的软件项目BUG率高于小的软件项目
项目大小[代码行] | 典型的BUG密度[千行BUG数] |
< 2000 | 0-25 |
2000 - 16000 | 0-40 |
16000 - 64000 | 0.5 - 50 |
64000 - 512000 | 2 - 70 |
> 512000 | 4 - 100 |
放大轻量级的方法论要好过缩小重量级的方法论
随着项目规模的增加,工作量超过线形增长的活动有:
交流
计划
管理
需求分析
系统功能设计
接口设计和规格说明
架构
集成
消除缺陷
系统测试
文档生成
此外,其它活动基本还是线形的。
发表评论
-
一个简单的随机数字串函数,欢迎拍砖改进
2006-02-22 14:41 698static public string GenRandom ... -
一个简单的e-mail校验函数,欢迎拍砖改进
2006-02-22 15:13 757/// <summary> /// 校验是否 ... -
一个简单的取用户真实IP函数[B/S],欢迎拍砖改进
2006-02-22 15:28 756可以取的真实IP的哦public static string ... -
一个高效判断字符串是否全数字的函数,请大家指正拍砖
2006-02-22 18:50 964看到很多人都采用正则表达式或者一些其它五花八门的算法。经过简单 ... -
多语言Web系统布局的几个小帖士
2006-02-28 14:50 987基于窗体的整体大小使用级联样式表表达式调整元素的大小 ... -
VS2003中自定义控件的智能提示解决方案备忘
2006-02-28 21:26 979这个问题困饶了很久了。一直没有妥善解决。最近从nhiberna ... -
Oracle中隐式游标和显式游标的教训[同事的经历]
2006-02-28 21:34 833一直以为以下这种语句(执行一)就是隐式游标,跟显式定义游标(执 ... -
一个简单的UrlRewrite示例[演示用,写给同事看的,VS2003环境]
2006-03-20 13:07 922UrlDemo.rar下载比较简单。关键点如下:一.Versi ... -
[笔记]1.软件的质量特性characteristics of software quality
2006-05-17 13:14 769外在特性:该软件产品用户所能感受到的部分。包括:正确性可用性效 ... -
[笔记]2.软件质量的一些统计数据
2006-05-17 13:43 1086一个关键事实:提高开发效率和改善质量的最佳途径——减少代码返工 ... -
[笔记]3.软件代码中的BUG问题的一些记录
2006-05-18 08:50 813题记 你越了解你的对手 ... -
[SQL使用经验]选用 IN 还是 EXISTS,哪个性能更好
2006-09-12 10:08 1335一、EXISTS 并非总比IN 快,究竟应该选用 IN 还是 ... -
两个读取数据库VIew的定义的SQL语句的写法[Oracle /SQL SERVER]
2006-12-01 18:05 1114例如想读取的VIEW名称 MYVIEW在ORACLE中:SEL ... -
部署Excel相关的应用程序过程中遇到“检索COM类工厂中CLSID...”的两个错误的解决方法
2007-01-29 10:52 2053最近用.net写了一个相关Excel的B/S的程序,部署到20 ... -
VS2005无法调试,绑定句柄无效问题的解决方法
2007-02-02 13:04 1972今天我的VS2005调试时遇到以下两个错误: 1.无法连接到名 ... -
[转]数据库存储过程中利用extproc调用共享程序库/动态链接库,间接可以实现调用操作系统命令
2007-02-09 14:49 12631 数据库程序库主要介绍使用ORACLE数据库的LIBRARY ... -
powerdesigner中生成数据库脚本时出现长度限制问题的解决方法
2007-02-09 16:23 939今天有同事问这个问题,错误显示如下:事实上相关设计的脚本可以在 ... -
[转载整理]一本java书的序言——开发历程思绪随笔
2007-11-26 13:16 756以下文字是一本java书的 ...
相关推荐
### 软件工程课程笔记知识点详解 #### 一、软件生命周期 软件生命周期是指软件从概念形成直至报废的整个生命历程。通常分为三个主要阶段: 1. **定义阶段**: - **软件计划**:确定项目的可行性,制定项目计划,...
《软件工程黑书考研一轮复习笔记》是一份全面总结软件工程关键知识点的文档,涵盖了从基本概念到具体实践的多个方面。以下是对其中主要知识点的详细解析: **第一章 基本概念** 1. **软件的概念和特点**:软件是...
4. **四、概要设计说明书.dot**:描述软件的总体架构和模块划分,定义系统组件之间的关系,为详细设计提供蓝图。 5. **五、详细设计说明书.dot**:对概要设计进行细化,包括数据结构、算法选择、界面设计等,为编码...
通过上述对《软件设计师笔记》中涉及的关键知识点的深入解读,我们可以看到软件设计不仅涵盖了技术层面的具体实现细节,还强调了软件生命周期管理的重要性。无论是从体系结构设计到敏捷开发方法,还是从成本估算到内...
10. **互联网时代软件工程方法**:互联网时代强调面向用户、随需即取、面向服务的架构、规模定制和敏捷开发,以及软件即服务的模式。 11. **软件设计模型**:软件设计模型涵盖了数据/类设计、体系结构设计、接口...
4. **开发更好工具**:研发更先进的开发工具以提高开发效率和软件质量。 #### 五、软件工程的概念与目标 **概念**:软件工程是一门指导计算机软件开发和维护的工程学科,它结合了工程学的原理和技术,以经济高效的...
这个项目的描述虽然简洁,但“很好 很强大 云笔记开发 很系统 很厉害”暗示了它在功能、架构设计以及技术实现上的复杂性和先进性。下面我们将详细探讨这个项目可能涉及的关键知识点: 1. **Java编程语言**:作为...
Hadoop是一种开源的分布式存储和计算系统,它由Apache软件基金会开发。在初学者的角度,理解Hadoop的组成部分以及其架构设计是学习Hadoop的基础。 首先,Hadoop的分布式文件系统(HDFS)是其核心组件之一,它具有高...
### MySQL学习笔记详解 #### 一、学习数据库的重要性 ##### 1.1 为何学习数据库 - **岗位需求**:随着互联网技术的发展,几乎所有软件项目都需要数据库的支持。 - **大数据时代的趋势**:“得数据者得天下”,数据...
Spark支持多种编程语言,包括Java、Scala、Python和R,方便不同背景的开发人员使用。 Hive则是另一个Apache项目,它是基于Hadoop的数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供SQL(HiveQL)...
《软件工程课堂笔记精简》PPT学习教案涵盖了软件工程中的关键概念,主要讨论了软件开发过程模型,包括瀑布模型、增量模型、原型开发、螺旋模型以及协同开发模型,并介绍了统一过程(UP)这一现代软件工程方法。...
《架构整洁之道》是软件开发领域的一本经典著作,由知名专家Robert...它教导我们如何通过清晰的架构设计和遵循原则,创造出可持续发展的软件系统,这对于任何希望提升软件开发质量和效率的团队来说都是一份宝贵的指南。
4. **PostgreSQL:** 功能强大的开源对象关系数据库系统,支持复杂查询和事务处理。 5. **MongoDB:** 基于分布式文件存储的NoSQL数据库,适用于Web应用的大规模数据存储。 6. **Redis:** 开源的高性能键值存储...
计算机经历了电子管、晶体管、中小规模集成电路到大规模和超大规模集成电路的四个发展阶段。现代计算机基于·诺依曼结构,由硬件系统(包括运算器、控制器、存储器、输入设备和输出设备)和软件系统(系统软件和应用...
【软件测试技术基础及分类笔记】是对软件测试的初步学习和理解,涵盖了软件的基本概念、错误类型、测试定义、测试用例、测试人员素质、测试与质量保证的关系、软件测试的基本规则以及测试分类等多个方面。...
软件架构设计过程中,4+1视图模型(Kruchten)是一种广泛采用的方法,它包括逻辑视图、进程视图、物理视图、开发视图和使用视图,分别从不同角度描述系统的结构和行为。软件架构的传统风格如层次式、客户端-服务器、...
CRM(Customer Relationship Management)软件是企业用来管理与客户关系的核心系统,它可以帮助企业优化销售、市场营销和服务等业务流程,提高客户满意度和忠诚度。本文将深入探讨CRM软件的实施流程,以及与源码和...
算法与数据结构它们分别涵盖了以下主要内容: 数据结构(Data Structures): ...学习算法与数据结构不仅有助于理解程序的内部工作原理,更能帮助开发人员编写出高效、稳定和易于维护的软件系统。
数据结构与算法是计算机科学的基础,对于任何编程和软件开发工作都有着至关重要的作用。这份"数据结构和算法笔记.rar"的压缩包文件显然是为正在学习这一领域的朋友们准备的宝贵资源。下面,我们将深入探讨其中涉及的...
算法的优劣通常根据其时间复杂度和空间复杂度来衡量,其中时间复杂度常用渐进时间复杂度表示,反映了算法执行速度与问题规模的关系。空间复杂度则关注算法运行所需的存储空间,包括算法本身、输入输出数据和临时空间...