【软件工程】期末复习-第1章 软件工程学概述

【软件工程】期末复习

第1章 软件工程学概述
第2章 可行性研究
第3章 需求分析
第5章 总体设计
第6章 详细设计
第7章 实现



前言

教材:《软件工程导论(第6版)》(张海藩、牟永敏)
软件工程导论教材

教材目录
软件工程导论目录
期末速成,主要针对考点总结,可能缺少部分章节内容,持续更新。督促自己快快复习。


一、软件危机

1.软件危机的定义

在计算机软件开发和维护过程中所遇到的一系列严重问题。
概括地说,软件危机包含下述两方面的问题:
(1)如何开发软件,以满足对软件日益增长的需求;
(2)如何维护数量不断膨胀的已有软件。

2.软件危机的表现形式

具体地说,软件危机主要有以下一些典型表现
(1)对软件开发成本和进度的估计常常很不准确。
(2)用户对“已完成的”软件系统不满意的现象经常发生。
(3)软件产品的质量往往靠不住。
(4)软件常常是不可维护的。
(5)软件通常没有适当的文档资料。
(6)软件成本在计算机系统总成本中所占的比例逐年上升。
(7)软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。

3.产生软件危机的原因

一方面与软件本身的特点有关,另一方面也和软件开发与维护的方法不正确有关。

本身特点(客观原因):
(1)软件是计算机系统中的逻辑部件而不是物理部件,缺乏“可见性”,管理和控制软件开发过程相当困难。
(2)软件不同于一般程序,它的一个显著特点是规模庞大,而且程序复杂性将随着程序规模的增加而呈指数上升。

软件开发与维护的方法不正确(主观原因):
(3)目前相当多的软件专业人员存在与软件开发和维护有关的许多错误认识和做法,忽视软件需求分析的重要性,认为软件开发就是写程序并设法使之运行,轻视软件维护等。
a.对用户要求没有完整准确的认识就匆忙着手编写程序。
b.轻视维护是一个最大的错误。在软件开发的不同阶段进行修改需要付出的代价是很不相同的。
代价

(4)供求矛盾、技术发展不能适应日益增长的社会需求。

4.消除软件危机的途径

软件的概念:软件是程序数据相关文档的完整集合。
其中,程序是能够完成预定功能和性能的可执行的指令序列;数据是使程序能够适当地处理信息的数据结构;文档是开发、使用和维护程序所需要的图文资料。

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

为了解决软件危机,既要有技术措施(方法和工具),又要有必要的组织管理措施。

二、软件工程

1.软件工程的定义 (IEEE,1993)

(1)把系统的、规范的、可度量的途径应用于软件开发、运行和维护过程,也就是把工程应用于软件。
(2)研究1中提到的途径(系统的、规范的、可度量的途径)。

2.软件工程的本质特性

(1)软件工程关注于大型程序的构造
(2)软件工程的中心课题是控制复杂性
(3)软件经常变化
(4)开发软件的效率非常重要
(5)和谐地合作是开发软件的关键
(6)软件必须有效地支持它的用户
(7)在软件工程领域中通常由具有一种文化背景的人替具有另一种文化背景的人创造产品(这个特性与前两个特性紧密相关)

3.软件工程的基本原理

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

这7条原理是确保软件产品质量和开发效率的原理的最小集合,是互相独立的,其中任意6 条原理的组合都不能代替另一条原理,缺一不可

4.软件工程方法学

软件工程包括技术和管理两方面的内容,是技术与管理紧密结合所形成的工程学科。
(1)所谓管理就是通过计划、组织和控制等一系列活动,合理地配置和使用各种资源,以达到既定目标的过程。
(2)通常把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学 (methodology),也称为范型(paradigm)。
(3)软件工程方法学包含3个要素:方法、工具和过程
a.方法是完成软件开发的各项任务的技术方法,回答“怎样做"的问题;
b.工具是为运用方法而提供的自动的或半自动的软件工程支撑环境;
c.过程是为了获得高质量的软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。

5.软件工程方法学分类

目前使用得最广泛的软件工程方法学,分别是传统方法学和面向对象方法学
(1)传统方法学(生命周期方法学或结构化范型)
a.采用结构化技术(结构化分析、结构化设计和结构化实现)来完成软件开发的各项任务,并使用适当的软件工具或软件工程环境来支持结构化技术的运用。

b.把软件生命周期的全过程依次划分为若干个阶段,然后顺序地完成每个阶段的任务。

c.从对问题的抽象逻辑分析开始,一个阶段一个阶段地顺序进行开发。每一个阶段的开始和结束都有严格标准,对于任何两个相邻的阶段而言,前一阶段的结束标准就是后一阶段的开始标准。

d.在每一个阶段结束之前都必须进行正式严格的技术审查和管理复审,从技术和管理两个方面对这个阶段的开发成果进行检查,通过之后这个阶段才算结束。

优点:使软件开发工程的全过程以一种有条不紊的方式进行,保证了软件的质量,特别是提高了软件的可维护性。可以大大提高软件开发的成功率,软件开发的生产率也能明显提高。
缺点:当软件规模庞大,或者对软件的需求是模糊的或会随时间变化而变化的时候,使用传统方法学开发软件往往不成功,此外,使用传统方法学开发出的软件,维护起来仍然很困难。

(2)面向对象方法学(面向对象范型)
a.把对象(object)作为融合了数据及在数据上的操作行为的统一的软件构件。用对象分解取代了传统方法的功能分解。

b.把所有对象都划分成(class)。每个类都定义了一组数据和一组操作,类是对具有相同数据和相同操作的一组相似对象的定义。数据用于表示对象的静态属性,是对象的状态信息,而施加于数据之上的操作用于实现对象的动态行为。

c.按照父类(或称为基类)与子类(或称为派生类)的关系,把若干个相关类组成一个层次结构的系统(也称为类等级)。在类等级中,下层派生类自动拥有上层基类中定义的数据和操作,这种现象称为继承

d.对象彼此间仅能通过发送消息互相联系。对象的所有私有信息都被封装在该对象内,不能从外界直接访问,这就是通常所说的封装性

三、软件生命周期

1.软件生命周期时期划分

软件生命周期由软件定义、软件开发和运行维护(也称为软件维护)3个时期组成,每个时期又进一步划分成若干个阶段。
软件生命周期
(1)软件定义时期通常进一步划分成3个阶段,即问题定义、可行性研究和需求分析。
(2)软件开发时期具体设计和实现在前一个时期定义的软件,由4个阶段组成:总体设计,详细设计,编码和单元测试,综合测试。其中前两个阶段又称为系统设计,后两个阶段又称为系统实现。
(3)软件维护时期通常包括4类活动(第8 章补充):
a.为了纠正在使用过程中暴露出来的错误而进行的改正性维护;
b.为了适应外部环境的变化而进行的适应性维护;
c.为了改进原有的软件而进行的完善性维护;
d.为了改进将来的可维护性和可靠性而进的预防性维护。

2.软件生命周期每个阶段的基本任务

(1)问题定义
问题定义阶段必须回答的关键问题是:“要解决的问题是什么?”
(2)可行性研究
这个阶段要回答的关键问题是:“对于上一个阶段所确定的问题有行得通的解决办法吗?”
(3)需求分析
这个阶段的任务是准确地确定“为了解决这个问题,目标系统必须做什么”,主要是确定目标系统必须具备哪些功能。这个阶段的一项重要任务,是用正式文档准确地记录对目标系统的需求,这份文档通常称为规格说明书(specification)。
(4)总体设计
这个阶段必须回答的关键问题是:“概括地说,应该怎样实现目标系统?”总体设计又称为概要设计。总体设计的另一项主要任务就是设计程序的体系结构,也就是确定程序由哪些模块组成以及模块间的关系。
(5)详细设计
详细设计阶段的任务就是把解法具体化,也就是回答下面这个关键问题:“应该怎样具体地实现这个系统呢?” 这个阶段的任务是设计出程序的详细规格说明。
详细设计也称为模块设计,在这个阶段将详细地设计每个模块,确定实现模块功能所需要的算法和数据结构。
(6)编码和单元测试
这个阶段的关键任务是写出正确的容易理解、容易维护的程序模块。
(7)综合测试
这个阶段的关键任务是通过各种类型的测试(及相应的调试)使软件达到预定的要求。最基本的测试是集成测试和验收测试。
(8)软件维护
维护阶段的关键任务是,通过各种必要的维护活动使系统持久地满足用户的需要。

以上根据应该完成的任务的性质,把软件生命周期划分成8个阶段。在实际从事软件开发工作时,软件规模、种类、开发环境及开发时使用的技术方法等因素,都影响阶段的划分。

四、软件过程

1.软件过程定义

软件过程是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。
通常使用生命周期模型简洁地描述软件过程。
生命周期模型规定了把生命周期划分成哪些阶段及各个阶段的执行顺序,因此,也称为过程模型。

2.软件过程模型(生命周期模型)

(1)瀑布模型(应用最广泛)
按照传统的瀑布模型开发软件,有下述的几个特点。
a.阶段间具有顺序性和依赖性
b.推迟实现的观点
c.质量保证的观点
传统瀑布模型
实际瀑布模型
① 优点:
a.可强迫开发人员采用规范的方法(例如,结构化技术);
b.严格地规定了每个阶段必须提交的文档;
c.要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证。
d.遵守瀑布模型的文档约束,将使软件维护变得比较容易一些,就能显著降低软件预算。瀑布模型的成功在很大程度上是由于它基本上是一种文档驱动的模型。
② 缺点:
瀑布模型是由文档驱动的
a.在可运行的软件产品交付给用户之前,用户只能通过文档来了解产品是什么样的,很难全面正确地认识动态的软件产品。
b.用户不经过实践就提出完整准确的需求,在许多情况下都是不切实际的。
c.很可能导致最终开发出的软件产品不能真正满足用户的需要。

(2)快速原型模型
快速原型是快速建立起来的可以在计算机上运行的程序,它所能完成的功能往往是最终产品能完成的功能的一个子集。
快速原型模型
① 优点:
a.开发出的软件可以满足用户的真实需求。
b.软件产品的开发基本上是线性顺序进行的。
c.节约软件开发成本。
② 缺点:由于用户不断提出新要求,原型迭代周期很难控制。

(3)增量模型
增量模型也称为渐增模型,使用增量模型开发软件时,把软件产品作为一系列的增量构件来设计、编码、集成和测试。每个构件由多个相互作用的模块构成,并且能够完成特定的功能。使用增量模型时,第一个增量构件往往实现软件的基本需求,提供最核心的功能。
增量模型
分解时唯一必须遵守的约束条件是,当把新构件集成到现有软件中时,所形成的产品必须是可测试的。
① 优点:
a.能在较短时间内向用户提交可完成部分工作的产品
b.逐步增加产品功能可以使用户有较充裕的时间学习和适应新产品,从而减少一个全新的软件可能给客户组织带来的冲击
② 缺点:
a.在把每个新的增量构件集成到现有软件体系结构中时,必须不破坏原来已经开发出的产品。软件体系结构必须是开放的。
b.从某种意义上说,增量模型本身是自相矛盾的。它一方面要求开发人员把软件看作一个整体,另一方面又要求开发人员把软件看作构件序列,每个构件本质上都独立于另一个构件,难以协调好这一明显的矛盾。

(4)螺旋模型(适用于内部开发的大型软件项目)
螺旋模型的基本思想是,使用原型及其他方法来尽量降低风险。
螺旋模型
① 优点:
a.有利于已有软件的重用
b.有助于把软件质量作为软件开发的一个重要目标;
c.减少了过多测试(浪费资金)或测试不足(产品故障多)所带来的风险;
d.在维护和开发之间并没有本质区别。
② 缺点:要求软件开发人员具有丰富的风险评估知识和经验。
完整的螺旋模型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值