开发者社区> 华章计算机> 正文

《软件工程方法与实践》—— 1.3 什么是软件工程

简介: 在软件开发的早期阶段,人们过高地估计了计算机软件的功能,认为软件能承担计算机的全部责任,甚至有些人认为软件可以做任何事情。如今,绝大多数专业人士已经认识到软件神化思想的错误。尤其是软件危机的出现,迫使人们思考一个问题,那就是软件并非是万能的,难以满足人们各种各样的需求,需要提出有效的开发与维护方法来指导人们高效率地开发高质量的软件。
+关注继续查看

本节书摘来自华章出版社《软件工程方法与实践》一 书中的第1章,第1.1节,作者窦万峰,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

1.3 什么是软件工程

在软件开发的早期阶段,人们过高地估计了计算机软件的功能,认为软件能承担计算机的全部责任,甚至有些人认为软件可以做任何事情。如今,绝大多数专业人士已经认识到软件神化思想的错误。尤其是软件危机的出现,迫使人们思考一个问题,那就是软件并非是万能的,难以满足人们各种各样的需求,需要提出有效的开发与维护方法来指导人们高效率地开发高质量的软件。

1.3.1 软件危机

计算机硬件技术的不断进步,要求软件能与之相适应。然而,软件技术的进步一直未能满足形势发展提出的要求,致使问题积累起来,形成了日益尖锐的矛盾,最终导致了软件危机。软件危机主要表现如下:
软件的规模越来越大,复杂度不断地增加,软件的需求量也日益增大,且价格昂贵,供需差日益增大。
软件的开发过程是一种高密集度的脑力劳动,软件开发工作常常受挫,质量差,很难按照要求的进度表来完成指定的任务,软件的研制过程管理起来困难,往往失去控制。
软件开发的模式及技术已经不能适应软件发展的需要。因此,导致大量低质量的软件涌向市场,有些软件开发出来已远远超出了预算,有的软件甚至在开发过程中就夭折了。例如,伦敦股票交易系统当初预算4.5亿英镑,后来追加到7.5亿,历时5年,但最终还是失败,导致伦敦股票市场声誉下跌。
下面通过伦敦救护服务系统的例子来分析软件危机的表现和问题。
伦敦救护服务系统覆盖伦敦市区600平方千米的地域和大约680万的救护人口,是世界上最大的救护服务中心。该服务中心拥有318辆事故与应急救护车和445病人运输救护车、一个摩托车接应团队和一架直升机。中心的工作人员达到2746人,他们分布在伦敦市区70个救护站,每个救护站又分成4个运营部门。
伦敦救护服务系统的目的是提供自动化救护呼叫请求和处理紧急救护需要,通过计算机系统处理人工系统的所有任务。呼叫999和请求救护服务将呼叫者和派遣者连接起来,派遣者记录呼叫细节和分派合适的车辆。分派者将选择救护车并转发救护信息给车载系统。
伦敦救护服务系统包括3个组成部分:①计算机辅助派遣系统,包括软硬件基础设施、事故记录保存系统、无线电通信系统和无线电系统接口;②计算机地图显示系统,包括复杂地域地形分析软件;③自动化车辆定位系统,具有车辆自动定位能力,以便以最短的时间到达指定位置,并跟踪分析系统的性能。另外,伦敦救护系统还包括无线电系统和移动数据终端。
伦敦救护服务系统项目于1987年4月启动,前期投资250万英镑用于开发一个有限功能的派遣系统;1989年设计规格被重新修改,增加了移动数据终端和声讯转换系统。1990年10月项目经过两次峰值负载性能测试失败而被迫终止。截至项目被取消时为止,项目已经花费了750万英镑的费用,超过预算的300%。
1991年8月项目重新启动。为了保证项目的顺利进行,合作方定期举行会议来协调项目进度和解决存在的问题。但是截至1992年1月,项目还是被延期。派遣系统没有完全实现和测试,无线电接口系统未能按时交付,救护车数据终端设计和定位系统需求还需进一步完善,车载定位跟踪系统没有完成安装、调试。
1992年10月26日,整个新系统全部运转。但是过载问题仍然没有很好地解决,存在呼叫丢失和响应不及时问题。1992年10月27日,系统不得不改为半自动化方式。1992年11月,系统运行性能开始全面下降,并最终导致系统锁死。由于没有及时响应和系统存在的故障,导致病人死亡事件发生。工作人员试图切换和重启系统,但均告失败。由于系统没有备份系统,操作人员被迫恢复到完全人工过程。
伦敦救护服务系统的失败归因于一系列软件工程中的错误,特别是项目管理中的缺陷,从而导致了1992年秋天出现的两次故障。伦敦救护服务系统失败的例子告诉我们,系统的复杂性和庞大规模、系统需求的不准确和经常变更,以及管理不到位等因素是导致系统失败的主要原因。
我们称软件开发和维护过程中所遇到的严重问题为软件危机。软件危机主要是两个方面的问题:一是如何开发软件,以满足对软件日益增长的客户需求;二是如何维护数量不断膨胀的现有软件。

1.3.2 解决软件危机的途径

在软件危机相当严重的背景下,软件工程产生了。在引入工程化的思想后,人们总结了导致软件危机的原因,并提出了相应的解决对策。
在软件开发的初期阶段,需求提得不够明确,或未能得到确切的表达。开发工作开始后,软件开发人员和用户又未能及时交换意见,造成开发后期矛盾集中暴露。如果在开发的初期阶段需求不够明确,或未能得到确切的表达,工作人员不与客户及时地交换意见,就有可能导致软件开发后期的问题无法解决。如果仅仅认为软件的开发是编写程序,软件开发前期的需求分析不到位,很有可能使得后期开发的软件达不到客户的要求,导致软件的二次开发。
需求分析后,要做好软件定义时期的工作,这样可以在一定的程度上降低软件开发的成本,同时在无形中提高软件的质量,毕竟软件是一种商品,提高质量是软件开发过程中的重中之重。
开发过程要有统一的、公认的方法论和规范指导,参加的人员必须按照规定的方法进行开发。由于软件是逻辑部件,开发阶段的质量难以衡量与评价,开发过程的管理和控制较难,因此要求开发人员要有统一的软件工程理论来指导。
必须做好充分的检测工作,提交给客户高质量的软件。要借鉴软件开发的经验和积累的有关软件开发的数据,确保开发工作的计划按时完成,在期限内完成软件的开发。

1.3.3 软件工程的定义

关于软件工程的定义有许多,下面是流行的几种定义:
B. W. Boehm将软件工程定义为运用现代科学技术知识来设计并构造计算机程序及为开发、运行和维护这些程序所必需的相关文件资料。
Fritz Bauer将软件工程的定义为经济地获得能够在实际机器上有效运行的可靠软件而建立和使用的一系列完善的工程化原则。
IEEE软件工程标准术语对软件工程的定义为:软件工程是开发、运行、维护和修复软件的系统方法,其中“软件”的定义为计算机程序、方法、规则、相关的文档资料以及在计事机上运行时所必需的数据。
尽管软件工程的具体定义不尽相同,但其主要思想都在强调在软件开发的过程中需要应用工程化思想的重要性。工程化思想的核心是把软件看作一个需要通过需求分析、设计、实现、测试、管理和维护的工程产品。用完善的工程化原理研究软件生产的方法规范软件的开发,不仅保证软件开发在指定的期限内完成,而且可以节约成本,保证软件的质量。
软件工程是一门研究如何用系统化、规范化、数量化等工程化思想和方法去进行软件开发、维护和管理的学科。因此,软件工程学涉及的范围很广,涉及计算机科学、管理学、系统工程学和经济学等多个学科领域。
软件工程学分成软件开发方法和软件工程管理两个方面,重点是对软件开发方法和工程性技术的研究。软件开发技术和软件工程管理的复杂程度均与软件的规模密切相关。规模越大的软件产品,越要严格遵守软件工程的开发原则和方法。
软件开发不同于一般的产品生产,因为软件是一种没有具体形体和尺寸的特殊的产品,它创造的唯一产品或者服务是逻辑载体。它提供的产品或服务是逻辑的,具有独特性、临时性和周期性等特点。不同于其他产品的制造,软件过程更多的是设计过程。另外,软件开发不需要使用大量的物质资源,而主要是人力资源。并且,软件开发的产品只是程序代码和技术文件,并没有其他的物质结果。基于上述特点,与其他项目管理相比,软件项目管理有很大的独特性。
软件开发过程中除编写代码以外,还需要编写大量的文档和建立各种模型,需要耗费较多的时间与费用,且工作效率低下。因此,软件开发还需要大量的工具来提高开发效率,如文档编辑工具、代码编辑与调试工具、测试工具、建模工具等等。
综上所述,我们把方法、工具和过程称为软件工程的三要素,如图1-2所示。


145ab4b3d20abed4d1121380ea5c72c4e6f398b7

软件工程方法为软件开发提供了“如何做”的技术;软件工具为软件工程方法提供了自动的或半自动的软件支撑环境;过程是为了获得高质量的软件所需要完成的一系列任务框架,规定了完成各项任务的工作步骤。
软件开发工程化的思想主要体现在软件项目管理。软件项目管理的作用是,一方面可提高软件质量,降低成本;另一方面可为软件的工程化开发提供保障。与其他行业项目相比,软件行业的项目具有其特殊性。随软件行业的迅猛发展,一些问题和危机逐渐暴露出来。例如,项目时间总是推迟、项目结果不能令客户满意、项目预算成倍超出、项目人员不断流动等都是软件开发商不断面临的一些问题。
软件工程学家分析认为,导致上述情况的主要原因是缺乏软件过程控制能力,开发过程随心所欲,时间计划和费用估算缺乏现实的基础,产品质量缺乏客观基础,软件开发的成败建立在个人能力基础上等。
从商业的角度,软件也称为软件产品,客户必然会更新软件开发的质量、成本和工期。因此,软件工程管理的三要素包括质量、成本和工期,如图1-3所示。

7777c953b7243ecb982a7be247252bc0a3a5b647

质量包括质量定义、质量管理、质量保证、质量评价等。成本包括成本预算和核算、成本管理、资源管理等。工期包括工程进度管理、组织人员管理、工作量管理、配置管理等。
如今,软件开发的工程化管理思想已经得到了认可,软件的开发管理已经不像以往那样过分依赖软件技术精英,运用项目管理的经验和方法是软件项目成功的前提和保证。随着信息技术的飞速发展,软件产品的规模也越来越庞大,种类也非常繁多。尤其是近几年,随着网络技术的快速发展,项目管理也随之快速发展,各软件企业都在积极将软件项目管理引入开发活动中,对开发实行有效的管理,并取得了各自不同的成绩。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
首度公开!OceanBase存储系统架构的演进历程及工程实践
OB君:作为一款100%自研的分布式数据库,OceanBase历经了近十年的发展历程。近十年来,OceanBase的存储架构经历了多次演进,以解决业务越来越复杂苛刻的存储需求。本文整理自赵裕众(花名陈群)在2019 SACC中国系统架构师大会中的演讲。
3281 0
Serverless 工程实践 | 细数 Serverless 的配套服务
上文说到云计算的十余年发展让整个互联网行业发生了翻天覆地的变化,Serverless 作为云计算的产物,或者说是云计算在某个时代的表现,被很多人认为是真正意义上的云计算,关于“Serverless 是什么”这个问题,其实是可以通过不同角度来分析的。
358 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
25240 0
Serverless 工程实践 | 传统 Web 框架迁移
在 Serverless 这种新的架构或者说是新的编程范式下,使用全新的思路来做 Serverless 应用是再好不过的了,但实际并非如此。原生的 Serverless 开发框架是非常少的。以 Web 框架为例,目前主流的 Web 框架均不支持 Serverless 部署,所以将传统框架更简单、更快速、更科学地部署到 Serverless 架构上就是一个值得探讨的问题。
209 0
PostgreSQL BTree索引的工程实践
PostgreSQL BTree索引的工程实践
83 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
18996 0
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
20694 0
10059
文章
0
问答
来源圈子
更多
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载