文章目录

  • 软件
    • 1.1 软件定义
    • 1.2 软件分类
    • 1.3 软件工程
    • 1.4 软件危机
    • 1.5 软件生存周期
    • 1.6 常用软件过程模型

软件

1.1 软件定义

  • 1983年IEEE软件定义

    计算机程序,文档,运行程序的数据,方法,规则。方法和规则在文档中使用,在程序中实现

  • 简化软件定义

    程序 + 文档 + 数据

1.2 软件分类

1.2.1 基于软件功能的划分可以分为:

系统软件

与计算机硬件紧密配合使计算机各个部件与相关软件及数据协调,高效工作的软件。如os,编译程序

支撑软件

协助用户开发软件的工具性软件

应用软件

有具体作用的应用程序

1.2.2 基于软件规模的划分:

1. 微型软件
2. 小型软件
3. 中型软件
4. 大型软件
5. 甚大型软件
6. 极大型软件

1.3 软件工程

软件工程是指把系统化,规范化,可度量的途径应用与软件开发,运行和维护过程中;研究其实现途径

1.3.1 软件发展的阶段

  1. 程序设计阶段

    • 软件生产个体化:规模小,编写者和使用者是同一个人
    • 软件是设计者头脑中隐含的过程:除程序清单,无文档材料的保存
  2. 程序系统阶段

    • 产品软件:由专门软件开发组织开发
    • 软件作坊:软件开发组织,沿用早期个体化软件开发方法
    • 软件危机:软件维护工作耗费大量的资源
    • 软件工程:1968年,北大西洋公约组织计算机科学家讨论软件危机,提出软件工程
  3. 软件工程阶段

    • 软件危机得到解决:打破软件生产个体化特征,工程化的设计原则方法和标准
    • 新的挑战:微处理器和个人PC,分布式处理系统,局域网,广域网,宽带数字通信
  4. 软件发展

    • 软件架构发生变化:

    • 集中主机环境

    • C/S

  • B/S

1.3.2 软件工程内容

  • 软件工程技术

    1. 软件开发方法学
    2. 软件开发过程
    3. 软件工具和软件工程环境
  • 软件工程学
    1. 软件管理学
    2. 软件经济学
    3. 软件心里学

1.4 软件危机

软件危机指在计算机软件开发和维护过程中遇到的一系列严重问题

1.4.1 主要表现

  • 开发成本和进度估计不准

    延迟交付,取消项目等

  • 用户对已交付软件不满意

    开发人员对用户信息交流不充分,产品不符合用户需求

  • 软件质量靠不住

    软件产品保证技术(审查,复查,测试)未坚持不懈应用软件开发全过程

  • 软件可维护性差

    开发时未考虑,很多错误难以改正

  • 软件没有适当文档资料

1.5 软件生存周期

1.5.1 软件生存周期定义

软件生存周期是指软件从产生,发展到衰亡的组成:

  • 软件定义
  • 软件开发
  • 软件维护

国标《计算机软件开发规范》分为8个阶段

  • 可行性研究预计划

    关键任务:解决问题是什么,有行得通解决方法?粗略计划

    问题定义报告:问题性质,工程目标,工程规模

    可行性研究报告:经济,技术,社会,可行性

    项目开发计划:粗略

  • 需求分析

    关键任务:目标系统必须做什么?可行性研究的需求是粗略的不准确的,需求分析是完整,准确,清晰,具体的

    需求规格说明书:目标系统需求

  • 总体设计

    关键任务:怎样实现系统?根据需求设计方案;设计软件结构

    总体设计说明书:记录总体设计结果

  • 详细设计

    关键任务:怎样具体实现系统?设计每个模块的算法和数据结构

    详细设计说明书:用适当的工具表达算法和数据

  • 实现(编码和单元测试)

    关键任务:选择语言,工具翻译详细设计结构,测试模块

    实现阶段文档:程序清单,单元测试报告

  • 集成测试

    关键任务:将经过单元测试模块组装起来进行测试通过测试使软件达到预定的要求

    测试报告:测试计划,测试方案,测试结果

  • 确认测试

    关键任务:由用户按需求规格说明书进行测试

    测试报告:测试计划,测试方案,测试结果

  • 使用和维护

    关键任务:通过必要维护活动使系统持久满足用户的要求

    维护类型

    - 改正性维护:软件运行过程中发现错误,进行维护
    - 适应性维护:软件运行软硬件环境变化,进行维护
    - 完善性维护:用户要求改进或扩充软件,进行维护
    - 预防性维护:为将来做好准备
    

1.6 常用软件过程模型

  • 瀑布模型

    • 使用最早应用最广的过程模型

  • 特点

    1. 阶段具有顺序性和依赖性

      前一阶段结束后一阶段开始,前一阶段输出文档,后一阶段输入文档

    2. 推迟实现观点

      瀑布模型在编码前设置系统分析,系统设计,推迟程序物理实现,保证前期工作扎实

    3. 质量保证的观点

      瀑布模型每阶段坚持两个重要的做法:一是每阶段必须完成完整的文档。软件开发是人员通信,运行是维护的重要依据;二是每阶段结束前对文档进行评审

    最初的瀑布模型过于理想化在人们的实际工作过程中不可能不犯错误,所以实际的瀑布模型带反馈环

  • 优点:

    提高软件质量,降低维护成本,缓解软件危机

  • 缺点:

    模型缺乏灵活性,无法解决需求不明确问题。用户不经过时间提出完整准确需求不切实际

  • 快速原型模型

    快速建立反应用户需求的的原型系统,反复由用户评价修正需求,开发出最终产品

    • 特点

      确定需求上优于瀑布模型(通过原型和用户的交互);提供学习手段,通过开发原型模式和演示原型模型对开发者和使用者了解系统都有积极的作用;有的软件模型可以最终成为产品的一部分

    • 缺点

      快速建立的系统结构加连续的修改可能导致系统的质量不佳,快速原型的内部结构可能不好

  • 增量模型

    又称渐增模型,开发软件时将软件产品作一系列的增量构件的设计编码,集成和测试

    • 区别与瀑布和快速模型

      瀑布和快速模型是一次把满足所有需求的产品交给用户

      增量模型是分批向用户提交产品

  • 优点

    较短的时间内向用户提交可完成的所有工作产品;用户有充足的时间适应产品;软件的结果开放,方便现有的产品添加新的构件

  • 缺点

    做到第三个有点比较困难

前述增量模型在实现构建前完成总体的需求分析,规格说明和概要设计,相对来说风险较小,风险更大的增量模型:确定用户需求后,各构件集并行构建

  • 螺旋模型

    1988年提出,假如风险分析常指导大型软件项目

    软件风险:超期,超预算,行业竞争

    • 笛卡尔坐标系四象限表达的四方面活动:

      1. 制定计划:确定目标,选定方案,设定约束条件
      2. 风险分析:评估软件,识别和消除风险
      3. 实施工程:软件开发
      4. 客户评估:评价开发工作,计划下一阶段的工作

      沿螺线自内向外每旋转一圈开发出更完善的版本

    • 优点

      大型软件开发项目有较好的风险控制

    • 缺点

      需要风险评估的经验;契约开发通常需要指定过程模型和发布产品;普及度不如前述模型

  • 喷泉模型

    面相生命周期的模型,体现迭代和无缝特性

    迭代:求精,系统某部分常被重多次工作,相关功能在每次迭代中逐渐加入演进系统

    无缝:分析,设计,编码各个阶段不存在明显的边界

  • 优点

    无缝,可同步开发,提高开发效率,节省开发时间,适应于面相对象软件

  • 缺点

    可能随时加各种信息,需求与资料,需严格管理文档,审核的难度加大

  • Rational统一过程

    由Rational软件公司推出的一种软件过程,该过程强调以迭代和渐增的方式开发软件。Rational统一过程是一个二维生命周期模型

RUP有9个核心工作流,包括6个核心过程工作流和3个核心支持工作流

RUP有4个连续阶段,每个阶段有明确目标,通过一次或多次迭代完成

  • 不断的版本发布成为一种团队日常工作的真正驱动力,将发现问题,指定方案和解决过程集成到下一次迭代,降低风险更好的安排产品的开发辅助过程

软件工程概论学习笔记(1)—— 软件相关推荐

  1. 【软件工程】学习笔记(二)

    [软件工程]学习笔记 三.可行性研究与项目开发计划 3.1.可行性研究 3.1.1.技术可行性 3.1.2.可行性研究的任务 3.1.3.可行性研究的步骤 3.2.制定项目开发计划 四.结构化分析 4 ...

  2. linux系统管理学习笔记之三----软件的安装

    linux系统管理学习笔记之三----软件的安装 2009-12-29 19:10:02 标签:linux 系统管理 [推送到技术圈] 版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 ...

  3. 【学习笔记】软件设计模式(一)基本概念与归纳总结

    软件设计模式之基本概念与归纳总结 本人学习笔记.内容参考<Java设计模式>刘伟 教程配套PPT.仅供学习参考使用. 文章目录 软件设计模式概述 模式的分类 模式定义和特点的归纳总结 1. ...

  4. oracle学习笔记 oracle软件安装准备工作 第一部分 环境准备

    oracle学习笔记   oracle软件安装准备工作  第一部分 环境准备 这节课对初学者来说内容较多,我把它分成了三篇. 即使这样也不可能把每个可能遇到的问题都说到,如果遇到没说到的问题自己上网搜 ...

  5. 人工智能概论学习笔记(一):CPU GPU

    人工智能概论学习笔记(一):CPU & GPU 作者:王洋子豪 链接:https://www.zhihu.com/question/19903344/answer/13779421 来源:知乎 ...

  6. 鸟叔的linux私房菜:第0章 计算机概论学习笔记(Learning Notes for Basic Computer Theory)

    本博客是针对<鸟叔的Linux私房菜 基础学习篇 第四版>的第0章 计算机概论的学习笔记. 1 电脑辅助人脑的好工具 11 计算机硬件的五大单元 12 一切设计的起点CPU的架构 其它单元 ...

  7. Linux学习笔记之软件安装

    Linux学习笔记 这篇文章主要简单记录一下初次使用Linux的一些笔记吧 首先我安装时没选用中文版,直接选用了英文版,所以导致后面没有中文输入法,下载sogoupinyin,找到ubuntu对应的版 ...

  8. 软件工程 个人学习笔记(第二章)

    文章目录 一.软件需求管理概要 1.需求工程师的职责 2.软件需求的定义 3.获取软件需求的主要途径 4.软件需求文档的框架 总结 二.软件开发过程 1.软件过程概念及其组成 2.传统软件工程模型的特 ...

  9. 学习笔记必备软件:OneNote+ Mindmaster完美搭配使用

    做笔记有两个关键点: 一是笔记内容详略得当.二是知识的框架清晰完整. 为什么这样说? 举个例子,如图是我的笔记界面,用的是免费的OneNote, OneNote是微软出的笔记软件, 非常好用,有着书写 ...

最新文章

  1. SDNU 1464.最大最小公倍数(思维)
  2. 利用python爬虫(part11)--XpathHelper为啥不能全信之JS要闹哪般
  3. 05 JS基础DOM
  4. 用java查询excel表格_如何把java查询出的内容导入到excel表格
  5. c语言 vscode代码自动补全_借助C/C++ Extension实现VSCode C++代码补全
  6. 【重识 HTML + CSS】CSS 特性
  7. 多线程小结-----线程参数和 Invoke 机制
  8. 关于php编译安装扩展模块memcache的问题
  9. Go Node.js 生成的exe公布成windows服务
  10. orcad16.3下载
  11. spring bean生命周期源码剖析
  12. 表格票据识别人工智能OCR
  13. C语言malloc函数详解
  14. 拉肚子差评回复模板_外卖差评回复模板
  15. Hardhat快速上手
  16. Tableau实现世界GDP排名动态图
  17. psql: FATAL: the database system is in recovery mode - 问题定位方法与解决
  18. 数据分析-思维分析逻辑day02
  19. 如果觉得上面太正式,请看小红书风格的“从数字化转型到智能化转型”
  20. openBoard开源白板项目

热门文章

  1. 在xcode 调试C++ 代码时出现的EXC_BAD_ACCESS 错误
  2. @keyframes花瓣动画(代码比较简单,实现炫酷特效)
  3. Apache ServiceComb 社区4月动态精选
  4. 如何自己计算机硬盘故障,新手怎么快速学习电脑打字 电脑硬盘出现错误怎么办...
  5. 时间计算题100道_人教版三年级数学下册暑假100道计算题专项训练集锦,给孩子锻炼!...
  6. Nacos在derby模式下密码忘记了如何更改密码?nacos使用derby的ij工具修改密码
  7. iS-RPA 从起步到飙速(七)—— 这个输入有点稳健
  8. zookeeper实现服务器动态上下线,分布式锁
  9. 鸿蒙系统怎么还不能更新,为什么还更新不了鸿蒙_为什么不能更新鸿蒙系统
  10. 【IoT】物联网 WIFI 之 AP、STA、SSID、BSSID 概念基础