《软件工程导论》第一章

一、软件工程学概述

1.1软件危机

1、为了更有效地开发与维护软件,软件工作者在20世纪60年代后期开始认真研究消除软件危机的途径,从而逐渐形成了一门新兴的工程学科——计算机软件工程学(通常简称为“软件工程”)
2、1968年北大西洋公约组织的计算机科学家在西德召开国际会议,讨论软件危机问题,在这次会议正式提出并使用了“软件工程”这个名词,一门新兴的工程学科就此诞生了。
3、软件危机的定义: 软件危机是指在计算机的开发和维护过程中所遇到的一系列严重问题。
4、概括地说,软件危机包含下述两方面问题:

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

5、 软件危机的典型表现:

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

6、 产生软件危机的原因:

  • 客观原因
    1.软件不同于硬件,它是计算机系统中的逻辑部分而非物理部分;
    2.软件较难维护;
    3.软件不同于一般程序,它的一个显著特点是规模庞大,而且程序复杂性将随着程序规模增加而呈指数上升。
  • 主观原因
    1.忽视软件需求分析的重要性;
    2.错误的认为软件开发就是写程序;
    3.轻视软件维护;

7、详细设计是决定编码质量的关键;做好软件定义时期的工作,是降低软件成本提高软件质量的关键;编写程序所需的工作量只占软件开发全部工作量的10%-20%;测试占40%-50%;实际上用于软件维护的费用占软件总费用的55%-70%;软件工程学的一个重要目标就是提高软件的可维护性,减少软件维护的代价。
8、 消除软件危机的途径:

  • 首先应该对计算机软件有一个正确的认识,软件是程序、数据及相关文档的完整集合;
  • 必须充分吸取和借鉴前人行之有效的原理、概念、技术和方法;
  • 推广使用在实践中成功的技术和方法;
  • 开发和使用更好的软件工具;
  • 既要有技术措施(方法和工具),又要有必要的组织管理措施。软件工程正是从管理和技术两方面研究如何更好地开发和维护计算机软件的一门新兴学科。
1.2软件工程

1、软件工程是指导计算机软件开发和维护的一门工程学科,该学科的目的是生产出能按期交付的、在预算范围内的、满足用户需求的、质量合格的软件产品。
2、软件工程的本质特性:

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

3、 软件工程的基本原理:

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

8、通常把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学,也称为泛型。
9、软件工程方法学包含3个要素:方法工具过程
10、传统方法学也称为生命周期方法学或结构化范型,其特点是:

  • 采用结构化技术完成软件开发的各项任务。
  • 把软件生命周期划分成若干个阶段,如何顺序地完成每个阶段的任务。
  • 每一个阶段的开始和结束都有严格的标准,对于任何两个相邻的阶段而言,前一阶段的结束标准就是后一个阶段的开始标准。
  • 在每一个阶段结束之前都必须正式严格的技术审查和管理复审。

11、传统方法学的优点:

  • 把软件生命周期划分成若干个阶段,每个阶段的任务相对独立,而且比较简单,便于不同人员协作。
  • 使软件开发工程的全过程以一种有条不紊的方式进行,保证了软件的质量。特别是提高了软件的可维护性。
  • 采用生命周期方法学可以大大提高软件开发的成功率,软件开发的生产率也能明显提高。

12、传统方法学的缺点:

  • 当软件规模庞大,或者对软件的需求是模糊的或会随时间变化而变化的时候,使用传统方法学开发软件往往不成功。

13、面向对象方法学
  面向对象方法把数据和行为看成是同等重要的,它是一种以数据为主线,把数据和对数据的操作紧密地结合起来的方法。

  • 把对象作为融合了数据及在数据上的操作行为的统一的软件构件。
  • 把所有对象都划分成类。
  • 按照父类与子类的关系,把若干给相关类组成一个层次结构的系统。
  • 对象彼此间仅能通过发送消息互相联系。

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

1.3软件生命周期

1、软件生命周期由软件定义、软件开发和运行维护(也称软件维护)3个时期组成,每个时期又进一步划分成若干个阶段。
2、一个软件从定义、开发、使用和维护,直到最终被废弃,要经历一个漫长的时期,通常把软件经历的这个漫长的时期称为生命周期。
3、软件定义时期的任务是:确定软件开发工程必须完成的总目标(问题定义);确定工程的可行性(可行性分析);导出实现工程目标应该采用的策略及系统必须完成的功能(需求分析);估计完成该项工程需要的资源和成本,并且制定工程进度表。软件定义时期通常进一步划分成3个阶段,即问题定义可行性分析需求分析
4、开发时期具体设计和实现在前一个时期定义的软件,它通常由下述4个阶段组成:总体设计详细设计编码单元测试综合测试。其中前两个阶段又称为系统设计,后两个阶段又称为系统实现。
5、维护时期的主要任务是使软件持久地满足用户的需求,每一次维护活动本质都是一次压缩和简化了的定义和开发过程。
6、下面简要介绍软件生命周期每个阶段的基本任务。

  • 问题定义:“要解决的问题是什么?”
  • 可行性研究:“对于上一阶段所确定的问题有行得通的解决办法吗?”进行一次大大压缩和简化了的系统分析和设计过程,也就是在较抽象的高层次上进行的分析和设计过程。可行性研究应该比较简短,这个阶段的任务不是具体解决问题,而是研究问题的范围,探索这个问题是否值得去解,是否有可行的解决方案。(可行性研究报告)
  • 需求分析:“为了解决这个问题,目标系统必须做什么”,主要是确定目标系统必须具备哪些功能。通常用数据流图、数据字典和简要的算法表示系统的逻辑模型。(需求规格说明书)
  • 总体设计:“概括地说,应该怎样实现目标系统?”总体设计又称概要设计。软件设计的一条基本原理就是,程序应该模块化,也就是说,一个程序应该由若干个规模适中的模块按合理的层次结构组织而成。因此,总体设计的另一项主要任务就是设计程序的体系结构,也就是确定程序由哪些模块组成以及模块间的关系。(总体设计说明书)
  • 详细设计:“应该怎样具体地实现这个系统呢?”也称为模块设计,详细的设计每个模块,确定实现模块功能所需要的算法和数据结构。(详细设计说明书)
  • 编码和单元测试:这个阶段的关键任务是写出正确的容易理解、容易维护的程序模块。(程序清单和单元测试报告)
  • 综合测试:关键任务是通过各种类型的测试(及相应的调试)使软件达到预定的要求。最基本的测试是集成测试和验收测试。把测试计划则是按照规格说明书的规定(通常在需求分析阶段确定),由用户(或在用户积极参加下)对目标系统进行验收。
  • 软件维护:关键任务是通过各种必要的维护活动使系统持久地满足用户的需要。4类维护活动:改正性维护、适应性维护、完善性维护、预防性维护。
1.4软件过程

1、定义:软件过程是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。
2、系统是相互关联或相互作用的一组要素。
3、过程定义了运用方法的顺序、应该交付的文档资源,为保证软件质量和协调变化所需求采取的管理措施以及标志软件开发各个阶段任务完成的里程碑。
4、生命周期模型规定了把生命周期划分成哪些阶段及各个阶段的执行顺序,因此,也成为过程模型。瀑布模型与快速原型模型的主要区别是获取用户需求的方法不同。
5、各大模型的特点、优点及缺点、应用范围:
瀑布模型: 传统软件工程方法学的软件过程,基本上可以用瀑布模型来描述。
特点:

  • 阶段间具有顺序性和依赖性。
  • 推迟实现的观点。
  • 质量保证的观点。

优点:

  • 强迫开发人员采用规范的技术方法。
  • 严格地规定了每个阶段必须提交的文档。
  • 每个阶段前必须正式进行严格的技术审查和管理复查。
  • 受文档约束,使软件维护容易一些,瀑布模型的成功在很大程度上是由于它基本上是一种文档驱动的模型。

缺点:

  • 在可运行的软件产品交付给用户之前,用户只能通过文档来了解未来的产品是什么样的。
  • 开发人员和用户之间缺乏有效的沟通,很可能导致最终开发出的软件产品不能真正满足用户的需求。

应用范围:

  • 在开发过程中需求无或很少变化。
  • 分析设计人员对应用领域很熟悉。
  • 低风险项目。
  • 用户使用环境很稳定。
  • 开发工作对用户参与要求低。

快速原型模型: 第一步是快速建立一个反映用户主要需求的原型系统,让用户在计算机上试用它,通过实践来了解目标系统的概貌。
优点:

  • 通常能满足用户的真实需求。
  • 软件产品的开发过程基本上是线性顺序过程。
  • 开发人员通过建立原型系统已经学到了许多东西。
  • 缩短了开发周期,加快了进程,降低成本。

缺点:

  • 快速建立的系统结构和连续修改,可能导致产品质量低下。

应用范围:

  • 适用于那些不能预先确切定义需求的软件系统的开发。
  • 适用于那些项目组成员不能很好的交流或者通信的情况下。

注: 软件产品一旦交付给用户使用之后,维护便开始了。
   快速原型的本质是“快速”。

增量模型: 瀑布模型的改进,增量模型也称为渐增模型。使用增量模型时,第一个增量构件往往实现软件的基本需求,提供最核心的功能。当把新构件集成导现有软件中时,所形成的产品必须是可测试的。
优点:

  • 能在较短时间内向用户提交可完成部分工作的产品。
  • 人员分配灵活,刚开始不用投入大量人力资源。
  • 逐步增加产品功能,从而使用户有效充裕的时间和适应新产品,减少一个全新软件给用户带来的冲击。

缺点:

  • 在把每个新的增量构件集成到现有软件体系结构中时,必须不破坏原来已经开发出的产品。
  • 从某种意义上说,增量模型本身是自相矛盾的。它一方面要求开发人员把软件看作一个整体,另一方面又要求开发人员把软件看作构件序列,每个构件本质上都独立于另外一个构件。除非开发人员有足够的技术能力协调好这一明显的矛盾,否则用增量模型开发出的产品可能并不令人满意。
  • 使用这种方法将冒构件无法集成到一起的风险,除非密切地监控整个开发过程,否则整个开发过程,否则整个工程可能毁于一旦。

应用范围:

  • 进行已有产品升级或新版本开发,增量模型是非常适合的。
  • 对完成期限严格要求的产品,可以使用增量模型。
  • 对所开发的领域比较熟悉而且已有原型系统,增量模型也是非常适合的。

螺旋模型: 快速原型和瀑布模型的结合。基本思想是使用原型及其他方法来尽量降低风险。理解这种模型的一个简便方法,是它看作在每个阶段之前都增加了风险分析过程的快速原型模型。
优点:

  • 有利于已有软件的重用。
  • 有助于把软件质量作为软件开发的一个重要目标。
  • 减少了过多测试或测试不足所带来的风险。
  • 软件维护与软件开发没有本质区别。

缺点:

  • 需要软件开发人员具有丰富的风险评估经验和这方面的专门知识,否则将出现真正的风险。

应用范围:

  • 主要适用于内部开发的大规模软件项目。

注: 小规模用瀑布模型。
喷泉模型: “喷泉”这个词体现了面向对象软件开发过程迭代和无缝的特性。 适用于面向对象的软件开发。
==统一过程模型:==是基于统一建模语言(UML)的面向对象软件开发过程模型。
附: 思考题以及个人答案:
1、软件是什么?
  软件是计算机程序、所用的数据及有关文档的集合。可以说:软件=程序+数据+文档。
2、为什么说软件是创意产品?
  软件具有知识性的特点,其表现在创意为王、知识产品、无磨损、开发投入大复制零成本、传播速度快。
3、软件工程中有哪些角色?
  项目经理、产品经理、分析设计师、程序员、测评师、实施、维护、培训师、销售等。
4、软件的特点都有哪些表现?
  软件的特点:知识性、社会性、复杂性、不可见性、硬件性、规模越来越大
这些特点可能使软件在开发、使用和维护中留下隐患,导致软件危机。

  • 软件的知识性表现在创意为王、知识产品、无磨损、开发投入大复制零成本、传播速度快。
  • 软件的社会性表现在由人开发、为人所用、人的社会性带入软件、不同人的思想行为影响软件。
  • 软件的复杂性表现在需求越来越复杂、解决方案越来越复杂、工具越来越复杂、质量控制越来越难。
  • 软件的不可见性表现在没有运行时看不见摸不着、运行时内部处理不可见、描述起来不方便、不形象、不直观。
  • 软件的硬件性表现在软件的运行与硬件的关系密切、与硬件环境的相关性非常高、不同硬件中的软件许多都互不通用。

5、什么是软件危机?
  软件危机是指在计算机的开发和维护过程中所遇到的一系列严重问题。
6、软件危机的表现有哪些?
  软件危机的典型表现:

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

7、如何消除软件危机?
  消除软件危机的途径:

  • 首先应该对计算机软件有一个正确的认识,软件是程序、数据及相关文档的完整集合;
  • 必须充分吸取和借鉴前人行之有效的原理、概念、技术和方法;
  • 推广使用在实践中成功的技术和方法;
  • 开发和使用更好的软件工具;
  • 既要有技术措施(方法和工具),又要有必要的组织管理措施。软件工程正是从管理和技术两方面研究如何更好地开发和维护计算机软件的一门新兴学科。

12、软件工程主要哪几种方法?
  面向过程方法、面向数据方法、面向对象方法、形式化方法
13、软件工程每种方法的特点?分别适用什么样的软件开发?
  面向过程方法:面向过程的方法 : 面向过程需求分析、面向过程设计、面向过程编程、面向过程测试、面向过程维护、面向过程管理。面向过程的方法,又称为面向功能的方法,或称为结构化方法。

  • 特点:程序的执行过程,不由用户控制,完全由程序员控制。
  • 优点:简单实用。
  • 缺点:企图用有穷的方法(枚举法)来描述无穷的(随机的)信息世界,所以不能完全描述信息世界;维护困难。
  • 适用场合:大型工程计算,实时数据跟踪处理,各种自动化控制系统,以及系统软件实现等领域。

  面向数据的方法:面向元数据的方法,是建设数据库和数据仓库的基本方法。
  内容:1.数据位于信息系统的中心。2.由元数据构成的数据模型是稳定的。3.对元数据的处理方法是可变的。4.企业信息系统的核心是数据模型。5.系统的实现方法主要是面向对象。

  • 特点:程序的执行过程,有时由程序员控制,有时由用户控制。
  • 优点:适合数据层设计与实现。
  • 缺点:实现窗口界面较困难。
  • 适用场合:互联网络时代,完全由用户交互控制程序执行过程的应用软件和系统软件的开发。

  面向对象方法:面向对象需求分析、面向对象设计、面向对象编程、面向对象测试、面向对象维护、面向对象管理。
  面向对象方法=对象+类+继承+消息

  • 特点:(1)程序的执行过程,不由程序员控制,完全由用户控制。
       (2)分析设计时面向类,编程时面向对象。
  • 优点:用无穷的方法来描述无穷的(随机的)信息世界,所以能完全描述信息世界;易于维护。·
  • 缺点:较难掌握。
  • 适用场合:以关系数据库管理系统为支撑环境的信息系统建设。

  形式化方法:数学方法:用数据的语言描述、推导、验证。

  • 优点::严谨,无二义性,验证结果可靠。
  • 不足:对于不能够形式化的大型、复杂软件不适用。
  • 适用场合:对安全性要求极高,不容许出错的软件系统,如军事、医药、交通等领域。

14、如何延长软件的生命周期?
[1]袁庄山.如何延长软件生命周期[J].中国金融电脑,2008(12):51-52.
15、有哪些常见的软件过程模型?
  瀑布模型、原型模型、增量模型、螺旋模型、喷泉模型、统一过程、敏捷过程等。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值