软件工程导论复试——一、软件工程学概述

软件工程导论复试

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

一、软件工程学概述

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

典型表现:

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

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

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

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

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

怎么去解决软件危机

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

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

软件工程

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

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

本质特性:

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

基本原理:

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

软件工程方法学

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

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

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

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

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

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

传统方法学:

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

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

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

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

面向对象方法学

四个要点:

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

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

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

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

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

软件生命周期

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

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

维护时期

软件过程

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

瀑布模型

特点:

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

优点:

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

缺点:

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

快速原型模型

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

优点:

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

缺点

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

增量模型

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

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

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

优点:

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

缺点:

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

螺旋模型

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

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

优点:

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

缺点:

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

喷泉模型

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

软件工程导论复试——一、软件工程学概述_第2张图片

优点:

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

缺点:

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

RUP(Rational 统一过程)

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

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

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

敏捷过程

特点:

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

课后习题

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

表现:

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

为什么:

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

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

软件工程导论复试——一、软件工程学概述_第3张图片

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、微软开发适用范围 适用于商业环境下具有有限资源和有限开发时间约束的项目的软件过程模式

你可能感兴趣的:(考研复试,软件工程师,其他,程序人生)