软件工程:概述

1,软件危机

1.1,软件危机的介绍

软件是抽象的、不可触摸的,它不受物质材料的限制,也不受物理定律或加工过程的制约:

  • 一方面使软件工程得以简化,因为软件的潜能不受物理因素的限制。
  • 一方面,由于缺乏自然约束,软件系统也就很容易变得极其复杂,理解它会很困难,改变它的价格。

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

软件工程解决的问题:如何开发软件以满足对软件日益增长的需求如何维护数量不断膨胀的已有软件

典型问题:

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

1.2,产生软件危机的原因

内在原因:

  • 软件不同于硬件,它是计算机系统中的逻辑部件而不是物理部件。
  • 软件在运行过程中不会因为使用时间过长而被“用坏”,如果运行中发现错误,很可能是遇到了一个在开发时期引入的在测试阶段没能监测出来的错误。
  • 规模庞大,而且程序复杂性将随着程序规模的增加而呈现指数上升。
  • 软件本身特点对开发和维护带来了一定的客观困难。

外在原因:

  • 不断增长的系统复杂性。随着新的软件工程技术可以帮助我们构建更大、更复杂的系统,要求在发生变化。系统必须更快地构建和交付;需要更大甚至更复杂的系统;系统必须具备在以前看来不可能实现的功能。必须不断发展新的软件工程技术来迎接交付更复杂的软件的新挑战。
  • 未采用有效的软件工程方法。错误的认识和做法主要表现为忽视软件需求分析的重要性,认为软件开发就是写程序并设法是之运行,轻视软件维护,结果导致软件经常比预计的费用要高而可靠性低于预期。

1.3,消除软件危机的途径

既要有数据措施(方法和工具),又要有必要的组织管理措施:

  • 对计算机软件有一个正确的认识:软件=程序+文档(手册、 站)+数据。
  • 软件开发时一种组织良好,管理严密,各类人员协同配合,共同完成的工程项目。
  • 应该推广使用在实践中总结出来的开发软件的成功的技术和方法,并且研究探索更好更有效的技术和方法。
  • 应该开发和使用更好的软件工具。

2,软件工程

2.1,软件

软件:计算机程序和相关文档。软件产品可以是针对特定客户开发,也可以面向一个通用的市场开发。

优秀的软件:优秀的软件应当向用户提供所需的功能与性能,而且应当具备好的可维护性、可依赖性和可用性。

软件产品的分类:

  • 通用软件产品:有软件开发组织开发,在市场上公开销售,可以独立享用。包括:移动应用、数据库软件、字处理软件、绘图软件以及项目管理软件等。还包括用于特定目的应用产品,如图书馆管理系统、财务系统等。
  • 定制化软件产品:受特定的客户委托,由软件承包商专门为这类客户设计和实现。这类软件包括电子设备的控制系统、特定的业务处理系统、空中交通管制系统等。
  • 两者区别:在通用软件产品中,软件规格说明由开发者自己确定,这意味着如果在开发过程中遇到了问题,那么开发者可以重新思考所要开发的东西;而定制化软件产品的软件规格说明通常是由客户给出的,开发者必须按照用户要求进行开发。现实中,两者区别逐渐变小,通常是在一个通用软件基础上进行定制以满足特定客户的具体要求。

2.2,软件工程的介绍

软件工程定义: 

  • 定义:软件工程是指导计算机软件开发和维护的一门工程学科。(软件工程是一个工程学科,涵盖了软件生产的各个方面,从初始的构思到运行和维护。)
  • NATO:软件工程就是为了经济地获得可靠的且能在实际机器上有效运行的软件,而建立和使用完善的工程原理。
  • IEEE:软件工程是把系统的,规范的,可度量的途径应用于软件开发,运行和维护过程,也就是把工程应用于软件。

软件工程和计算机科学:计算机科学关注理论和基础,而软件工程则关注开发和交付有用的软件的实践。

软件工程和系统工程:系统工程关注基于计算机的系统开发的所有方面,包括硬件、软件和过程工程。软件工程则更加泛化的过程的一部分。

基本软件工程活动:软件规格说明、软件开发、软件确认和软件演化。

软件工程面临的挑战:应对不断增长的多样性、缩短交付时间以及开发可信软件的要求。

软件工程的成本:软件开发成本约占总成本的60%,测试成本占比40%。对于定制化软件而言,演化成本进程超过开发成本。互联 给软件工程带来了大规模、高度分布式、基于服务的系统开发,而且在互联 的支持下创造了改变软件经济模式的移动App产品。

软件工程的本质特性:

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

2.3,深入理解软件工程

软件工程的重要性:

  • 个人和 会越来越多地依赖于先进的软件系统。这就要求我们能够以经济而且快速的方式开发出可靠、可信的系统。
  • 从长远来看,运用软件工程方法和技术开发专业化的软件系统,比单纯作为个人编程项目写程序更加便宜。无法有效应用软件工程方法将会导致更高的测试、质量保证和长期维护的成本。

软件工程的基本要求:

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

2.4,软件工程方法学

3,软件生命周期

4,软件过程

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

4.1,瀑布模型-整体开发模型

特点:

  • 阶段间具有顺序性和依赖性,必须等到前一阶段的工作万抽才能开始后一阶段的任务,前一阶段的输出文档就是后一阶段的输出文档。
  • 推迟实现的观点,对于缺乏软件开发的软件开发人员来说,接到软件开发任务以后常常急于求成,但是最后开发所需的时间反而越长。
  • 质量保证的观点,每个阶段都必须又合格的文档,没有则是没有完成该阶段的任务,并且每个阶段都必须对文档进行评审,以便尽早的发现问题,改正错误。是一种文档驱动型模型。
  • 强迫开发人员采用规范的开发方法(结构化技术),严格地规定了每个阶段必须提交的文档,要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证。
  • 用户只能通过文档来了解产品是什么样的,很难全面正确的认识动态软件产品,最终导致开发出的软件产品不能满足用户需求。

4.2,快速原型模型

快速原型是快速建立起来的可以在计算机上运行的程序,它所能完成的功能往往是最终产品能完成的功能的一个子集。

快速原型模型是不带反馈环的,这正是这种过程模型的主要优点,软件产品开发基本上是线性顺序进行的

原因:

  • 原型系统已经通过与用户交互而得到验证,据此说明规格说明文档是正确的描述了用户的需求。
  • 开发人员通过建立原型系统已经学到了(系统应该做什么,不应该做什么),设计和编码错误减少。

特点:

  • 快速原型的本质是“快速”,加速软件开发过程,节约软件开发成本,原型的用图是获取用户的真正需求,一旦确定了原型就会被抛弃。
  • 原型系统的内部结构不重要,重要的是必须迅速地构建原型然后根据用户意见迅速地修改原型。

4.3,增量模型

增量模型把软件产品看为一系列的增量构件来设计,编码,集成和测试。每个构件由多个相互作用的模块构成,并且能够完成特定功能,使用增量模型时,第一个增量构件往往实现软件的基本需求,提供最核心的功能。

优点:

  • 与瀑布模型相比提供的是部分工作的产品,不是文档。
  • 逐步增加产品功能可以使用户有充裕的时间学习和适应新产品,从而减少给用户一个全新软件的冲击。

缺点:

  • 软件的结构体系必须是开放的。
  • 增量模型是矛盾的,一方面要求把软件看出一个整体,另一方面要求看作构件序列。

4.4,螺旋模型

螺旋模型的思想是使用原型及其他方法来尽量降低风险,可以看作引入风险评估快速原型模型。

特点

  • 对可选方案和约束条件的强调有利于已有软件的重用,也有助于把软件质量作为软件开发的一个重要目标,减少过多测试或测试不足带来的风险。
  • 维护是模型的另一个周期,在维护和开发之间没有本质区别。
  • 适用于内部开发大规模软件项目。
  • 风险驱动型。

4.5,喷泉模型

瀑布模型——结构化技术,喷泉模型——面向对象技术。

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年10月15日
下一篇 2022年10月15日

相关推荐