【软件工程】第一章 软件工程概述 考试重点 复习记录

软件工程 考试重点记录

1、软件工程概述

软件工程的研究领域包括软件的开发方法,软件的生命周期以及软件的工程实践等。

2、软件危机与软件工程的起源

软件危机的出现

​ 随着计算机应用的日益普及,软件的数量也开始急剧膨胀。在程序运行时发现的错误必须设法改正; 用户有了新的需求时必须相应地修改程序; 硬件或操作系统更新时,通常需要修改程序以适应新的环境上述种种软件维护工作,以令人吃惊的比例耗费资源。 更严重的是,许多程序的个体化特性使得它们最终成为不可维护的。“软件危机”就这样开始出现了。 1968年北大西洋公约组织的计算机科学家在联邦德国召开国际会议,讨论软件危机问题,在这次会议上正式提出并使用了“软件工程”这个名词,一门新兴的工程学科就此诞生了, 1968年提出了软件工程的概念。

软件危机介绍

​ 软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。软件危机包含下述两方面的问题:

  • 如何开发软件,以满足对软件日益增长的需求;
  • 如何维护数量不断膨胀的已有软件。

具体来说,软件危机主要有以下一些典型的表现。

  • 对软件开发成本和进度的估计常常很不准确。
  • 用户对“已完成的“软件系统不满意的现象经常发生。
  • 软件产品的质量往往靠不住。
  • 软件常常是不可维护的。
  • 软件通常没有适当的文档资料。
  • 软件成本在计算机系统总成本中所占的比例逐年上升。
  • 软件开发生产率提高的速度,既跟不上硬件的发展速度, 也远远跟不上计算机应用迅速普及深入的趋势。

产生软件危机的原因

由于软件缺乏”可见性”,因此管理和控制软件开发过程相当困难。软件维护通常意味着改正或修改原来的设计,这就在客观上使得软件较难维护。

在软件开发和维护的过程中存在这么多严重问题,一方面与软件本身的特点有关,另一方面也和软件开发与维护的方法不正确有关。
软件不同于硬件,它是计算机系统中的逻辑部件而不是物理部件。

软件的一个显著特点是规模庞大,而且程序复杂性将随着程序规模的增加而呈指数上升。

软件本身独有的特点确实给开发和维护带来一些客观困难,但是人们在开发和使用计算机系统的长期实践中,也确实积累和总结出了许多成功的经验。

但目前,相当多的软件专业人员对软件开发和维护还有不少糊涂观念,在实践过程中或多或少地采用了错误的方法和技术,这可能是使软件问题发展成软件危机的主要原因。与软件开发和维护有关的许多错误认识和做法的形成,可以归于在计算机系统发展的早期阶段软件开发的个体化特点。错误的认识和做法主要表现为忽视软件需求分析的重要性、认为软件开发就是编写程序并设法使之运行、轻视软件维护等。事实上,对用户要求没有完整准确的认识就匆忙着手编写程序是许多软件开发工程失败的主要原因之一。

编写程序只是软件开发过程中的一个阶段,而且在典型的软件开发工程中,编写程序所需的工作量只占软件开发全部工作量的10%,…, 20% 。还必须认识到程序只是完整的软件产品的一个组成部分,在软件生命周期的每个阶段都要得出最终产品的一个或几个组成部分(这些组成部分通常以文档资料的形式存在)。也就是说, 一个软件产品必须由一个完整的配置组成,软件配置主要包括程序、文档、数据等。

严重的问题是,在软件开发的不同阶段进行修改需要付出的代价是不尽相同的。维护是极端艰巨复杂的工作,需要花费很大代价。软件工程学的一个重要目标就是提高软件的可维护性,减少软件维护的代价。

消除软件危机的途径

​ 为了消除软件危机,首先应该对计算机软件有一个正确的认识。软件是程序、数据及相关文档的完整集合。其中,程序是能够完成预定功能和性能的可执行的指令序列;数据是使程序能够适当地处理信息的数据结构; 文档是开发、使用和维护程序所需要的图文资料。软件开发不是某种个体劳动的神秘技巧,而应该是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目。充分吸取和借鉴人类长期以来从事各种工程项目所积累的行之有效的原理、概念、技术和方法是必须的。应该开发和使用更好的软件工具。总之,为了消除软件危机,既要有技术措施(方法和工具),又要有必要的组织管理措施。软件工程正是从管理和技术两方面研究如何更好地开发和维护计算机软件的一门新兴学科。

消除软件危机的途径:

1.技术措施
使用更好的软件开发技术、开发工具、开发工具。
2.组织管理措施
(1)创造良好的组织、严密的管理与协调工作的机制软件开发不是某种个体劳动的神秘技巧,而应该是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目。

(2)摆脱软件危机的主要出路是,按工程化的原则和方法组织软件的开发工作。
(3)强调文档的重要性。 “口说无凭,立字为据! !”是解决软件危机的格言。

3、软件工程

什么是软件工程

概括地说,软件工程是指导计算机软件开发和维护的工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,经济地开发出高质量的软件并有效地维护它,这就是软件工程。

  1. 1983年IEEE给软件工程下的定义是:“软件工程是开发、运行、维护和修复软件的系统方法。”这个定义相当概括,它主要强调软件工程是系统方法而不是某种神秘的个人技巧。

  2. Fairly认为:“软件工程学是为了在成本限额以内按时完成开发和修改软件产品所需要的系统生产和维护技术及管理学科。”这个定义明确指出了软件工程的目标是在成本限额内按时完成开发和修改软件的工作,同时也指出了软件工程包含技术和管理两方面的内容。

  3. Fritz Bauer给出了下述定义:“软件工程是为了经济地获得可靠的且能在实际机器上有效地运行的软件,而建立和使用的完善的工程化原则。”这个定义不仅指出软件工程的目标是经济地开发出高质量的软件,而且强调了软件工程是一门工程学科,它应该建立并使用完善的工程化原则。

  4. 1993年IEEE进一步给出了一个更全面的定义:
    软件工程是:①把系统化的、规范的、 可度量的途径应用于软件开发、运行和维护的过程,也就是把工程化应用于软件中;②研究①中提到的途径。

软件工程的基本原理

软件工程专家B.W.BOEHM 提出软件工程的七条原理:
1.用分阶段的生命周期计划严格管理
2.坚持进行阶段评审
3.实行严格的产品控制
4.采用现代程序设计技术
5.结果应能清楚地审查

6.开发小组的人员应该少而精
7.承认不断改进软件工程实践的必要性

这7条原理是互相独立的,其中任意6条原理的组合都不能代替另一条原理,因此,它们是缺一不可的最小集合。

软件工程包含的领域

IEEE在2014年发布的《软件工程知识体系指南》中将软件工程知识体系划分为以下15个知识领域。

  • 软件需求(software requirements)。

    软件需求表达了为解决某些真实世界问题而施加在软件产品上的要求和约束。软件需求的主要类型包括:产品与过程,功能性与非功能性,突出的属性。软件需求知识领域涉及软件需求的抽取、分析、规格说明和确认。软件工业界一致认同的就是如果这些工作完成得不好,软件工程项目就很容易失败。

  • 软件设计(software design)。

软件设计是一个过程和这个过程的结果,此过程对一个系统或组件定义架构(architecture,也叫体系结构)、组件、接口以及其他特征。在这项活动中分析软件需求以产生一个软件内部结构的描述,此描述将成为软件构建的基础。

  • 软件构建(software construction)。

软件构建指的是如何创建产生软件的详细步骤,这其中包括编码、验证、单元测试、集成测试和调试。

  • 软件测试(software testing)。

    测试是一个标识产品的缺陷和问题的活动。测试的目的是为了评估和改进产品质量。软件测试通过使用有限的测试用例来动态地验证程序是否能达到预期的行为。有限的测试用例是从通常情况下有无限可能性的执行领域中适当地选取出来的。

  • 软件维护(software maintenance)。

软件开发工作的结果就是交付一个满足用户需求的软件产品。软件产品一旦投入运行,产品的缺陷就会被逐渐地暴露出来,运行的环境会逐渐发生变化,新的用户需求也会不断地浮出水面。软件维护就是要针对这些问题而对软件产品进行相应地修改或演化,从而修正错误,改善性能或其他特征,以及使软件适应变化的环境。

  • 软件配置管理(software configuration management)。

    软件配置管理(Software Configuration Management,SCM)是一项跟踪和控制软件变更的活动。

  • 软件工程管理(software engineering management)。

    软件工程管理是软件的开发和维护的管理活动,为了达到系统的、遵循规程的和可量化的目标,它包括计划、协调、度量、监控、控制和报表。

  • 软件工程过程(software engineering process)。

    可以在两个层次上分析软件工程过程领域,第1个层次包括软件生命周期过程中技术的和管理的活动,它们是在软件获取、开发、维护和退出运行中完成的。第2个层次是元层次,涉及软件生命周期过程本身的定义、实现、评估、管理、变更和改进。

  • 软件工程工具和方法(software engineering tools and methods)。

    软件开发工具是用于辅助软件生命周期过程的基于计算机的工具,工具可以将重复并明确定义的动作自动化,减少了软件工程师的认知负担,使软件工程师可以集中在开发过程的创造性方面。
    软件工程方法的目标是使软件工程活动系统化并最终更可能成功。

  • 软件质量(software quality)。

    对于Phil Crosby,质量就是“遵从用户需求”,Watts Humphrey认为质量就是“达到适合使用的卓越层次”。IBM发明了术语“市场驱动的质量”,它基于达到全面的客户满意,关于组织质量的Baldrige准则使用了一个类似的短语“客户驱动的质量”,将客户满意作为主要的考虑。在ISO9001-00中,质量被定义为“一组内在特征满足需求的程度”。

  • 软件工程职业实践(software engineering professional practice)。

  • 软件工程经济学(software engineering economics)。

  • 计算基础(computing foundations)。

  • 数学基础(mathematical foundations)。

  • 工程基础(engineering foundations)。

4、习题

一、判断题

1、软件就是程序,编写软件就是编写程序。(False)

软件不等于程序,程序只是软件的关键要素。普遍能被接受的观点是:软件=程序+数据+文档,软件是程序、数据及相关文档的完整集合。其中,程序是能够完成预定功能和性能的可执行的指令序列;数据是使程序能够适当地处理信息的数据结构; 文档是开发、使用和维护程序所需要的图文资料。

2、软件危机的主要表现是软件需求增加,软件价格上升。(False)

软件危机的主要表现是: 开发人员开发的软件产品不能完全满足用户的需求; 软件产品的质量难以得到保证; 软件产品的开发周期、开发经费和维护费用很难被准确地估计,从而给项目的管理带来很多麻烦;已有的软件产品往往不能灵活地适应环境的改变,软件产品的可维护性、可扩展性和可复用性往往不能满足市场的要求。

3、软件工程学科出现的主要原因是软件危机的出现。(True)

对的, 1968年北大西洋公约组织的计算机科学家在联邦德国召开国际会议,讨论软件危机问题,在这次会议上正式提出并使用了“软件工程”这个名词,一门新兴的工程学科就此诞生了,讨论 解决。

4、与计算机科学的理论研究不同,软件工程是一门原理性学科。(False)

工程性的学科 软件工程

二、选择题

1、在下列选项中,( )不是软件的特征。
A. 系统性与复制性 B. 可靠性与一致性
C 抽象性与智能性 D. 有形性与可控性

选D ,软件是无形的,没有物理形态,只能通过运行状况来了解功能、特性、和质量,不可控的。

2、软件危机的主要原因是( ) 。
A. 软件工具落后 B. 软件生产能力不足
C .对软件的认识不够 D. 软件本身的特点及开发方法

选D,软件本身的特点和开发方法的问题。

3 .下列说法中正确的是( ) 。
A. 20 世纪50 年代提出了软件工程概念
B. 20 世纪60 年代提出了软件工程概念
C. 20 世纪70 年代出现了客户机/ 服务器技术
D. 20 世纪80 年代软件工程学科达到成熟

选B, 1968年提出了软件工程的概念,20 世纪60 年代出现了客户机/服务器技术,20 世纪80 年代软件工程学科未达到成熟。

4、( )是将系统化的、规范的、可定量的方法应用于软件的开发、运行和维护的过程,它包括方法、工具和过程三个要素。
A. 软件生命周期 B. 软件测试

C . 软件工程 D. 软件过程

选C,软件工程。

5、在下列选项中,()不属于软件工程学科所要研究的基本内容。

A. 软件工程材料 B .软件工程目标
C. 软件工程原理 D . 软件工程过程
选C ,软件工程材料不属于软件工程学科所要研究的基本内容。

6、软件工程的三要素是( ) 。

A. 技术、方法和工具 B. 方法、对象和类
C. 方法、工具和过程 D. 过程、模型和方法

选C,软件工程的3要素:1)方法 2)工具 3)过程

7、用来辅助软件开发、运行维护、管理、支持等过程中的活动的软件称为软件开发工具,通常也称为( ) 工具。

A. CAD B. CAI C. CAM D. CASE
选D,软件开发工具是指用于辅助软件开发、运行、维护、管理、支持等过程中的活动的软件,通常也称为CASE(Computer Aided Software Engineering,计算机辅助软件工程)工具。A. CAD计算机辅助设计(Computer Aided Design)指利用计算机及其图形设备帮助设计人员进行设计工作。B. CAI计算机辅助教学(Computer Aided Instruction ,简称CAI)是在计算机辅助下进行的各种教学活动,以对话方式与学生讨论教学内容、安排教学进程、进行教学训练的方法与技术。D. CAM CAM (computer Aided Manufacturing,计算机辅助制造)主要是指:利用计算机辅助完成从生产准备到产品制造整个过程的活动。

三、简答题

  • 与计算机硬件相比,计算机软件有哪些特点?
    • 无法直接观察计算机软件的物理形态,只能通过观察它的实际运行清况来了解它的功能、特性和质量等。
    • 人们在分析、设计、开发、测试软件产品,以及在软件开发项目的管理过程中,渗透了大量的脑力劳动。
    • 不存在像硬件一样的磨损和老化现象,但存在着缺陷维护和技术更新的问题。
    • 软件的开发和运行必须依赖于特定的计算机系统环境。
    • 具有可复用性。
  • 软件就是程序吗? 如何定义软件?

    人们经过长期的实践已经逐步认识到,软件不等于程序,程序只是软件的关键要素。普遍能被接受的观点是:软件=程序+数据+文档。

  • 什么是软件危机? 什么原因导致了软件危机?

    • 经费超出预算,项目一再拖延。
    • 不重视需求,开发的软件不能满足用户的要求,项目成功率低。
    • 没有规范的软件工程方法,软件可维护性差、软件质最差、可靠性差。
    • 开发工具落后,手工方式,开发效率低。

    所有导致软件危机的原因,都与软件本身的产品特点相关。

    • 软件是一个复杂的逻辑产品。如果没有解决复杂问题的有效方法,以及软件产品的结构、质量、可维护性得不到保障,开发与维护费用就会持续升高。
    • 软件产品不能实现大规模复用,这导致了软硬件生产效率的不同。
    • 软件生产是脑力劳动,它看不见、摸不着,开发成本、开发周期等都无法做到准确估算,生产过程不易控制。
    • 软件成本主要是由研发成本构成;而硬件的生产成本主要是材料和制造成本,分摊的研发成本很少,即软件研发过程与硬件制造过程相比要复杂得多。
  • 为什么说软件工程的发展可以在一定程度上解决软件危机的各种弊端?

    软件工程的提出是为了解决软件危机所带来的各种弊端。具体地讲,软件工程的目标主要包括以下几点。

    • 使软件开发的成本能够控制在预计的合理范围内。
    • 使软件产品的各项功能和性能能够满足用户需求。
    • 提高软件产品的质量。
    • 提高软件产品的可靠性。
    • 使生产出来的软件产品易于移植、维护、升级和使用。
    • 使软件产品的开发周期能够控制在预计的合理时间范围内。
  • 请简述软件工程研究的内容。

    软件工程研究的内容包括软件开发方法、软件开发模型、软件支持过程和软件管理过程。

    • 软件开发方法的内容涵盖市场调研、正式立项、需求分析、项目策划、概要设计、详细设
      计、编程、测试、试运行、产品发布、用户培训、产品复制、销售、实施、系统维护、版本升级等。
    • 常用的软件开发模型有瀑布模型、迭代模型、增量模型和原型模型等。
    • 软件支持过程由所支持的CASE 工具组成,常用的CASE 工具有Power Designer 和Rational Rose 等。
  • 请简述软件工程的三要素。

    软件工程的三要素是从计算机科学的观点来看软件工程,即从软件开发的技术层面来看有过程、方法和工具这三要素。

    • “过程”是软件产品加工所经历的一系列有组织的活动,保证能够合理、高质量和及时地开发出软件。
    • ”方法”为软件开发提供“如何做"的技术。它涵盖了项目计划、需求分析、系统设计、程序实现、测试与维护等一系列活动的做法,如经常说的面向结构、面向对象、面向组件等开发方法,以及项目管理中的估算、度量、计划等管理方法。软件工程以介绍方法为主。
    • “ 工具”可为过程和方法提供自动的或半自动的支持。这些工具既包括软件,也包括硬件。软件工具包括编程、建模、管理等开发工具。通过网络环境把这些软件工具集成起来搭建一个能够支持团队开发的平台,称为计算机辅助软件工程,即CASE 。CASE 集成了软件、硬件和一个存放开发过程信息的软件工程数据库,形成了一个软件工程环境。
  • 请简述软件工程的目标、过程和原则。

目标、过程和原则是一切工程的三维框架,这里是以工程的观点来看待软件开发。

  • 软件工程的目标: 降低成本、及时交付高质量的软件产品(高质量、高效率、高效益)。

  • 实现目标的过程即完成产品加工的过程,包括:基本过程、支持过程和组织过程。

  • 进行过程应遵守的原则: 原则就是过程中的轨道约束,包括: 选取适宜的开发范型、采用合适的设计方法、提供高质量的工程支持、重视开发过程的管理。

  • 请简述软件工程的基本原则。

    软件工程的基本原则如下。

    • 将软件的生命周期划分为多个阶段,对各个阶段实行严格的项目管理。
    • 坚持阶段评审制度,以确保软件产品的质量。
    • 实施严格的产品控制,以适应软件规格的变更。在软件开发的过程中用户需求很可能不断地发生变化。
    • 采用现代的程序设计技术。
    • 开发出来的软件产品应该能够清楚地被审查。
    • 合理地安排软件开发小组的人员,并且开发小组的人员要少而精。
    • 不断地改进软件工程实践。
  • 请简述现代软件工程与传统软件工程显著的区别和改进。

传统的软件工程是基于结构化的软件开发方法,而现代软件工程是以面向对象技术为标志。

  • 不仅在编程技术上有很大的改进,而且在分析、设计等整个开发过程中,采用面向对象的思维方式,更加完整、自然地反映客观世界。
  • 采用架构技术,开发效率、产品质量得到了极大提高。
  • 更注重团队开发和管理,融入更多、更新的管理理念和手段,如RUP 模型、XP 模型、过程改进、能力成熟度模型、配置管理等。

5、小结

软件工程的3要素:1)方法 2)工具 3)过程

软件工程定义

软件工程是指导计算机软件开发和维护的工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,经济地开发出高质量的软件并有效地维护它,这就是软件工程。

软件工程的基本原理(7条)

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

消除软件危机的途径:

1.技术措施
使用更好的软件开发技术、开发工具、开发工具。
2.组织管理措施
(1)创造良好的组织、严密的管理与协调工作的机制软件开发不是某种个体劳动的神秘技巧,而应该是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目。

(2)摆脱软件危机的主要出路是,按工程化的原则和方法组织软件的开发工作。
(3)强调文档的重要性。 “口说无凭,立字为据! !”是解决软件危机的格言。

6、参考资料

[1] 张海藩,吕云翔. 软件工程(第4版)[M]. 北京:人民邮电出版社,2013 软件工程
[2] 张海藩,吕云翔. 软件工程(第4版)学习辅导与习题解析[M]. 北京: 人民邮电出版社,2013

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页