`
阅读更多

前言:
    对非软件领域的其他领域[比如化工、船舶等等]的工程项目有了解的人,应该都知道:工程规模扩大,其他相应的人力成本,过程计算,工程周期等等并不是线形关系。更经常地,您会发现,有时候小工程和大工程适用的科学理论体系都是不同的。

    依据小工程的经验判断大工程问题是单纯的幻想,那么,软件领域又有哪些值得注意或者有趣的规律呢?

 

软件规模和沟通交流的关系
    多人项目潜在的交流途径为 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



放大轻量级的方法论要好过缩小重量级的方法论

随着项目规模的增加,工作量超过线形增长的活动有:
交流
计划
管理
需求分析
系统功能设计
接口设计和规格说明
架构
集成
消除缺陷
系统测试
文档生成

此外,其它活动基本还是线形的。

分享到:
评论

相关推荐

    《软件工程》课程笔记

    ### 软件工程课程笔记知识点详解 #### 一、软件生命周期 软件生命周期是指软件从概念形成直至报废的整个生命历程。通常分为三个主要阶段: 1. **定义阶段**: - **软件计划**:确定项目的可行性,制定项目计划,...

    软件工程黑书考研一轮复习笔记.docx

    《软件工程黑书考研一轮复习笔记》是一份全面总结软件工程关键知识点的文档,涵盖了从基本概念到具体实践的多个方面。以下是对其中主要知识点的详细解析: **第一章 基本概念** 1. **软件的概念和特点**:软件是...

    软件开发文档模板(全套).zip

    4. **四、概要设计说明书.dot**:描述软件的总体架构和模块划分,定义系统组件之间的关系,为详细设计提供蓝图。 5. **五、详细设计说明书.dot**:对概要设计进行细化,包括数据结构、算法选择、界面设计等,为编码...

    软件设计师笔记.docx

    通过上述对《软件设计师笔记》中涉及的关键知识点的深入解读,我们可以看到软件设计不仅涵盖了技术层面的具体实现细节,还强调了软件生命周期管理的重要性。无论是从体系结构设计到敏捷开发方法,还是从成本估算到内...

    软件设计与体系结构期末复习-选择软件设计与体系结构期末复习-选择

    10. **互联网时代软件工程方法**:互联网时代强调面向用户、随需即取、面向服务的架构、规模定制和敏捷开发,以及软件即服务的模式。 11. **软件设计模型**:软件设计模型涵盖了数据/类设计、体系结构设计、接口...

    软件工程笔记(完整版).doc

    4. **开发更好工具**:研发更先进的开发工具以提高开发效率和软件质量。 #### 五、软件工程的概念与目标 **概念**:软件工程是一门指导计算机软件开发和维护的工程学科,它结合了工程学的原理和技术,以经济高效的...

    Jave云笔记开发

    这个项目的描述虽然简洁,但“很好 很强大 云笔记开发 很系统 很厉害”暗示了它在功能、架构设计以及技术实现上的复杂性和先进性。下面我们将详细探讨这个项目可能涉及的关键知识点: 1. **Java编程语言**:作为...

    Hadoop学习笔记.pdf

    Hadoop是一种开源的分布式存储和计算系统,它由Apache软件基金会开发。在初学者的角度,理解Hadoop的组成部分以及其架构设计是学习Hadoop的基础。 首先,Hadoop的分布式文件系统(HDFS)是其核心组件之一,它具有高...

    MySQL笔记.md

    ### MySQL学习笔记详解 #### 一、学习数据库的重要性 ##### 1.1 为何学习数据库 - **岗位需求**:随着互联网技术的发展,几乎所有软件项目都需要数据库的支持。 - **大数据时代的趋势**:“得数据者得天下”,数据...

    spark笔记.zip

    Spark支持多种编程语言,包括Java、Scala、Python和R,方便不同背景的开发人员使用。 Hive则是另一个Apache项目,它是基于Hadoop的数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供SQL(HiveQL)...

    软件工程课堂笔记精简PPT学习教案.pptx

    《软件工程课堂笔记精简》PPT学习教案涵盖了软件工程中的关键概念,主要讨论了软件开发过程模型,包括瀑布模型、增量模型、原型开发、螺旋模型以及协同开发模型,并介绍了统一过程(UP)这一现代软件工程方法。...

    《架构整洁之道》读书笔记.pdf

    《架构整洁之道》是软件开发领域的一本经典著作,由知名专家Robert...它教导我们如何通过清晰的架构设计和遵循原则,创造出可持续发展的软件系统,这对于任何希望提升软件开发质量和效率的团队来说都是一份宝贵的指南。

    数据库笔记.docx

    4. **PostgreSQL:** 功能强大的开源对象关系数据库系统,支持复杂查询和事务处理。 5. **MongoDB:** 基于分布式文件存储的NoSQL数据库,适用于Web应用的大规模数据存储。 6. **Redis:** 开源的高性能键值存储...

    信息技术基础经典笔记.doc

    计算机经历了电子管、晶体管、中小规模集成电路到大规模和超大规模集成电路的四个发展阶段。现代计算机基于·诺依曼结构,由硬件系统(包括运算器、控制器、存储器、输入设备和输出设备)和软件系统(系统软件和应用...

    软件测试技术基础及分类笔记

    【软件测试技术基础及分类笔记】是对软件测试的初步学习和理解,涵盖了软件的基本概念、错误类型、测试定义、测试用例、测试人员素质、测试与质量保证的关系、软件测试的基本规则以及测试分类等多个方面。...

    哈工大 软件架构与中间件 单面A4开卷笔记

    软件架构设计过程中,4+1视图模型(Kruchten)是一种广泛采用的方法,它包括逻辑视图、进程视图、物理视图、开发视图和使用视图,分别从不同角度描述系统的结构和行为。软件架构的传统风格如层次式、客户端-服务器、...

    CRM软件实施流程分析笔记

    CRM(Customer Relationship Management)软件是企业用来管理与客户关系的核心系统,它可以帮助企业优化销售、市场营销和服务等业务流程,提高客户满意度和忠诚度。本文将深入探讨CRM软件的实施流程,以及与源码和...

    尚硅谷老韩java版算法和数据结构讲解代码笔记整理.zip

    算法与数据结构它们分别涵盖了以下主要内容: 数据结构(Data Structures): ...学习算法与数据结构不仅有助于理解程序的内部工作原理,更能帮助开发人员编写出高效、稳定和易于维护的软件系统。

    数据结构和算法笔记.rar

    数据结构与算法是计算机科学的基础,对于任何编程和软件开发工作都有着至关重要的作用。这份"数据结构和算法笔记.rar"的压缩包文件显然是为正在学习这一领域的朋友们准备的宝贵资源。下面,我们将深入探讨其中涉及的...

    自考《02331数据结构》重难点笔记资料.doc

    算法的优劣通常根据其时间复杂度和空间复杂度来衡量,其中时间复杂度常用渐进时间复杂度表示,反映了算法执行速度与问题规模的关系。空间复杂度则关注算法运行所需的存储空间,包括算法本身、输入输出数据和临时空间...

Global site tag (gtag.js) - Google Analytics