软件工程导论复试

本文用书
《软件工程导论》第六版张海藩、牟永敏 清华大学出版社

一、软件工程学概述

软件危机:计算机软件开发和维护时遇到的一系列严重问题

典型表现:

(1) 对软件开发成本和进度的估计常常很不准确。
(2) 用户对已完成的软件不满意的现象时有发生。
(3) 软件产品的质量往往是靠不住的。
(4) 软件常常是不可维护的。
(5) 软件通常没有适当的文档资料。
(6) 软件成本、软件维护费在计算机系统总成本中所占比例逐年上升。
(7) 开发生产率提高的速度远跟不上计算机应用普及的需求。

为什么会产生软件危机啊?

  • 来自软件自身的特点:是逻辑部件,缺乏可见性;规模庞大、复杂,修改、维护困难。

  • 软件开发与维护的方法不当:忽视需求分析;认为软件开发等于程序编写;轻视软件维护。

  • 供求矛盾将是一个永恒的主题:面对日益增长的软件需求,人们显得力不从心

怎么去解决软件危机

为了解决软件危机,既要有技术措施,又要有必要的组织管理措施。人们可以从其他产业的工程化生产得到启示,采用工程的概念、原理、技术和方法来开发和维护软件。

  • 充分吸收和借鉴人类长期以来从事各种工程项目中积累的行之有效的有效原理、概念、技术与方法, 特别是吸取几十年来人类从事计算机硬件研究和开发的经验教训。在开发软件的过程中努力作到良好的组织,严格的管理,相互友好的协作。
  • 推广在实践中总结出来的开发软件的成功的技术和方法,并研究更好、更有效的技术和方法,尽快克服在计算机系统早期发展阶段形成的一些错误概念和作法。
  • 根据不同的应用领域,开发更好的软件工具并使用这些工具。将软件开发各个阶段使用的软件工具集合成一个 整体,形成一个很好的软件开发支环环境。总之为了解决软件危机,既要有技术措施(方法和工具),又要有必要的组织管理措施。

软件工程

软件工程是指导计算机软件开发和维护的一门工程学科。

定义:软件工程是① 把系统的、规范的、可度量的途径应用于软件开发、运行和维护过程,也就是把工程应用于软件;② 研究①中提到的途径。

本质特性:

  • 软件工程关注于大型程序的构造
  • 软件工程的中心课题是分解问题,控制复杂性
  • 软件是经常变化的,开发过程中必须考虑软件将来可能的变化
  • 开发软件的效率非常重要
  • 和谐地合作是开发软件的关键
  • 软件必须有效地支持它的用户
  • 在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人创造产品

基本原理:

  • 用分阶段的生命周期计划严格管理
  • 坚持进行阶段评审
  • 实行严格的产品控制
  • 采用现代程序设计技术
  • 结果应能清楚的审查
  • 开发小组的人员应该少而精
  • 承认不断改进软件工程实践的必要性

软件工程方法学

软件工程方法学三要素:方法、工具、过程。

方法:完成软件开发任务的各项技术方法

工具:运用方法而提供的自动的或半自动的软件工程支撑环境

过程:过程是为了获得高质量的软件所需要完成的一系列任务框架,规定了完成一系列任务的框架。

方法学:在软件生命周期过程中使用的一整套技术方法的集合。

使用最广泛的方法学:传统方法学、面向对象方法学

传统方法学:

又称为生命周期方法学或者结构化泛型。

采用结构化技术来完成软件开发的各项任务,并使用适当的软件工具或软件工程环境来支持结构化技术的运用。把软件生命周期的全过程一次划分为若干个阶段,然后顺序地完成每个阶段的任务。对于问题的解决类似于队列的方法,只有队首出队才能完成后续人的出队操作,即只有阶段式完成目标并进行严格的技术审查和管理复审才能进行下一阶段的操作,并把前一阶段的结果作为下一阶段的标准。审查的一条主要标准是每个阶段完成时都应该交出“最新式”高质量文档资料,把当前阶段所完成的任务以文档形式详细说明,如果文档不完整,即可认为有某些工作忘记做了,在下一阶段开始前应将其补足。(了解下)

优点:把软件生命周期划分成基干个阶段,每个阶段的任务相对独立,而且比较简单,便于不同人员分工协作,从而降低了整个软件开发过程的困难程度。

缺点:当软件规模庞大时,或者对软件的需求是模糊的或会承受时间而变化的时候,开发出的软件往往不成功;而且维护起来仍然很困难。

面向对象方法学

四个要点:

(1)面向对象的软件系统是由对象组成的,软件中的任何元素都是对象,复杂的软件对象由比较简单的对象组合而成。

(2)把所有对象都划分成各种对象类(简称为类,class),每个对象类都定义了一组数据和一组方法。数据用于表示对象的静态属性,是对象的状态信息。

(3)按照子类(或称为派生类)与父类(或称为基类)的关系,把若干个对象类组成一个层次结构的系统(也称为类等级)。

(4)对象彼此之间仅能通过传递消息互相联系。

优点:降低了软件产品的复杂性;提高了软件的可理解性;简化了软件的开发和维护工作;促进了软件重用。

软件生命周期

定义时期:问题定义、可行性研究、需求分析

开发时期:总体设计、详细设计、编码、单元测试、综合测试

维护时期

软件过程

软件过程是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。

瀑布模型

特点:

  • 阶段间具有顺序性和依赖性(必须等前一阶段做完才能开始下一阶段)
  • 推迟实现的观点(在进行设计之后才考虑编码,设计阶段不考虑实现)
  • 质量保证的特点(每个阶段必须完成规定的文档,在每个阶段结束前都要对所完成的文档进行评审)

优点:

  • 可强迫开发人员为项目提供了按阶段划分的检查点。
  • 当前一阶段完成后,开发者只需要去关注后续阶段。
  • 可在迭代模型中应用瀑布模型。
  • 它提供了一个模板,这个模板使得分析、设计、编码、测试和支持的方法可以在该模板下有一个共同的指导。

缺点:

  • 各个阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了工作量。
  • 由于开发模型是线性的,用户只有等到整个过程的末期才能见到开发成果,从而增加了开发风险。
  • 通过过多的强制完成日期和里程碑来跟踪各个项目阶段。
  • 瀑布模型的突出缺点是不适应用户需求的变化。

快速原型模型

快速原型模型是快速建立起来的可以再计算机上运行的程序,它所能完成的功能往往是最终产品能完成的功能的一个子集。他可以让用户快速试用原型系统并给出意见。

优点:

  • 克服瀑布模型的缺点,更好地满足用户的需求并减少由于软件需求不明确带来的项目开发风险。
  • 适合预先不能确切定义需求的软件系统的开发。

缺点

  • 不适合大型系统的开发(适合开发小型的、灵活性高的系统)。
  • 前提要有一个展示性的产品原型,因此在一定程度上可能会限制开发人员的创新。

增量模型

增量模型也称渐增模型。使用增量模型开发软件时,把软件产品作为一系列的增量构件来设计、编码、集成和测试。每个构件由多个相互作用的模块构成,并且能够完成特定的功能

使用增量模型时,第一个增量构件往往实现软件的基本需求,提供最核心的功能

把软件产品分解成增量构件时,唯一必须遵守的约束条件是,当把新构件集成到现有构件中时,所形成的产品必须是可测试的

优点:

  • 能在较短的时间内向用户提交可完成部分工作的产品
  • 将待开发的软件系统模块化,可以分批次地提交软件产品,使用户可以及时了解软件项目的进展
  • 以组件为单位进行开发降低了软件开发的风险。一个开发周期内的错误不会影响到整个软件系统
  • 开发顺序灵活。开发人员可以对组件的实现顺序进行优先级排序,先完成需求稳定的核心组件。当组件的优先级发生变化时,还能及时地对实现顺序进行调整

缺点:

  • 由于各个构件是逐渐并入已有的软件体系结构中的,所以加入构件必须不破坏已构造好的系统部分,这需要软件具备开放式的体系结构
  • 在开发过程中,需求的变化是不可避免的。增量模型的灵活性可以使其适应这种变化的能力大大优于瀑布模型和快速原型模型,但也很容易退化为边做边改模型,从而是软件过程的控制失去整体性
  • 如果增量包之间存在相交的情况且未很好处理,则必须做全盘系统分析,这种模型将功能细化后分别开发的方法较适应于需求经常改变的软件开发过程

螺旋模型

可以理解为每个阶段增加了风险分析的快速原型模型。在进行下一阶段的原型开发时,首先进行风险分析(钱够不够了?竞争对手什么水平了?)

螺旋模型是风险驱动的,需要相当丰富的风险评估经验和专门知识,否则风险更大;主要适用于内部开发的大规模软件项目,随着过程的进展演化,开发者和用户能够更好的识别和对待每一个演化级别上的风险;随着迭代次数的增加,工作量加大,软件开发成本增加 。

优点:

  • 设计上的灵活性,可以在项目的各个阶段进行变更。
  • 以小的分段来构建大型系统,使成本计算变得简单容易。
  • 客户始终参与每个阶段的开发,保证了项目不偏离正确方向以及项目的可控性。
  • 随着项目推进,客户始终掌握项目的最新信息 , 从而他或她能够和管理层有效地交互。
  • 客户认可这种公司内部的开发方式带来的良好的沟通和高质量的产品。

缺点:

很难让用户确信这种演化方法的结果是可以控制的。建设周期长,而软件技术发展比较快,所以经常出现软件开发完毕后,和当前的技术水平有了较大的差距,无法满足当前用户需求。

喷泉模型

​ 喷泉模型主要用于面向对象的软件项目,软件的某个部分通常被重复多次,相关对象在每次迭代中随之加入渐进的软件成分。各活动之间无明显边界,例如设计和实现之间没有明显的边界,这也称为“喷泉模型的无间隙性”。由于对象概念的引入,表达分析、设计及实现等活动只用对象类和关系,从而可以较容易地实现活动的迭代和无间隙。

优点:

喷泉模型不像瀑布模型那样,需要分析活动结束后才开始设计活动,设计活动结束后才开始编码活动。该模型的各个阶段没有明显的界限,开发人员可以同步进行开发。其优点是可以提高软件项目开发效率,节省开发时间,适应于面向对象的软件开发过程。

缺点:

由于喷泉模型在各个开发阶段是重叠的,因此在开发过程中需要大量的开发人员,因此不利于项目的管理。此外这种模型要求严格管理文档,使得审核的难度加大,尤其是面对可能随时加入各种信息、需求与资料的情况。

RUP(Rational 统一过程)

RUP强调采用迭代和检查的方式来开发软件,整个项目开发过程由多个迭代过程组成。在每次迭代中只考虑系统的一部分需求,针对这部分需求进行分析、设计、实现、测试和部署等工作,每次迭代都是在系统已完成部分的基础上进行的,每次给系统能够增加一些新的功能,如此循环往复地进行下去,直至完成最终项目。(基本上现在的软件都是这么来的)

优点:提高了团队生产力,在迭代的开发过程、需求管理、基于组建的体系结构、可视化软件建模、验证软件质量及控制软件变更等方面、针对所有关键的开发活动为每个开发成员提供了必要的准则、模版和工具指导,并确保全体成员共享相同的知识基础。它建立了简洁和清晰的过程结构,为开发过程提供较大的通用性。

缺点:RUP只是一个开发过程,并没有涵盖软件过程的全部内容,例如它缺少关于软件运行和支持等方面的内容,此外,他没有支持多项目的开发结构,这在一定程度上降低了在开发组织内大范围实现重用的可能性。

敏捷过程

特点:

  • 个体和交互胜过过程和工具
  • 可以工作的软件胜过面面俱到的文档
  • 客户合作胜过合同谈判
  • 相应变化胜过遵循计划

课后习题

1、软件危机:在软件开发和维护中遇到的一系列问题。

表现:

(1) 对软件开发成本和进度的估计常常很不准确。
(2) 用户对已完成的软件不满意的现象时有发生。
(3) 软件产品的质量往往是靠不住的。
(4) 软件常常是不可维护的。
(5) 软件通常没有适当的文档资料。
(6) 软件成本、软件维护费在计算机系统总成本中所占比例逐年上升。
(7) 开发生产率提高的速度远跟不上计算机应用普及的需求。

为什么:

  • 来自软件自身的特点:是逻辑部件,缺乏可见性;规模庞大、复杂,修改、维护困难。
  • 软件开发与维护的方法不当:忽视需求分析;认为软件开发等于程序编写;轻视软件维护。
  • 供求矛盾将是一个永恒的主题:面对日益增长的软件需求,人们显得力不从心

2、您开玩笑呢?又不是只有编码错误!万一你这一开始就设计错了,您编码再他妈牛逼也白瞎啊。给您一个图自己感受下。

3、软件工程

什么是?软件工程是指导计算机软件开发和维护的一门学科

定义:1、把系统的、规范的、可度量的途径应用到软件开发、运行、维护中。2、研究1中提到的途径

怎么解决软件危机:

  • 对计算机软件有一个正确的认识(软件≠程序)

  • 必须充分认识到软件开发不是某种个体劳动的神秘技巧,而应该是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目

  • 推广使用在实践中总结出来的开发软件的成功技术和方法

  • 开发和使用更好的软件工具。

4、结构化泛型与面向对象泛型

结构化泛型又称为生命周期方法学或者结构化泛型。

他是把软件开发过程分为了若干个阶段,每个阶段十分独立,必须顺序的完成各个阶段。上一个阶段的文档就是下一个阶段开始的文档。

优点:把软件生命周期划分成基干个阶段,每个阶段的任务相对独立,而且比较简单,便于不同人员分工协作,从而降低了整个软件开发过程的困难程度。

缺点:当软件规模庞大时,或者对软件的需求是模糊的或会承受时间而变化的时候,开发出的软件往往不成功;而且维护起来仍然很困难。

面向对象方法学

四个要点:

(1)面向对象的软件系统是由对象组成的,软件中的任何元素都是对象,复杂的软件对象由比较简单的对象组合而成。

(2)把所有对象都划分成各种对象类(简称为类,class),每个对象类都定义了一组数据和一组方法。数据用于表示对象的静态属性,是对象的状态信息。

(3)按照子类(或称为派生类)与父类(或称为基类)的关系,把若干个对象类组成一个层次结构的系统(也称为类等级)。

(4)对象彼此之间仅能通过传递消息互相联系。

优点:降低了软件产品的复杂性;提高了软件的可理解性;简化了软件的开发和维护工作;促进了软件重用。

6、软件过程

软件过程是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。

他是软件工程方法学三个组成部分的一部分

7、软件生命周期模型

软件生命周期模型是跨越整个生存期的系统开发、运作和维护所实施的全部过程、活动和任务的结构框架。

特点前面有写

8、因为使用面向对象方法学开发软件时,各个阶段都使用统一的概念和表示符号,因此,整个开发过程都是吻合一致的,或者说是无缝连接的,这自然就很容易实现各个开发步骤的反复多次迭代,达到认识的逐步深化,而喷泉模型则很好的体现了面向对象软件开发过程迭代和无缝的特性。

9、优点:提高了团队生产力,在迭代的开发过程、需求管理、基于组建的体系结构、可视化软件建模、验证软件质量及控制软件变更等方面、针对所有关键的开发活动为每个开发成员提供了必要的准则、模版和工具指导,并确保全体成员共享相同的知识基础。它建立了简洁和清晰的过程结构,为开发过程提供较大的通用性。

缺点:RUP只是一个开发过程,并没有涵盖软件过程的全部内容,例如它缺少关于软件运行和支持等方面的内容,此外,他没有支持多项目的开发结构,这在一定程度上降低了在开发组织内大范围实现重用的可能性。

10、RUP适用项目
大型的需求不断变化的复杂软件系统项目

11、敏捷过程适用范围

适用于商业竞争环境下对小型项目提出的有限资源和有限开发时间的约束

12、微软开发适用范围 适用于商业环境下具有有限资源和有限开发时间约束的项目的软件过程模式

9、优点:提高了团队生产力,在迭代的开发过程、需求管理、基于组建的体系结构、可视化软件建模、验证软件质量及控制软件变更等方面、针对所有关键的开发活动为每个开发成员提供了必要的准则、模版和工具指导,并确保全体成员共享相同的知识基础。它建立了简洁和清晰的过程结构,为开发过程提供较大的通用性。

缺点:RUP只是一个开发过程,并没有涵盖软件过程的全部内容,例如它缺少关于软件运行和支持等方面的内容,此外,他没有支持多项目的开发结构,这在一定程度上降低了在开发组织内大范围实现重用的可能性。

10、RUP适用项目
大型的需求不断变化的复杂软件系统项目

11、敏捷过程适用范围

适用于商业竞争环境下对小型项目提出的有限资源和有限开发时间的约束

12、微软开发适用范围 适用于商业环境下具有有限资源和有限开发时间约束的项目的软件过程模式

软件工程导论复试——一、软件工程学概述相关推荐

  1. 软件工程导论 01章软件工程学概述

    1.软件是程序.数据以及各种相关文档的集合. 程序是对计算任务的处理规则的描述,数据是对计算任务的处理对象的描述,文档则是有关计算机程序功能.设计.编制与使用的文字图形资料. 软件等于程序加数据加相关 ...

  2. 软件工程 | 第一章:软件工程学概述

    软件工程学概述 一.前言 二.软件危机 1.典型表现 2.产生原因 3.消除危机途径 三.软件工程 1.概述 2.软件本质特征 3.软件工程基本原理 4.软件工程方法学 1️⃣传统方法学 2️⃣面向对 ...

  3. 软件工程学导论第一章-软件工程学概述

    软件工程学概述 软件危机 软件危机的介绍 软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题. 软件危机包含两方面的问题:如何开发软件,以满足对软件日益增长的需求.如何维护数量不断膨胀的 ...

  4. 软件工程——第1章软件工程学概述知识点整理

    本专栏是博主个人笔记,主要目的是利用碎片化的时间来记忆软工知识点,特此声明! 文章目录 1.为什么要有软件工程这门学科? 2.软件分为哪些阶段? 3.软件危机的定义? 4.软件危机包含的问题有哪些? ...

  5. 【软件工程导论】软件工程学概述

    软件工程学概述 文章目录 软件工程学概述 一.软件危机 1.1 计算机系统的发展阶段 1.2 软件危机的介绍 1.3 软件危机典型表现 1.4 产生软件危机的原因 1.4.1 一方面与软件本身的特点有 ...

  6. 软件工程—软件工程学概述

    软件工程 第一章-软件工程学概述 文章目录 软件工程 第一章 软件工程学概述 1.1 软件危机 1.2 软件工程 1.2.1 软件工程方法学 1.3 软件生命周期 1.4 软件过程 1.4.1 瀑布模 ...

  7. 软件工程导论复试问题总结

    小白第一次写文章,大佬勿喷,此资料是本人复试自用 软件工程导论 第一章 什么是软件危机? 软件危机是指在计算机软件开发.使用与维护过程中遇到的一系列严重问题和难题.包括两方面:如何开发软件,满足对软件 ...

  8. 软件工程导论第六版 第一章 软件工程学概述知识点总结(上)

    目录 关于20世纪60年代 (选择题考点) 软件危机 软件危机的概念 (填空题考点) 软件危机的表现 (简答题考点) 软件危机产生的原因 (简答题考点) 软件工程的概念 软件工程的七条基本原理 软件生 ...

  9. 软件工程导论第六版 第一章 软件工程学概述知识点总结(下)

    目录 软件过程 瀑布模型 快速原型模型 增量模型 螺旋模型 喷泉模型 Rational 统一过程 敏捷过程和极限编程 面向对象方法学 简答题 本章练习 软件过程 顺口溜:布 原 增 螺 喷 统 瀑布模 ...

最新文章

  1. 重磅丨2018年人工智能标准化白皮书
  2. [android] ubuntu开发环境
  3. 2019研究生数学建模比赛题目
  4. 跨专业选修C语言看什么书,跨专业考研如何选择?!!!!!
  5. CUDA out of memory. Tried to allocate 392.00 MiB (GPU 0; 10.76 GiB total capacity; 652.77 MiB alread
  6. 3 pyspark学习---sparkContext概述
  7. [转]常见hash算法的原理
  8. 动易访问mysql_服务器如何设置动易系统数据库路径的方法
  9. 搭建接口自动化测试框架详细过程
  10. 中国伺服电机市场现状调查与投资战略分析报告2022-2028年
  11. OpenGL着色器程序解析--点光源
  12. 2022-2028年全球与中国便携式茶包市场现状及未来发展趋势分析报告
  13. 如何设计一个可用的web容器
  14. 操作系统镜像下载【windows+linux+mac】
  15. BERT代码的解读1---数据处理部分
  16. mysql越权漏洞_Fortify漏洞之Access Control: Database(数据越权)(示例代码)
  17. 简单的自动化测试模型(python+selenium)
  18. 虚拟直播与光学动作捕捉技术
  19. outline的创建与使用
  20. 西麦燕麦销量第一表现抢眼,全产业链联盟战略再提速

热门文章

  1. 小程序毕业设计 基于微信会议室预约小程序毕业设计开题报告功能参考
  2. 数学基础 - 第十七章 勾股定理
  3. 计算机 难题_寻找免费难题的最佳网站
  4. python最佳身高_Python+sklearn使用线性回归算法预测儿童身高
  5. web自动化断言_无需断言即可进行Web开发的自动化测试
  6. T.38 和传真的未来
  7. 如何用计算机算出男朋友的身高,【趣味物理】如何用物理方法测出男生的真实身高?...
  8. 【深度学习】基于MindSpore和pytorch的Softmax回归及前馈神经网络
  9. 计算—六合彩的中奖概率
  10. 无法启动此程序因为计算机丢失msvcr110.dll,计算机中丢失msvcr110.dll怎么办