2017.11.25 软件工程------第一章 软件工程学的概述(复习总结归纳)

两盒软妹~` 提交于 2020-03-22 06:13:53

软件工程---第一章 软件工程学的概述

1.1 软件危机的介绍

软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题

1.2 软件危机的一些典型表现

对软件开发成本和进度估计常常很不准确
用户对已完成的软件系统不满意的现象经常发生
软件产品的质量往往靠不住
软件常常似乎不可维护的
软件通常没有适当的文档资料
软件成本在计算机系统成本中所占的比例逐年上升
软件开发产率提高的速度

1.3 产生软件危机的原因

一方面是软件本身的特点有关;另一方面也和软件与维护的方方法不正确有关。
具体如下:

(1) 
软件不同于硬件,它是计算机系统的逻辑部件而不是物理部件。在写出程序代码并在计算机上试运行之前,软件开发过程的进展情况较难衡量。很难检验开发的正确性且软件开发的质量也较难评价。因此,控制软件开发过程相当困难。此外,在软件运行过程中发现错误,很可能是遇到了一个在开发期间引入的、但在测试阶段没有能够检测出来的错误,所以软件维护常常意味着修改原来的设计。这样,维护的费用十分惊人,客观上使得软件较难维护。
(2) 
软件开发的过程是多人分工合作,分阶段完成的过程,参与人员之间的沟通和配合十分重要。但是,相当多的软件开发人员对软件的开发和维护存在不少错误的观念,在实践的过程中没有采用工程化的方法,或多或少采用了一些错误的方法和技术,这是造成软件危机的
主要原因。
(3) 
开发和管理人员只重视开发而轻视问题的定义,使软件产品无法满足用户的要求。对用户的要求没有完整准确的认识就急于编写程序。这是许多软件开发失败的另一主要原因。事实上,许多用户在开始时并不能准确具体地叙述他们的需要,软件人员需要做大量深入细致
的调查研究工作,反复多次与用户交流信息,才能真正全面、准确、具体地了解用户的要求。
(4) 
软件管理技术不能满足现代软件开发的需要,没有统一的软件质量管理规范。首先是文档缺乏一致性和完整性,从而失去管理的依据。因为程序只是完整软件产品的一个组成部分,一个软件产品必须由一组的配置组成,不能只重视程序而应当特别重视软件配置。其次,由于成本估计不准确,资金分配混乱,人员组织不合理,进度安排无序,导致软件技术无法实施。
(5) 
在软件的开发和维护关系问题上存在错误的观念。软件维护工作通常是在软件完成之后进行的,因此是极端艰巨复杂的工作,需要花费很大的代价。所以做好软件的定义工作,是降低软件成本,提高软件质量的关键。如果软件人员在定义阶段没有正确、全面地理解用户
要求,直到测试阶段才发现软件产品不完全符合用户的需要,这时再修改就为时已晚了。另外,在软件生存期的不同结点进行修改需要付出的代价是很不相同的。在早期引入变更,涉及面较小,付出的代价较低;在开发的中期软件配置的许多成分已经完成,引入一个变更可
能需要对所有已完成的配置成分都做相应的修改,不仅工作量大,而且逻辑上更复杂,因而付出的代价剧增。在软"已经完成"后再引入变更。则需要付出更高得多的代价。因此,必须把软件维护的观念引入软件开发的各个阶段,建立起软件开发与维护的正确关系。

1.4 消除软件危机的途径

为了消除软件危机,首先应该对计算机软件有一个正确的认识。在早期形成的“软件就是程序”的错误观念。一个软件必须由一个完整的配置组成,事实上,软件是程序、数据以及文档的完整集合。消除危机必须既要有技术设施又要有必要的组织管理措施。

1.5 软件工程

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

有一种更全面地定义:1.软件工程是:把系统的、规范的、可度量的途径应用于软件开发、运行和维护过程,也就是把工程应用与软件;2.研究1中提到的途径。

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

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

1.7 软件工程方法学

`软件工程包括技术和管理两方面的内容

所谓管理就是通过计划、组织和控制等一系列活动,合理地配置和使用资源,以达到既定的目标过程
通常把软件生命周期全过程中使用的一整套技术方法的集合称为方法学也称为范型
软件工程包括的三要素:方法、过程、工具

·软件工程方法学包括传统方法学和面向对象方法学
传统方法学也称为生命周期方法学或结构化范型。它采用结构化技术(结构化分析、结构化设计和结构化实现)来完成软件开发的各项任务。
面向对象方法学有四个要点
(1)把对象做为融合了数据及数据上的操作行为的统一的软件构件,面向对象程序是由对象组成的,程序中任何元素都是对象,复杂对象由比较简单的对象组合而成
(2)把所有对象都划分为类。每个类定义了一组数据和一组操作,类是对具有相同数据和相同操作的一组对象的定义。
(3)按照父类(基类)与子类(派生类)的关系把若干个相关类组成一个层次结构的系统,在类等级中,下层派生类自动拥有上层基类中定义的数据和操作,这种想象叫做继承。
(4)对象彼此间仅能通过发送消息互相联系。对象与传统数据有本质区别,他不是被动地等待外界对它施加操作,相反他是数据处理的主体,必须向他发消息请求他执行。也就是说对象的所有私有信息都被封装在该对象内,不能从外界直接访问,这就是所说的封装。
****

1.8 软件生命周期

软件生命周期由软件定义、软件开发、运行维护(软件维护)3个时期组成。

软件定义时期
它的任务是:确定软件开发工程必须完成的总目标;确定工程的可行性;导出实现工程目标应该采用的策略及系统必须完成的功能这恶时期的工作又称为系统分析,由系统分析员负责完成。软件定义时期分为三个阶段:问题的定义、可行性研究、需求分析

开发时期
由四个阶段组成:总体设计、详细设计、编码和单元测试。前两个又称为系统设计,后两个阶段又称为系统实现

维护时期
主要任务是使软件持久地满足用户需要,当软件在使用过程中发现错误时及时加以修改

下面是各个阶段的一些补充说明:

在需求分析阶段:确定的系统逻辑模型是以后设计和实现目标系统的基础,因此必须准确地体现用户的要求。这一阶段的一项重要任务,使用正式文档准确记录对目标系统的需求,这份文档通常称为规格说明书。
在总体设计阶段:又称为概要设计,概括地说就是应该实现怎样的系统。程序设计一一条基本原理就是:程序应该模块化,也就是说一个程序应该若干规模适中按合理的层次结构组织而成。

详细设计:这个阶段不是编写程序,而是设计出程序的详细蓝图,他们应该包含必要的细节,程序员应该可以根据他们写出实际的程序代码。详细设计也就叫做模块设计在这个阶段详细地设计每个模块,确定实现模块共鞥所需要的算法和数据结构。

编码和单元测试
这个阶段关键任务是写出正确的容易理解的程序模块

综合测试
通过各种类型的测试(及相应的调试)使软件达到预定的要求。最基本的测试是集成测试和验收测试,
所谓集成测试就是根据设计的软件结构把经过单元测试检验的模块按某种选定的策略装配起来;
所谓验收测试就是按照规格说明书的规定有用户对目标系统进行验收。

1.9 软件过程

概括地说就是为了开发出客户需要什么软件、什么人、在什么时候、做什么事以及怎样做这些事以实现某一特定的具体目标;通常使用生命周期模型简洁地描述软件过程
瀑布模型和快速原型模型的主要区别是获取用户需求的方法不同。

2.1 5种生命周期模型

(1)瀑布模型

特点:
1.阶段间具有顺序性和依赖性
这个特点有两种含义:必须等待前一阶段的工作完成之后,才能开始后一阶段的工作,前一阶段的输出文档就是后一阶段的输入文档,看得出来具有连锁反应。
2.推迟实现的观点

3.质量保证的观点
软件工程的基本目标是优质、高产,及时审查是保证软件质量、降低软件成本的重要措施;图中实线部分是软件开发过程,虚线箭头表示维护过程

瀑布模型的优点:

实际的瀑布模型是带反馈环的,
可强迫开发人员采用规范的方法;
严格规定了每个阶段必须提交的文档;
要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证。
它是一次把一个满足需求的产品提交给用户

(2)快速原型模型
快速原型模型就是快速建立起来的可以在计算机上运行的程序,它所能完成的功能往往是最终产品能完成的功能功能的一个子集。
快速原型的第一步是快速建立一个能反映用户主要需求的原型系统,让用户在计算机上试用它;

快速原型模型的优点

快速原型模型不带反馈环;
软件产品的开发基本上是线性顺序进行的
快速原型的本质是快速
它是一次把一个满足需求的产品提交给用户

(3)增量模型
也称为渐增模型;使用增量模型时,第一个增量构件往往实现软件的基本需求,提供最核心的功能。(构件就是功能清晰地子系统)

增量模型的优点

能在较短的时间内向用户提交可以完成部分工作的产品;
它是分批次逐步向用户提交产品
还可以逐步增加产品功能使用户有较充裕的时间学习和适应新产品

(4)螺旋模型
它的基本思想是:使用原型及其他办法来尽量降低风险;他主要用于内部开发的大规模软件项目

螺旋模型的特点

对可选方案和约束条件的强调有利于已有软件的重用
它是风险驱动

(5)喷泉模型
迭代是软件开发过程中普遍存在的一种内在属性喷泉这个词体现了面向对象软件开发过程迭代和无缝的特性

2.2 Rational统一过程

Rational Unified Process(RUP)
RUP总结了经过多年商业化验证的6条最有效的软件开发经验,这些经验被叫做“最佳实践”

1.最佳实践
2.RUP软件开发生命周期

2.3 敏捷过程与极限编程

敏捷过程

敏捷过程4个简单的价值观
    ··个体和交互胜过过程和工具
    ··可以工作的软件胜过面面俱到的文档
    ··客户合作胜过合同谈判
    ··响应变化胜过遵循计划

极限编程
它是敏捷过程中最富盛名的一个,其名称中的“极限”二字的含义是把好的开发实践运用到极致。

2.4微软过程

1.微软过程准则
2.微软软件生命周期
3.微软过程模型

本章小结:
面向对象方法=对象+类+继承+用消息通信
软件生命周期的定义分为:问题的定义、可行性研究、需求分析、总体设计、详细设计、编码和单元测试、综合测试、以及运行维护8个阶段。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!