[软件工程导论(第六版)]第1章 软件工程学概述(复习笔记)

news2024/11/17 15:38:00

文章目录

    • 1.1 软件危机
      • 1.1.1 软件危机的介绍
      • 1.1.2 产生软件危机的原因
      • 1.1.3 消除软件危机的途径
    • 1.2 软件工程
      • 1.2.1 软件工程的介绍
      • 1.2.2 软件工程的基本原理
      • 1.2.3 软件工程方法学
    • 1.3 软件生命周期组成
    • 1.4 软件过程概念
      • 1.4.1 瀑布模型
      • 1.4.2 快速原型模型
      • 1.4.3 增量模型
      • 1.4.4 螺旋模型
      • 1.4.5 喷泉模型
      • 1.4.6 Rational统一过程(RUP)
      • 1.4.7 敏捷过程
      • 1.4.8 极限编程
      • 1.4.9 微软过程


1.1 软件危机

1.1.1 软件危机的介绍

  • 软件危机的概念
    • 软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。
  • 软件危机的典型表现
    • ① 对软件开发成本和进度的估计不准确。
    • ② 用户对“已完成的”软件系统不满意的现象经常发生。
    • ③ 软件产品的质量往往靠不住。
    • ④ 软件常常是不可维护的。
    • ⑤ 软件通常没有适当的文档资料。
    • ⑥ 软件成本在计算机系统总成本中所占的比例逐年上升。
    • ⑦ 软件开发跟不上计算机应用迅速普及深入的趋势。

1.1.2 产生软件危机的原因

  • 客观原因
    • ① 软件是计算机系统中的逻辑部件,缺乏“可见性”,因此管理和控制软件开发过程相当困难。
    • ② 软件维护通常意味着改正或修改原来的设计,因此软件较难维护。
    • ③ 软件规模庞大,而程序复杂性将随着程序规模的增加而呈指数上升。
  • 主观原因
    • ① 存在与软件开发和维护有关的许多错误认识和做法。
    • ② 对用户要求没有完整准确的认识就匆忙着手编写程序。
    • ③ 开发人员只重视程序而忽视软件配置的其余成分(文档和数据等)。
    • ④ 软件开发人员轻视维护。

1.1.3 消除软件危机的途径

  • 软件
    • 软件是程序、数据及相关文档的完整集合
    • 软件=程序+数据+文档。
  • 消除软件危机的途径
    • 应该对计算机软件有一个正确的认识,软件=程序+数据+相关文档;
    • 应该充分认识到软件开发是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目。
    • 应该推广使用在实践中总结出来的开发软件的成功的技术和方法, 并且研究探索更好更有效的技术和方法。
    • 应该开发和使用更好的软件工具。

1.2 软件工程

1.2.1 软件工程的介绍

  • 软件工程的概念
    • 指导计算机软件开发和维护的一门工程学科。
    • 采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来, 以经济地开发出高质量的软件并有效地维护它,这就是软件工程。
  • 软件工程的本质特征
    • ① 软件工程关注于大型程序的构造;
    • ② 软件工程的中心课题是控制复杂性;
    • ③ 软件经常变化;
    • ④ 开发软件的效率非常重要;
    • ⑤ 和谐地合作是开发软件的关键;
    • ⑥ 软件必须有效地支持它的用户;
    • ⑦ 软件工程领域由具有一种文化背景的人替具有另一种文化背景的人创造产品。

1.2.2 软件工程的基本原理

  • 七条基本原理
    • ① 用分阶段的生命周期计划严格管理;
    • ② 坚持进行阶段评审;
    • ③ 实行严格的产品控制;
    • ④ 采用现代程序设计技术;
    • ⑤ 结果应能清楚地审查;
    • ⑥ 开发小组的人员应该少而精;
    • ⑦ 承认不断改进软件工程实践的必要性。
  • 七条基本原理的意义
    • 这七条原理是确保软件产品质量和开发效率的原理的最小集合,它们是互相独立的,而且是缺一不可的最小集合,然而这七条原理又是相当完备的。

1.2.3 软件工程方法学

  • 软件工程包括技术和管理两方面的内容。
  • 软件工程是技术与管理紧密结合所形成的工程学科。
  • 软件工程方法学概念
    • 通常把软件生命周期全过程中使用的一整套技术方法的集合称为方法学,也称为范型。
    • 目前使用得最广泛的软件工程方法学,分别是传统方法学和面向对象方法学。
  • 软件工程方法学的三要素
    • 软件工程方法学包括3个要素:方法、工具和过程。
  • 传统方法学(生命周期方法学或结构化范型)
    • ① 定义
      • 采用结构化技术(结构化分析、结构化设计和结构化实现)来完成软件开发的各项任务,并使用适当的软件工具或软件工程环境来支持结构化技术的运用。
    • ② 优点
      • a.把软件生命周期划分成若干相对独立、简单的阶段,便于不同人员分工协作,降低开发的困难程度;
      • b.开发过程中采用科学的管理技术和良好的技术方法,且在每个阶段结束之前都进行严格的审查,保证了软件的质量,提高了软件的可维护性;
      • c.大大提高了软件开发的成功率和生产率。
    • ③ 缺点
      • a.不适用于软件规模庞大、或者对软件的需求是模糊的或会随时间变化而变化的情况。
      • b.结构化范型技术把数据和操作人为地分离成两个独立的部分,增加了软件开发与维护的难度。
  • 面向对象方法学
    • ① 定义
      • 面向对象方法是一种以数据为主线,把数据和对数据的操作紧密地结合起来的方法。
    • ② 要点
      • a.把对象作为融合了数据及在数据上的操作行为的统一的软件构件;
      • b.把所有对象都划分成类;
      • c.继承性;
      • d.对象彼此间仅能通过发送消息互相联系。
    • ③ 与传统方法学的对比
      • a.传统方法学强调自顶向下、逐层分解、顺序开发。
      • b.面向对象方法学强调主动地多次反复迭代地开发,保证了在各项开发活动之间的平滑过渡。
    • ④ 优点
      • a.降低了软件产品的复杂性;
      • b.提高了软件的可理解性;
      • c.简化了软件的开发和维护工作;
      • d.提高了软件的可重用性。
    • 【注意】常考面向对象方法学的基本特征:类、继承、封装、多态。结合第9章掌握其含义和意义。

1.3 软件生命周期组成

  • 软件生命周期由软件定义、软件开发、运行维护(软件维护)组成。
  • 软件定义
    • 软件定义时期通常进一步划分成3个阶段,即问题定义、可行性研究和需求分析。
    • 可行性研究的结果是客户作出是否继续进行这项工程的决定的重要依据
    • 需求分析阶段的重要任务,用正式文档准确记录对目标系统的需求,这份文档为规格说明书
  • 软件开发
    • 通常由下述4个阶段组成:总体设计,详细设计(模块设计),编码和单元测试,综合测试。
    • 其中前两个阶段又称为系统设计,后两个阶段又称为系统实现。
    • 详细设计是详细设计每个模块,确定实现模块功能所需的算法和数据结构
    • 【注意】考题中常设置选项:在详细设计阶段编写代码。这是错误的, 在编码和单元测试阶段才编写代码。
    • 综合测试阶段中最基本的测试,集成测试和验收测试
  • 运行和维护(软件维护)
    • 维护时期主要任务使软件持久地满足用户的需要。
    • 维护活动的分类
      • ① 改正性维护;
      • ② 适应性维护;
      • ③ 完善性维护;
      • ④ 预防性维护。

1.4 软件过程概念

  • 软件过程的定义
    • 软件过程是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。
  • 软件过程的表示
    • 使用生命周期模型简洁地描述软件过程。
  • 软件生命周期模型
    • 软件生命周期模型是软件开发的全部过程、活动和任务的结构框 架。软件生命周期模型能清晰、直观地表达软件开发全过程,明确规定了要完成的主要活动和任务,用来作为项目开发的基础。
    • 通常使用生命周期模型简洁地描述软件过程。
    • 软件生命周期模型规定了把生命周期划分为哪些阶段以及各个阶段的执行顺序。
  • 【注意】着重掌握瀑布模型、快速原型模型、螺旋模型、增量模型、喷泉模型。

1.4.1 瀑布模型

  • ① 开发流程
    • 实际的瀑布模型是带“反馈环”的,如图所示(图中实线箭头表示开发过程,虚线箭头表示维护过程)。
      • 在这里插入图片描述
    • 【注意】传统的瀑布模型没有图中的反馈环。
      • 在这里插入图片描述
  • ② 特点
    • 第一,阶段间具有顺序性和依赖性;
    • 第二,推迟实现的观点;
    • 第三,质量保证的观点。
  • ③ 瀑布模型的优缺点
    • a.优点
      • 第一,可强迫开发人员采用规范的方法;
      • 第二,严格地规定了每个阶段必须提交的文档;
      • 第三,要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证;
      • 第四,对文档的约束,使软件维护变得容易一些,且能降低软件预算。
    • b.缺点
      • 第一:瀑布模型是由文档驱动的。
      • 第二:缺乏对于需求变更和项目变化的适应性。
      • 第三:用户只有在生命周期的后期才能看到结果;
  • ④ 适用范围
    • 适用于用户需求明确、完整、无重大变化的软件项目开发。

1.4.2 快速原型模型

  • ① 开发流程
    • 如图所示(图中实线箭头表示开发过程,虚线箭头表示维护过程)。
    • 快速原型模型是不带反馈环的。
    • 在这里插入图片描述
    • 【注意】快速原型模型弥补了瀑布模型不适用于需求动态变更的缺点, 其本质是“快速”。
  • ② 优点
    • a.克服了瀑布模型的缺点,对于需求变更具有更好的适应性;
    • b.开发费用低、开发周期短且对用户更友好。
  • ③ 缺点
    • a.客户与开发者对原型理解不同;
    • b.本质是快速,没有考虑软件的总体质量和可维护性,最终产品质量较差;
    • c.不利于开发人员的创新。
  • ④ 适用范围
    • a.对所开发的领域比较熟悉而且有快速的原型开发工具;
    • b.项目招投标时,可以以原型模型作为软件的开发模型;
    • c.进行产品移植或升级时,或对已有产品原型进行客户化工作时。

1.4.3 增量模型

  • ① 开发步骤
    • 增量模型也称为渐增模型,如图所示。
    • 在这里插入图片描述
  • ② 原理
    • 把软件产品作为多个增量构件来设计、编码、集成、测试,开发人员一个构件接一个构件地向用户提交产品。
  • ③ 优点
    • a.能在较短时间内向用户提交可完成部分工作的产品。
    • b.逐步增加产品功能可以使用户有较充裕的时间学习和适应新产品。
  • ④ 技术难点
    • a.要求软件体系结构必须是开放的。
    • b.增量模型本身是自相矛盾的。
    • c.增量模型的灵活性很容易退化为边做边改模型,从而使软件过程的控制失去整体性。
  • ⑤ 风险更大的增量模型
    • 在这里插入图片描述
    • 【注意】每个增量构件的开发采用瀑布模型。
  • ⑥ 适用范围
    • a.进行已有产品升级或新版本开发;
    • b.对完成期限严格要求的产品;
    • c.对所开发的领域比较熟悉而且已有原型系统

1.4.4 螺旋模型

  • ① 基本思想
    • 可以把它看作在每个阶段之前都增加了风险分析过程的快速原型模型, 如图所示。
    • 在这里插入图片描述
  • ② 原理
    • 完整的螺旋模型如图所示。
    • 在这里插入图片描述
  • ③ 应用
    • 螺旋模型主要适用于内部开发的大规模软件项目。
  • ④ 优点
    • a.有利于已有软件的重用,有助于把软件质量作为软件开发的一个重要目标;
    • b.减少了过多测试(浪费资金)或测试不足(产品故障多)所带来的风险;
    • c.在螺旋模型中维护只是模型的另一个周期,在维护和开发之间并没有本质区别。
  • ⑤ 缺点
    • 螺旋模型是风险驱动的。要求软件开发人员具有丰富的风险评估经验和这方面的专门知识。
    • 过多的迭代次数会增加开发成本,延迟提交时间。
  • ⑥ 适用范围
    • 适用于内部开发的大规模软件项目。

1.4.5 喷泉模型

  • ① 开发流程
    • 图所示的喷泉模型,是典型的面向对象的软件过程模型之一。
    • 在这里插入图片描述
  • ② 特点
    • a.喷泉模型是一种以用户需求为动力,以对象为驱动的模型,主要用于描述面向对象的软件开发过程。
    • b.体现了面向对象软件开发过程迭代和无缝的特性。

1.4.6 Rational统一过程(RUP)

  • ① RUP软件开发生命周期
    • RUP软件开发生命周期是一个二维的面向对象的生命周期模型,如图所示。图中纵轴代表核心工作流,横轴代表时间。
    • 在这里插入图片描述
  • ② 核心工作流
    • 如上图纵轴所示,由上至下有九个核心工作流,前六个为核心过程工作流程,后三个为核心支持工作流程。
  • ③ 工作阶段
    • a.初始阶段。
    • b.精化阶段。
    • c.构建阶段。
    • d.移交阶段。
  • ④ 特点
    • a.采用迭代和渐增的方式开发软件。
    • b.具有多功能性和广泛适用性。

1.4.7 敏捷过程

  • 敏捷过程能够较好地适应商业竞争环境下对小型项目提出的有限资源和有限开发时间的约束。敏捷过程中最重要的是极限编程。

1.4.8 极限编程

  • ① 极限编程的整体开发过程
    • 图描述了极限编程的整体开发过程。
    • 在这里插入图片描述
  • ② 极限编程的迭代过程
    • 图描述了极限编程的迭代开发过程。
    • 在这里插入图片描述
  • ③ 特点
    • a.以极限编程为代表的敏捷过程,具有对变化和不确定性的更快速、更敏捷的反应特性;
    • b.在快速的同时仍然能够保持可持续的开发速度。

1.4.9 微软过程

  • ① 微软软件生命周期
    • 微软过程把软件生命周期划分成五个阶段,图描绘了生命周期的阶段及每个阶段的主要里程碑。
    • 在这里插入图片描述
  • ② 微软过程模型
    • a.定义

      • 微软过程的每一个生命周期发布一个递进的软件版本,各个生命周期持续、快速地迭代循环
      • 图描绘了微软过程的生命周期模型。
      • 在这里插入图片描述
    • b.特点

      • 第一,适用于商业环境下具有有限资源和有限开发时间约束的项目;
      • 第二,微软过程也有某些不足之处,例如,对方法、工具和产品等方面的论述不如RUP和敏捷过程全面,人们对它的某些准则本身也有不同意见。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/354525.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Windows系统扩充C盘空间系列方法总结

目录前言方法一 使用自带的Windows的DiskPart扩充C盘1. 打开cmd2.三步命令方法二:使用Windows系统内置磁盘管理扩展C盘方法三. 使用专业磁盘分区工具总结前言 本教程是总结Windows系统进行C盘(系统盘)扩充空间的系列方法,一般来讲…

VSCode远程调试Linux代码,python解释器配置

安装插件并配置 安装后找到插件图标,点击 点击SSH上的 号 在弹出框中输入命令:ssh usernameip -p port username: 远程服务器的用户名 ip: 远程ip port:端口号,没有可以不用 输入完毕后点击enter 选择ssh配置文件保存…

AI_News周刊:第二期

2023.02.13—2023.02.17 1.ChatGPT 登上TIME时代周刊封面 这一转变标志着自社交媒体以来最重要的技术突破。近几个月来,好奇、震惊的公众如饥似渴地采用了生成式人工智能工具,这要归功于诸如 ChatGPT 之类的程序,它对几乎任何查询做出连贯&a…

ArcGIS:模型构建器实现批量按掩膜提取影像

用研究区域的矢量数据来裁剪栅格数据集时,一般我们使用ArcGIS中的【按掩膜提取工具】。如果需要裁剪的栅格数据太多,处理起来非常的麻烦,虽然ArcGIS中有批处理的功能,但是还是需要手动选择输入输出数据。 如下图,鼠标…

HTTPS协议原理---详解六个加密方案

目录 一、HTTPS 1.加密与解密 2.我们为什么要加密? 3.常见加密方式 ①对称加密 ②非对称加密 4.数据摘要 5.数字签名 二、HTTPS的加密方案 1.只是用对称加密​ 2.只使用非对称加密 3.双方都使用非对称加密 4.非对称加密+对称加密 中间人攻…

kubernetes教程 --Pod控制器详解

Pod控制器详解 介绍 Pod是kubernetes的最小管理单元,在kubernetes中,按照pod的创建方式可以将其分为两类: 自主式pod:kubernetes直接创建出来的Pod,这种pod删除后就没有了,也不会重建控制器创建的pod&am…

字母消消乐游戏(C语言版本_2023首篇新作)

上一篇: 2022圣诞树(C语言摇钱树版本) 逐梦编程,让中华屹立世界之巅。 简单的事情重复做,重复的事情用心做,用心的事情坚持做; 文章目录前言一、图形库准备1.EasyX绘图库下载2.EasyX作用二、游戏内画面展示1.游戏开场介绍2.游戏画…

5年软件测试工程师分享的自动化测试经验,一定要看

今天给大家分享一个华为的软件测试工程师分享的关于自动化测试的经验及干货。真的后悔太晚找他要了, 纯干货。一定要看完! 1.什么是自动化测试? 用程序测试程序,用代码取代思考,用脚本运行取代手工测试。自动化测试涵…

0.2opencv库源码编译

如何编译opencv库源码 大家好,我是周旋,感谢大家学习【opencv源码解析】系列,本系列首发于公众号【周旋机器视觉】。 上篇文章我们介绍了如何配置opencv环境,搞清了opencv的包含目录include、静态库链接以及动态库链接的作用。 【…

汽车安全硬件扩展 AUTOSAR SHE SecureHardwareExtensions

SHE(Secure Hardware Extension)在车联网中,被应用在车端ECU中负责安全存储与安全计算。是由HIS(由Audi、BMW、Porsche、Volkswagen组成)制定的标准,中文意思“安全硬件扩展”,是对任何给定微控…

【Python】Python读写Excel表格

简要版,更多功能参考资料1。1 Excel文件保存格式基础概念此处不提,详见资料1。Excel的文件保存格式有两种: xls 和 xlsx。如果你看不到文件后缀,按下图设置可见。xls是Office 2003及之前版本的表格的默认保存格式。xlsx 是 Excel …

Javac命令详解

命令行 用法: javac <options> <source files> 其中, 可能的选项包括:-g 生成所有调试信息-g:none 不生成任何调试信息-g:{lines,vars,source} 只生成某些调试信息-nowarn 不生成任何警告-ver…

学习 Python 之 Pygame 开发坦克大战(一)

学习 Python 之 Pygame 开发坦克大战&#xff08;一&#xff09;Pygame什么是Pygame?初识pygame1. 使用pygame创建窗口2. 设置窗口背景颜色3. 获取窗口中的事件4. 在窗口中展示图片(1). pygame中的直角坐标系(2). 展示图片(3). 给部分区域设置颜色5. 在窗口中显示文字6. 播放音…

MyBatis 之三(查询操作 占位符#{} 与 ${}、like查询、resultMap、association、collection)

文章目录1. 参数占位符 #{} 和 ${} 的区别2. ${} 的优点3. SQL 注入问题4. like 查询5. 返回字典映射&#xff1a;resultMap6. 一对一查询&#xff1a;association7. 一对多查询&#xff1a;collection回顾一下&#xff0c;在上一篇 MyBatis 之二&#xff08;增、删、改操作&am…

APP测试中IOS和Android的区别,有哪些注意点?

01、常识性区别 02、导航方式 iOS&#xff1a;Tab放在页面底部&#xff0c;不能通过滑动来切换&#xff0c;只能点击。也有放在上面的&#xff0c;也不能滑动&#xff0c;但有些Tab本身可以滑动&#xff0c;比如天猫的。还有新闻类的应用。 Android&#xff1a;一般放在页面…

Visual Studio 高级调试-(上)

概述编程圈子里隔三差五的就会有场“谁是最强IDE”之争&#xff0c;重要的是我们需要对使用的IDE有充分的了解&#xff0c;正所谓工欲善其事&#xff0c;必先利其器。本文主要讲述Visual Studio常用的调试技巧&#xff0c;包括多类型断点&#xff0c;数据监视&#xff0c;以及多…

MySQL ---基础概念

目录 餐前小饮&#xff1a;什么是服务器&#xff1f;什么是数据库服务器&#xff1f; 一、数据库服务软件 1. 常见数据库产品 2.如何开启和停止MySQL服务 二、数据库术语及语法 1.数据库术语 2.SQL语法结构 3.SQL 语法要点 三、SQL分类 1.数据定义语言&#xff08;D…

LeetCode——1237. 找出给定方程的正整数解

一、题目 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/find-positive-integer-solution-for-a-given-equation/description/ 翻译一下题目 意思是&#xff0c;这是一个二维单调递增的函数&#xff0c;函数一共有 9 …

快速上手GoWeb开发之Gin框架

Go是一门正在快速增长的编程语言&#xff0c;专为构建简单、快速且可靠的软件而设计。 golang提供的net/htp库已经很好了&#xff0c;对于htp的协议的实现非常好&#xff0c;基于此再造框架&#xff0c;也不会是难事&#xff0c;因此生态中出现了很多框架。 Gin: Go 语言编写的…

智能洗地机什么牌子好?智能洗地机排行

要说家庭清洁热门的产品&#xff0c;洗地机肯定首当其冲&#xff0c;集洗吸拖为一体的清洁工具&#xff0c;省时又省力&#xff0c;可谓是家里清洁好助手&#xff0c;今天笔者就为大家介绍几款重量轻、噪音轻、拖地干净的洗地机! 一、CEYEE希亦T800洗地机 在国内&#xff0c;洗…