当前位置: 首页 > news >正文

8 软件项目管理

软件项目管理

  • 1、软件项目管理概念
    • 1.1 软件项目管理内容
    • 1.2 软件项目管理的4P要素
      • 人员
      • 产品
      • 过程
      • 项目
  • 2、软件项目度量
    • 2.1 软件项目度量定义及度量方法
    • 2.2 面对规模的度量
    • 2.3 面对功能的度量
    • 2.4 软件估算
      • 三点期望值法
        • 案例分析
      • 基于过程分解的估算
      • 基于经验的软件估算
      • COCOMO经验估算模型
  • 3、软件项目计划
    • 3.1 项目进度计划概念与可视化
    • 3.2 WBS分解与任务网络图
      • 编制项目进度计划的步骤
      • WBS工作分解结构
      • 关键路径计算

1、软件项目管理概念

·计划、协调、度量、监控、控制及报告等管理方法在软件开发和维护中的具体应用,以保证整个过程是系统的、有原则的、可量化的(IEEE610.12-90).

软件项目管理是为了使软件项目能够按照预定的成本、进度、质量顺利完成,而对人员(People)、产品(Product)、过程(Process)和项目(Project)进行分析和管理的活动。

1.1 软件项目管理内容

在这里插入图片描述

1.2 软件项目管理的4P要素

在这里插入图片描述

人员

  1. 客户:阐明软件需求的人员。
  2. 项目管理者:计划、激励、组织和控制软件开发人员。
  3. 高级管理者:负责定义业务问题。
  4. 开发人员:拥有开发产品或应用程序所需技能的人员。
  5. 最终用户:直接使用或者与软件产品交互的人。
  • 团队类型
    1. 封闭式:按照权利层次来组织团队,做过去类似项目有优势,难以承担创新性项目。
    2. 随机式:松散。专家组合型团队。有创新优势,难以承担有次序执行的项目。
    3. 开放式:封闭式+随机式。适合解决有次序又有创新的复杂项目,效率可能不是太高。
    4. 同步式:根据项目分解进行分工,适合松散耦合子系统项目,项目集成可能会遇到问题。

产品

在这里插入图片描述

过程

在这里插入图片描述

项目

在这里插入图片描述

2、软件项目度量

2.1 软件项目度量定义及度量方法

当你能够度量你所说的事物,并能用数字表达它时,你就对它有了一定了解;反之,如果不能测量他,也不能用数字表达,就说明你对它的了解还不深入,不能令人满意。

软件项目管理的成熟化也需要度量与数字化,目的是持续改进软件过程,并用于项目估算、质量控制、生产率评估等。

  • 软件项目度量内容

    1. 生产率度量:项目工作量、项目周期、项目成本
    2. 质量度量:产品发布之前发现的缺陷数;产品发布后用户报告的缺陷数;产品的运行速度
      行业及组织的历史数据是软件项目度量的基础。
  • 软件项目度量的方法:面对规模的度量;面向功能点的度量;面向对象的度量;面向用例的度量

2.2 面对规模的度量

通过对质量和(或)生产率的测量进行规范化而得到的,这些测量是根据开发过的软件的规模得到的。

  1. 干行代码(KLOC):这些代码指的是源代码,通过源代码的行数来直观度量一个软件程序有多大规模。
  2. 生产率(PM):PM=L/E,L表示代码总量(单位:KLOC),E表示软件工作量(单位:人月)
  3. 每干行代码的平均成本(CKL):CKL=S/L,S为软件项目总开销,L表示代码总量(单位:KLOC)
  4. 代码出错率(EQRI):EQRI=Ne/L,Ne表示代码出错的行数,L表示代码总量(单位:KLOC)
  5. 文档与代码比(DI):DI=Pd/L,Pd表示文档页数,L表示代码总量(单位:KLOC)

在这里插入图片描述

  • 优点:简单易行,自然直观
  • 缺点:依赖于程序设计语言的表达能力和功能;软件开发初期很难估算出最终软件的代码行数;对精巧的软件项目不合适。

2.3 面对功能的度量

用软件的功能表示软件规模,应用最广泛的是功能点(Function Pointment,FP)法。
项目开发初期就可估算出。功能点计算目前主要基于经验公式。
在这里插入图片描述

UFC相关的五类组件

  1. ·内部逻辑文件(ILF,Internal Logical Files )
    • 一个用户可识别的逻辑相关的数据组,它在应用程序边界内,由用户输入来维护。
    • 它可能是某个大型数据库的一部分或是一个独立的文件。
  2. 外部接口文件(EIF,External Interface Files)
    • ·一个用户可识别的逻辑相关的数据组但只能被引用,且数据完全存于软件外部,由另一个应用程序进行维护
    • 是机器可读的全部接口(如磁盘或磁带上的数据文件)
    • 是另一个应用程序的内部逻辑文件
  3. 外部输入(El,ExternalInput)
    • 来自于软件外部的数据输入
    • 控制信息(不更新ILF)/业务逻辑信息(更新ILF)
    • 可来自于一个数据输入屏幕或其他应用程序。
  4. 外部输出(EO,External Output)
    • 经过处理的数据,由程序内部输出到外部
    • 从ILF、EIF中取出数据经过一定的组合、计算后得出的输出数据,如生成报表,派生数据,可能更新ILF
  5. 用户查询(EQ.External Query)
    • 一个输入输出的组合过程,从一个或多个ILF、EIF中取出数据输出到程序外部
    • 输入过程不更新ILF,输出过程不进行任何数据处理

在这里插入图片描述

  • UFC计算
    在这里插入图片描述
    在这里插入图片描述

14个复杂性调节因素 F i F_i Fi

在这里插入图片描述

  • 优点:与程序设计语言无关,在开发前就可以估算出软件项目的规模
  • 不足:没有直接涉及算法的复杂度,不适合算法比较复杂的软件系统;功能点计算主要靠经验公式,主观因素比较多。

一个功能点开发代码行数

在这里插入图片描述

2.4 软件估算

概念:项目启动之前,软件团队应该估算将要做的工作、所需要的资源、成本、从开始到完成的时间,也即是对这些内容进行预测。

策略:项目度量方法为项目估算提供了依据与有效输入;尽量把估算推迟到项目的后期进行;根据已经完成的项目进行估算

  • 项目估算方法
    1. 基于分解技术的项目估算方法:基于问题分解的估算(基于LOC、基于功能点FP);基于过程分解的估算
    2. 基于经验的项目估算方法:基于回归分析的经验估算模型(基于LOC、基于功能点FP);COCOMO模型

三点期望值法

在基于问题的分解估算方法中,通过估计最大值,最小值,最可能值的加权平均值作为期望值来估算。
估计期望值 = ( 最大值 + 4 × 最可能值 + 最小值 ) / 6 估计期望值=(最大值+4\times最可能值+最小值)/6 估计期望值=(最大值+4×最可能值+最小值)/6

例如:如果估计系统X规模的最大值为100KLOC,最小值为50KLOC,最可能值为60KLOC,则其估计期望规模为 ( 100 + 4 x 60 + 50 ) / 6 = 65 K L O C (100+4x60+50)/6=65KLOC (100+4x60+50)/6=65KLOC

案例分析

在这里插入图片描述

  • 基于LOC的估算
    在这里插入图片描述
  • 基于功能点的估算
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

基于过程分解的估算

在这里插入图片描述

基于经验的软件估算

基于回归分析的经验估算模型
在这里插入图片描述
在这里插入图片描述

COCOMO经验估算模型

  • COCOMO模型?
    COCOMO是指COnstructive COst MOdel,构造性成本模型。Boehm于1981年提出,用于对软件开发项目的规模、成本、进度等方面进行估算。COCOMO模型是一个综合经验模型,模型中的参数取值来自于经验值,并且综合了诸多的因素、比较全面的估算模型。在欧盟国家应用较为广泛。

  • COCOMO模型的层次:支持不同的阶段

    1. 基本COCOMO摸型:系统开发的初期,估算整个系统的工作量(包括维护)和软件开发和维护所需的时间
      在这里插入图片描述
      在这里插入图片描述

    2. 中间COCOMO模型:估算各个子系统的工作量和开发时间
      在这里插入图片描述

      • EAF的取值(考虑15个因素):
        1. 软件产品属性(3):软件可靠性,软件复杂性,数据库的规模
        2. 计算机属性(4):程序执行时间,程序占用内存大小,软件开发环境的变化,软件开发环境的响应速度
        3. 人员属性(5):分析员能力,程序员能力,领域经验,开发环境的经验,程序设计语言的经验
        4. 项目属性(3):软件开发方法的能力,软件工具的数量和质量,软件开发的进度要求
      • EAF的取值(范围):很低、低、正常、高、很高、极高;Boehm建议取值范围[0.70-1.66];·EAF的计算=ПF:(i=1…15)
      • 调节因子及其取值由统计结果和经验决定,不同的软件开发组织在不同的时期可能会有不同的取值
    3. 详细COCOMO摸型:估算独立的软构件,如各个子系统的各个模块的工作量和开发时间

3、软件项目计划

3.1 项目进度计划概念与可视化

对项目进行任务划分,定义任务之间的依赖关系,并进行时间估算和资源分配,确保以最佳的时间与成本输出满足质量要求的产品。

编制项目计划本质是一个优化问题。
在这里插入图片描述

  • 表示软件项目工作量(成本)与开发时间之间的PNR曲线
    在这里插入图片描述

  • 项目进度计划的价值

    1. 有序、可控制地对软件项目进行管理;
    2. 确保员工保持高生产率;
    3. 及时交付软件产品;
    4. 降低软件开发成本;
    5. 提高客户满意度;
    6. 及时发布产品新版本。
  • 项目进度计划的可视化

    1. 甘特图
      在这里插入图片描述
      工具:微软的Project软件,可以显示进度条模式
      在这里插入图片描述
  • 里程碑
    里程碑显示项目进展中重大工作完成。里程碑不同于活动,活动是需要消耗资源的,里程碑仅仅表示事件的标记。
    在这里插入图片描述

3.2 WBS分解与任务网络图

编制项目进度计划的步骤

在这里插入图片描述

WBS工作分解结构

工作分解结构(Work Breakdown Structure)是将项目按照功能或过程进行逐层分解,直到划分为若干内容单一、便于组织管理的单项工作,最终形成的树型结构示意图。

  • 作用:

    1. 相关成员可直观了解软件项目中的各项任务(活动);
    2. 将项目分解为可管理的任务(活动);
    3. 作为项目计划与跟踪的基础。
  • 分解模式
    在这里插入图片描述

  • WBS构建应该注意的原则

    1. 一个任务只应该在WVBS中的一个地方出现
    2. WVBS中某项任务的内容是其下所有VVBS项的总和
    3. 一个WBS项只能由一个人责任,其他人只能是参与者
    4. WBS必须与实际工作中的执行方式一致
    5. 应让项目团队成员积极参与创建VVBS,以确保WVBS的一致性
    6. 每个WVBS项都必须文档化,以确保准确理解已包括和未包括的工作范围
    7. WBS可以根据需求进行必要变更维护
  • 任务网络图
    在这里插入图片描述

关键路径计算

在任务网络图中,从项目开始到项目完成有许多条路径,路径上所有弧权重之和最大的路径(路径最长)叫关键路径。

在整个任务网络图中非最长的路径都叫非关键路径。
在这里插入图片描述
关键路径的意义:关键路径上任何任务(活动)的延长都会导致整个项目周期的延长;如果缩短项目周期,就必须缩短关键路径的长度;项目经理应该随时关注关键路径上任务(活动)的完成情况以及关键路径是否发生了变化;对WBA中任务的串行和并行安排方式有指导意义。

  • 可用资源对项目计划与关键路径的影响
    实例:
    有一个停车管理软件需要开发,包含三个功能:停车位管理、停车收费管理、人员管理
    每个功能都需要经过三个活动:需求分析、系统设计、系统开发,假定这三个功能在这三个活动上花费的时间分别为(5天、4天、3天),(5天、4天、4天),(4天、5天、5天)。
    有三个工程师:一个需求分析员、一个软件设计师、一个程序员。如何安排此项目活动比较好?

在这里插入图片描述
在这里插入图片描述

相关文章:

8 软件项目管理

软件项目管理 1、软件项目管理概念1.1 软件项目管理内容1.2 软件项目管理的4P要素人员产品过程项目 2、软件项目度量2.1 软件项目度量定义及度量方法2.2 面对规模的度量2.3 面对功能的度量UFC相关的五类组件14个复杂性调节因素 F i F_i Fi​一个功能点开发代码行数 2.4 软件估算…...

【移除bpmn-js流程图中的logo图标】

在node_modules文件中查找 bpmn-js\dist\bpmn-modeler.development.js bpmn-js\lib\BaseViewer.js在文件中搜索linkMarkup var linkMarkup <a href"http://bpmn.io" target"_blank" class"bjs-powered-by" title"Powered by bpmn.i…...

Springboot集成ElasticSearch实现minio文件内容全文检索

一、docker安装Elasticsearch &#xff08;1&#xff09;springboot和Elasticsearch的版本对应关系如下&#xff0c;请看版本对应&#xff1a; 注意安装对应版本&#xff0c;否则可能会出现一些未知的错误。 &#xff08;2&#xff09;拉取镜像 docker pull elasticsearch:7…...

ISAAC SIM踩坑记录--ROS2相机影像发布

其实这个例子官方和大佬NVIDIA Omniverse和Isaac Sim笔记5&#xff1a;Isaac Sim的ROS接口与相机影像、位姿真值发布/保存都已经有详细介绍了&#xff0c;但是都是基于ROS的&#xff0c;现在最新的已经是ROS2&#xff0c;这里把不同的地方简单记录一下。 搭建一个简单的场景&a…...

CSS Module:告别类名冲突,拥抱模块化样式(5)

CSS Module 是一种解决 CSS 类名冲突的全新思路。它通过构建工具&#xff08;如 webpack&#xff09;将 CSS 样式切分为更加精细的模块&#xff0c;并在编译时将类名转换为唯一的标识符&#xff0c;从而避免类名冲突。本文将详细介绍 CSS Module 的实现原理和使用方法。 1. 思…...

JavaSE常用API-日期(计算两个日期时间差-高考倒计时)

计算两个日期时间差&#xff08;高考倒计时&#xff09; JDK8之前日期、时间 Date SimpleDateFormat Calender JDK8开始日期、时间 LocalDate/LocalTime/LocalDateTime ZoneId/ZoneDateTIme Instant-时间毫秒值 DateTimeFormatter Duration/Period...

AutoDL上进行tensorboard可视化

1.下载SSH隧道工具 输入ssh指令、ssh密码、代理到本地端口、代理到远程端口 2.在实例中执行&#xff1a;export https_proxyhttp://127.0.0.1:1080 3.在实例中执行&#xff1a;tensorboard --port 6006 --logdir work_dirs 4.打开 http://localhost:6006/ 即可...

20.UE5UI预构造,开始菜单,事件分发器

2-22 开始菜单、事件分发器、UI预构造_哔哩哔哩_bilibili 目录 1.UI预构造 2.开始菜单和开始关卡 2.1开始菜单 2.2开始关卡 2.3将开始菜单展示到开始关卡 3.事件分发器 1.UI预构造 如果我们直接再画布上设计我们的按钮&#xff0c;我们需要为每一个按钮进行编辑&#x…...

【C语言指南】C语言内存管理 深度解析

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《C语言指南》 期待您的关注 引言 C语言是一种强大而灵活的编程语言&#xff0c;为程序员提供了对内存的直接控制能力。这种对内存…...

前海华海金融创新中心的工地餐点探寻

​前海的工地餐大部分都是13元一份的哈。我在前海华海金融创新中心的工地餐点吃过一份猪杂饭&#xff0c;现做13元一份。我一般打包后回公司吃或直接桂湾公园找个环境优美的地方吃饭。 ​我点的这份猪杂汤粉主要是瘦肉、猪肝、肉饼片、豆芽和生菜&#xff0c;老板依旧贴心问需要…...

索引及练习

1.索引 &#x1f4d6;什么是索引&#xff1f; 1. 索引是对数据库一列或者多列的值进行排序的一种结构。 2. 索引的建立会大大提高 mysql 的检索速度。 3. 如果想高效的使用 mysql, 而且数据量大时&#xff0c;需要花费事件去设计索引&#xff0c;建立优秀的索引规 则&a…...

java版嘎嘎快充汽车单车充电系统源码系统jeecgboot

汽车使用云快充1.6 1.5协议&#xff0c;单车用的铁塔协议 前端uniapp、后端jeecgbootvue2...

vueRouter路由切换时实现页面子元素动画效果, 左右两侧滑入滑出效果

说明 vue路由切换时&#xff0c;当前页面左侧和右侧容器分别从两侧滑出&#xff0c;新页面左右分别从两侧滑入 效果展示 路由切换-滑入滑出效果 难点和踩坑 现路由和新路由始终存在一个页面根容器&#xff0c;通过<transition>组件&#xff0c;效果只能对页面根容器有效…...

MacOS编译hello_xr——记一次CMake搜索路径限制导致的ANDROID_NATIVE_APP_GLUE not found

首先,由于之前使用过Unity, 系统已经装好了android SDK和NDK, 所以在hello_xr文件夹下, 用local.properties文件来设置系统中二者的路径: sdk.dir/Applications/Unity/Hub/Editor/2022.3.48f1c1/PlaybackEngines/AndroidPlayer/SDK/ # ndk.dir/Applications/Unity/Hub/Editor/…...

基于NI Vision和MATLAB的图像颜色识别与透视变换

1. 任务概述 利用LabVIEW的NI Vision模块读取图片&#xff0c;对图像中具有特征颜色的部分进行识别&#xff0c;并对识别的颜色区域进行标记。接着&#xff0c;通过图像处理算法检测图像的四个顶点&#xff08;左上、左下、右上、右下&#xff09;&#xff0c;并识别每个顶点周…...

【Linux:IO多路复用(select、poll函数)

目录 什么是IO多路复用&#xff1f; select: 参数介绍&#xff1a; select函数返回值&#xff1a; fd_set类型&#xff1a; 内核如何更新集合中的标志位 处理并发问题 处理流程的步骤&#xff1a; poll: poll的函数原型&#xff1a; 参数介绍&#xff1a; select与p…...

计数排序(C语言)

一、步骤 1.首先&#xff0c;遍历数组统计出相同元素出现的次数 2.根据统计的结果将序列收回到原来的数组 方法&#xff1a;我们可以建立一个临时数组用来存储元素出现的次数&#xff0c;然后用该数组的下标表示该元素&#xff08;即假设i为临时数组的下标&#xff0c;a[i]为…...

LabVIEW弧焊参数测控系统

在现代制造业中&#xff0c;焊接技术作为关键的生产工艺之一&#xff0c;其质量直接影响到最终产品的性能与稳定性。焊接过程中&#xff0c;电流、电压等焊接参数的精确控制是保证焊接质量的核心。基于LabVIEW开发的弧焊参数测控系统&#xff0c;通过实时监控和控制焊接过程中关…...

Android笔记(三十七):封装一个RecyclerView Item曝光工具——用于埋点上报

背景 项目中首页列表页需要统计每个item的曝光情况&#xff0c;给产品运营提供数据报表分析用户行为&#xff0c;于是封装了一个通用的列表Item曝光工具&#xff0c;方便曝光埋点上报 源码分析 核心就是监听RecyclerView的滚动&#xff0c;在滚动状态为SCROLL_STATE_IDLE的时…...

【Linux】内核模版加载modprobe | lsmod

modprobe modprobe 是一个用于加载和卸载 Linux 内核模块的命令。它不仅能够加载单个模块&#xff0c;还能处理模块之间的依赖关系&#xff0c;确保所有依赖的模块都被正确加载。以下是一些关于 modprobe 命令的基本用法和常见选项的详细介绍。 基本语法 modprobe [option…...

Android从Drawable资源Id直接生成Bitmap,Kotlin

Android从Drawable资源Id直接生成Bitmap,Kotlin val t1 System.currentTimeMillis()val bmp getBmpFromDrawId(this, R.mipmap.ic_launcher_round)Log.d("fly", "1 ${bmp?.byteCount} h${bmp?.height} w${bmp?.width} cost time${System.currentTimeMillis…...

蓝桥杯——数组

1、移动数组元素 package day3;import java.util.Arrays;public class Demo1 {public static void main(String[] args) {int[] arr {1,2,3,4,5,6};int k 2;int[] arr_new f(arr,k);for (int i : arr_new) {System.out.print(i",");}//或System.out.println();St…...

在Flutter中,禁止侧滑的方法

在Flutter中&#xff0c;如果你想禁用侧滑返回功能&#xff0c;你可以使用WillPopScope小部件&#xff0c;并在onWillPop回调中返回false来阻止用户通过侧滑返回到上一个页面。 class DisableSwipePop extends StatelessWidget {overrideWidget build(BuildContext context) {…...

黑盒测试案例设计方法的使用(1)

黑盒测试用例的设计是确保软件质量的关键步骤之一。 一、等价类划分法 定义&#xff1a;把所有可能的输入数据&#xff0c;即程序的输入域划分成若干部分&#xff08;子集&#xff09;&#xff0c;然后从每一个子集中选取少数具有代表性的数据作为测试用例。 步骤&#xff1a…...

第二十一章 TCP 客户端 服务器通信 - 客户端OPEN命令

文章目录 第二十一章 TCP 客户端 服务器通信 - 客户端OPEN命令客户端OPEN命令 第二十一章 TCP 客户端 服务器通信 - 客户端OPEN命令 客户端OPEN命令 客户端OPEN命令与服务器端OPEN命令只有一个方面的不同&#xff1a;第一个设备参数必须指定要连接的主机。要指定主机&#xf…...

pycharm报错:no module named cv2.cv2

1、问题概述&#xff1f; 在项目中报错no module named cv2.cv2&#xff0c;就会导致import cv2 as cv无法使用。 需要安装opencv-python,一个开源的计算机视觉库。 2、解决办法&#xff1f; 【第一步&#xff1a;如果当前环境中已经安装&#xff0c;先卸载】 有时候会出现…...

Android音视频直播低延迟探究之:WLAN低延迟模式

Android WLAN低延迟模式 Android WLAN低延迟模式是 Android 10 引入的一种功能&#xff0c;允许对延迟敏感的应用将 Wi-Fi 配置为低延迟模式&#xff0c;以减少网络延迟&#xff0c;启动条件如下&#xff1a; Wi-Fi 已启用且设备可以访问互联网。应用已创建并获得 Wi-Fi 锁&a…...

docker 部署freeswitch(非编译方式)

一&#xff1a;安装部署 1.拉取镜像 参考&#xff1a;https://hub.docker.com/r/safarov/freeswitch docker pull safarov/freeswitch 2.启动镜像 docker run --nethost --name freeswitch \-e SOUND_RATES8000:16000 \-e SOUND_TYPESmusic:en-us-callie \-v /home/xx/f…...

OpenHarmony的公共事件

OpenHarmony的公共事件 公共事件简介 CES&#xff08;Common Event Service&#xff0c;公共事件服务&#xff09;为应用程序提供订阅、发布、退订公共事件的能力。 公共事件分类 公共事件从系统角度可分为&#xff1a;系统公共事件和自定义公共事件。 系统公共事件&#…...

深度学习transformer

Transformer可是深度学习领域的一个大热门呢&#xff01;它是一个基于自注意力的序列到序列模型&#xff0c;最初由Vaswani等人在2017年提出&#xff0c;主要用于解决自然语言处理&#xff08;NLP&#xff09;领域的任务&#xff0c;比如机器翻译、文本生成这些。它厉害的地方在…...