软件工程(一):软件开发过程和管理

软件工程是从工程学的角度认识软件在大型系统中的设计和应用,关注软件产品本身和软件开发的整个过程,是一个迭代学习,不断试错的工程学

软件工程划分成4个模块,需求工程、软件设计、软件实现和软件测试。本文先提出几个小问题帮助大家理解,然后从整体的角度介绍软件项目的开发过程和管理,然后根据上述四个方面细致地解释介绍详细的内容

什么是软件?

软件=程序+数据+文档

为什么需要软件工程?

这要从软件的本质出发来考虑,软件本身具有复杂性、一致性、可变性和不可见性,这类内在特性导致软件开发逐渐变得困难起来乃至于无法控制,并且随着软件规模的急速增长,传统的软件开发方法已经不适用于如此规模复杂度的软件了,因而需要一个系统的、体系的工程学来帮助我们规划整个软件的设计过程。软件工程也能够帮助我们在软件生产的过程中解决许多问题,优化策略方法。

介绍几个工程化的思想帮助理解

分治思想:将复杂问题划分成若干个可独立解决的简单子问题,分别独立求解,最后再将各个子问题的解综合起来,形成复杂问题的解

折中和侧重思想:不同的需求之间往往存在矛盾和冲突,需要折中来做出取舍,找到双方都满意的点(eg.算法设计中,时间和空间的这种;安全性和速度的折中),不同类型的软件对质量的目标要求是有侧重的(eg.实时系统侧重可靠性和效率)

复用思想:复用已有的的功能模块,提高开发效率

软件工程过程

目录

  • 软件工程(一):软件开发过程和管理
      • 什么是软件?
      • 为什么需要软件工程?
      • 介绍几个工程化的思想帮助理解
      • 软件工程过程
    • 一、软件项目开发过程与管理
      • (一)典型软件过程模型
        • 1、瀑布模型:
        • 2、增量模型: ——增量过程模型
        • 3、快速应用程序开发: ——增量过程模型
        • 4、快速原型开发模型: ——演化过程模型
        • 5、螺旋模型: ——演化过程模型
      • (二)软件项目开发管理
        • 1、4P:people、product、process、project
        • 2、软件项目估算:时段项目规模、工作量、时间和成本等进行预算和估计的过程
        • 3、软件项目进度计划
        • 4、项目风险管理

一、软件项目开发过程与管理

开发过程是指软件从无到有的整个开发周期,包含从需求到实现再到维护几个典型的阶段,同时人们定义了几个典型的软件过程模型,将这些过程模型代表着不同的迭代方式。

开发管理是从开发人员对软件开发过程的一系列安排和管理。

(一)典型软件过程模型

1、瀑布模型:

定义:开发阶段严格按照线性方式进行,每一个阶段具有相关的里程碑和交付产品并且书需要求人和验证,整个过程完全依赖规格说明文档

特点:因为是严格线性的,所以最初的需求就需要绝对的准确,这样后续的步骤才能够都正确

优点:简单易懂快速,适用于工程量较小的项目,在项目之初就能够全面了解需求

缺点:无法快速响应用户需求变化,以至于无法满足用户的需求,乃至造成重大损失

增量过程模型:需求明确,但是整个开发工程中不适合单纯用线性模型,用户迫切需要一套功能有限的产品

2、增量模型: ——增量过程模型

定义:以串行迭代的方式运用瀑布模型,开发过程被划分成几个增量,每一个增量都在前一个增量的基础上开发新功能,实现从核心功能到附加各种特性,逐步完善,直至产生最终产品。

优点:每次交付一个子产品,供用户体验,给用户打了镇定剂,用户能够在体验过程中发掘自己的需求,项目的失败风险低

缺点:在迭代的过程中不能破坏上一个增量所构造的东西,所以迭代的难度会逐级增大,最初选择的体系结构很大程度上影响着开发的成功率。

3、快速应用程序开发: ——增量过程模型

定义:是瀑布模型的高速变体,并行运行瀑布模型,根据不同功能划分项目组,并行开发,最后合并

优点:提高软件交付速度(并行)、可以利用企业已有资产进行开发(复用)

缺点:需要大量人力资源,每一个项目组就需要一个满配的团队;对企业的管理水平要求高,技术风险大(合并的时候是风险最大的)

演化过程模型是为了适应经常发生变化的需求,本质是循环反复不断地调整当前系统以适应需求变化

4、快速原型开发模型: ——演化过程模型

定义:根据基本需求快速开发得到一个原型,根据用户对于原型的评估和意见进行完善,开始正式开发

优点:原型可与用户交互,方便用户沟通;可以弄清用户的需求

缺点:为了尽快完成原型,整体软件的质量和长期的可维护性可能被忽视

和增量模型的区别:增量模型是开发出核心功能,然后往上叠加,每一步都是重要的;而原型开发中的原型只是为了得到用户真实的需求,原型可能在正式开发的时候被抛弃。

5、螺旋模型: ——演化过程模型

定义:加入了风险分析,将软件生存周期划分成规划、风险分析、开发和评估四个循环重复的阶段,评估和风险分析阶段会做出项目是否继续的决策

优点:结合原型开发和瀑布模型的优势,是风险驱动的

缺点:加入了风险评估,周期变长,成本变高,项目管理变得困难,演化速度不易把控

(二)软件项目开发管理

1、4P:people、product、process、project

2、软件项目估算:时段项目规模、工作量、时间和成本等进行预算和估计的过程

分段估算:对项目中的各阶段细化估算

专家判断:

参数估算:通过大量项目的历史数据进行统计分析,包括代码行技术、功能点技术方法、cocomo模型、用例点估算、故事点方法、机器学习法等

代码行技术:根据过去开发类似产品的经验估计代码行数、计算估计成本和工作量

功能点方法:根据软件信息域进行估算

故事点方法:根据功能的大小为没有个功能(故事)分配一个点值,关注不同功能之间点值的相对大小

3、软件项目进度计划

因为各任务之间存在相互依赖关系,画出网络图并标上开始时间和结束时间(最早和最晚),其中关键路径的时间之和就是项目开发所需要的时间,根据网络图绘制任务进度安排甘特图,画出人员资源分配图


4、项目风险管理

风险识别->风险评估->应对计划->风险控制

建立风险表


未完待续,感谢阅读~

未经允许禁止转载

软件工程(一):软件开发过程和管理,典型软件过程模型相关推荐

  1. 软件开发过程与项目管理(13.软件项目集成计划控制)

    软件开发过程与项目管理(13.软件项目集成计划控制 项目集成计划 软件项目管理的最重要的四个要素 四要素的关系 项目集成计划的作用 项目集成计划的内容 项目集成计划的流程 项目集成计划风险 项目集成计 ...

  2. [架构之路-131]-《软考-系统架构设计师》-软件工程-1-软件工程方法大全(软件开发过程方法、软件开发过程模型、逆向工程、净室软件工程)

    前言: 第3章 软件工程 3.1 软件开发过程方法 3.1.1 什么是软件工程 软件工程是一门研究用工业硬件生产的工程化方法构建和维护有效.实用和高质量的软件的学科. 它涉及程序设计语言.数据库.软件 ...

  3. 软件开发工具(第2章:软件开发过程及其组织)

    一.软件开发的困难 程序员做好软件工作的关键是什么? 关键是两个转换: 第一个转换是用户对软件功能的理解与程序员对软件功能的理解之间的转换. (不同⾏业的⼈员对于事物的认识⽅法与描述⽅法是不同的.) ...

  4. 288.软件开发过程与软件测试

    1.软件开发过程概述 1.1 软件开发的阶段.活动及角色 1.软件工程的阶段 软件工程的三个阶段: 定义.开发.检验交付与维护 (1)定义阶段:可行性研究初步项目计划.需求分析.如图2-1所示. 图2 ...

  5. CMMI软件开发过程及能力成熟度模型评估

    一.什么是CMMI CMMI(Capability Maturity Model Integration,能力成熟度模型集成)是由美国卡内基-梅隆大学软件工程研究所推出的评估软件能力与成熟度的一套标准 ...

  6. 软件开发过程培训总结

    软件开发过程培训主要从软件开发过程介绍.团队与角色.软件开发过程.面向对象建模与开发工具.构建神经网络实例等方面进行了学习. 一.首先明确:软件=代码+文档,软件过程是开发.运行.维护和修复软件的系统 ...

  7. 软件开发进度管理探析

    随着计算机信息技术的飞速发展,软件项目在开发过程中的进度管理越来越受到重视.如果进度管理做得好,软件开发项目将通过延长工作时间和提高质量来满足预算要求来减少.相反,工作时间会延长,这会降低质量或超出预 ...

  8. 真实项目技术总结:软件开发过程和成本

    要点提示: 软件开发过程和成本. 软件团队的人力配置和成本计算. 生活中用到的软件,大多数功能没什么技术难度,软件公司都能开发完成.但是开发过程的组织.实施有问题,所用技术和工具也有问题,使得软件开发 ...

  9. BPM软件是什么?BPM软件跟BPA有关联吗?

    什么是BPM软件? 业务流程管理 (BPM) 软件是一种企业级软件解决方案,用于自动执行重复性任务.管理基本处理和处理流程逻辑. BPM系统优化和加速流程,提高效率.通过确保以一致的方式处理工作并在正 ...

最新文章

  1. python-简单测试wsgi
  2. IOS学习之多线程(9)--NSOperation简单介绍
  3. Java注释小技巧:使用linkplain链接跳转到对应的代码
  4. 每天一道LeetCode-----最长无重复子串
  5. 用计算机 发的,计算机的发分类及应用.ppt
  6. checkbox checked属性值
  7. 80行代码使用Python+tkinter实现一个计算器
  8. Linux C编程之七(2) 系统IO函数
  9. PHP RSA2 签名算法
  10. 印象笔记mac版 同步问题_印象笔记国际版无法登陆/同步问题
  11. match函数的用法
  12. 计算机的所有符号,电脑上怎么打各种符号
  13. 又有朋友被骗入传销了!
  14. python制作微信个人二维码怎么做_如何用Python制作微信的好友背景墙?
  15. Python 北京二手房成交数据分析过程
  16. Vue3中watch和watchEffect监听的用法
  17. 如何实现微信内域名防封,微信域名防封跳转
  18. 量子计算机是否存在相对论,从量子到宇宙——颠覆人类认知的科学之旅
  19. 【网络协议】转载:关于TCP与UDP的接收recv和recvfrom
  20. 2016中国移动办公论坛暨《2016中国移动办公男神报告》发布会成功举办

热门文章

  1. 【shell脚本】常用工具的学习grep、sed、awk、cut
  2. Qt调用C++动态链接库--导出类
  3. linux发送http post请求
  4. 2. 事件捕获 及 如何阻止冒泡
  5. 如何开发一个高质量的混合现实应用程序
  6. c语言比较好的gui界面库,几款开源的图形界面库(GUI Libraries)
  7. get connection timeout retry : 1
  8. 处在一个浮躁的时代如何做自己
  9. 如何在Origin中打出Å
  10. Linux CentOS 8(计划任务_Cron)