软件工程概述

一、复习要点


    1.了解软件的概念、特点和分类方法。u=2595301487,393367436&fm=26&gp=0.jpg

    2.了解软件的开发和软件危机的起因。

    3.了解软件工程过程和软件生存周期的概念。

    4.了解软件工程的概念及其要素。

    5.了解软件工程的基本目标和原则。

二、内容提要


1.软件的概念、特点

    软件是计算机系统中与硬件相互依存的部分,它是包括程序、数据及相关文档的完整集合。其中,程序是按事先设计的功能和性能要求执行的指令序列,数据是使程序能正常操作信息的数据结构,文档是与程序开发、维护和使用有关的图文素材。

    软件的特点如下:

    (1)软件是一种逻辑实体,而不是具体的物理实物。因此,它具有抽象性。

    (2)软件的生产与硬件不同,它没有明显的制造过程。对软件的质量控制,必须立足于软件开发方面。

    (3)在软件的运行和使用期间,没有想硬件那样的磨损、老化问题。任何机械、电子设备在运行和使用过程中,其失效率大致遵循如图1.1(a)所示的U型曲线(即浴盆曲线)。软件的情况与此不同,它不存在磨损和老化问题。然而,它存在退化问题,设计人员必须多次修改(维护)软件,如图1.1(b)所示。

QQ图片7232859~1.jpg

    (4)软件的开发和运行往往受到计算机系统的限制,对计算机系统有着不同程度的依赖性。为了解除这种依赖性,在软件开发中提出了软件移植的问题。

    (5)迄今为止,软件的开发尚未完全摆脱手工艺的方式。

    (6)软件本身是复杂的。软件的复杂性可能来自它所反映的实际问题的复杂性,也可能来自程序逻辑结构的复杂性。

    (7)软件的成本相当昂贵。软件的研制工作需要投入大量的、复杂的、高强度的脑力劳动,它投入的成本是比较高的。

    (8)相当多的软件工作涉及到社会因素。许多软件的开发和运行涉及机构设置、体制运作及管理方式等问题,甚至涉及到人们的观念和心理,这些因素直接影响到项目的成败。

2.软件的分类

(1)按软件的功能进行划分

    ①系统软件    能与计算机硬件紧密配合,使计算机系统的各个部件、相关的软件和数据协调、高效地工作的软件。例如,操作系统、数据库管理系统、设备驱动程序以及通信处理程序等。

    ②支撑软件    协助用户开发软件的工具性软件,包括帮助程序人员开发软件产品的工具,也包括帮助管理人员控制开发进程的工具。

    ③应用软件    在特定领域内开发,为特定目的服务的软件。

(2)按软件的规模开发进行划分

    按开发软件所需的人力、时间以及完成的源程序行数,可确定6种不同规模的软件,如表1.1所示。

类别参加人员数研制期限产品规模(源程序行数)
微型11~4周0.5K
小型11~6月1K~2K
中性2~51~2年5K~50K
大型5~202~3年50K~100K
甚大型100~10004~5年1M(=1000K)
极大型2000~50005~10年1M~10M

    规模大、开发时间长、参加人数多的软件项目,其开发工作必须有软件工程的知识做指导。而规模小、开发时间短、参加人员少的软件项目也要有软件工程的概念,遵循一定的开发规范。其基本原则是一样的,只是对软件工程技术依赖的强度不同而已。

(3)按软件的工作方式进行划分

    ①实时处理软件    指在事件或数据产生时对其立即处理,并及时反馈信号以控制需要监测的过程的软件。实时处理软件主要包括数据采集、分析、输出3个部分。

    ②分时软件    允许多个联机用户同时使用计算机的软件。

    ③交互式软件    能实现人——机通信的软件。

    ④批处理软件    把一组输入作业或一批数据以成批处理的方式一次运行,按顺序逐个处理的软件。

(4)按软件服务对象的范围进行划分

    ①项目软件    也称定制软件,是受某个特定用户(或少数客户)的委托,由一个或多个软件开发机构在合同的约束下开发的软件,如军用防空指挥系统、卫星控制系统等。

    ②产品项目    由软件开发机构开发并直接提供给市场,或是为众多用户服务的软件,如文字处理软件、文本处理软件、财务处理软件、人事管理软件等。

(5)按软件使用的频度进行划分

    有的软件开发出来仅使用一次,如用于人口普查、工业普查的软件。而有些软件具有较高的使用频度,如天气预报软件。

(6)按软件失效的影响进行划分

    有的软件在工作中出现故障而失效,可能对整个软件系统的影响不大。有的软件一旦失效,可能带来灾难性后果,如财务金融软件、交通通信软件、航天航空软件等,称这些软件为关键软件。

3.软件的发展和软件危机

    自从20世纪40年代中期出现了世界上第一台计算机,就产生了程序的概念。其后经过几十年的发展,计算机软件经历了3个发展阶段:

(1)程序设计阶段,约为20世纪五六十年代。

(2)程序系统阶段,约为20世纪六七十年代。

(3)软件工程阶段,约为20世纪70年代以后。

    软件发展最根本的变化体现在以下几个方面:

(1)人们改变了对软件的看法。在20世纪五六十年代,程序设计曾经被看做一种任人发挥创造的技术领域。当时人们认为,程序运行后只要能在计算机得出正确的结果,程序的写法可以不受任何约束。随着计算机的使用范围日趋广泛,人们要求这些程序易懂、易使用,并且容易修改和扩充。于是,程序便从按个人意图创造的“艺术品”转变为能被广大用户接受的工程化产品。

(2)软件的需求是软件发展的动力。早期的程序开发只是为了满足开发者自己的需要,这种自给自足的生产方式是其低级阶段的表现。进入软件工程阶段后,软件开发的成果具有社会属性,它要在市场中流通以满足广大用户的需要。

(3)软件工作的考虑范围从只顾及程序的编写扩展到涉及整个软件生存周期。

    在软件技术发展的第二阶段,随着计算机硬件计算的进步,要求软件能与之相适应。然而,软件技术的进步一直未能满足形式发展提出的要求,致使问题堆积起来,形成日益尖锐的矛盾,最终导致了软件危机。问题归结起来如下:

(1)由于缺乏软件开发的经验和有关软件开发数据的积累,使得开发工作的计划很难制定,以致经常超出经费预算,进度计划无法遵循,完成开发的期限一再拖延。

(2)软件需求在开发的初期阶段不够明确,或是未能得到确切的表达。开发工作开始后,软件人员和用户未能及时交换意见,造成矛盾在开发后期集中暴露。

(3)开发过程没有统一、公认的方法论和规范进行指导,参加开发的人员各行其事。另外,设计和实现过程的资料很不完整,或忽视了个人工作与其他人的接口,使得软件很难维护。

(4)未能在测试阶段充分做好检测工作,提交至用户的软件质量差,在运行中暴露出大量的问题。

    如果这些障碍不能突破,未能摆脱困境,软件的发展是没有出路的。

4.软件工程过程和软件生存周期

    许多计算机软件专家尝试,把其他工程领域中行之有效的工程学知识运用到软件开发工作中来。进过不断的实践和总结,最后得出结论:按工程化的原则和方法组织软件开发工作是有效的,是摆脱软件危机的一个重要出路。

0928_225641~1.jpg

    然而软件开发的实践表明,各项活动之间并非完全是自上而下、呈线性图式。实际情况是,每项开发活动均处于一个质量环(输入—处理—输出—评审)中。只有当前工作得到确认,才能继续进行下一项活动,在图1.2中用向下的箭头表示;否则重做,在图1.2中用向上的箭头表示。

    ②演化模型    在项目开发的初始阶段,人们对软件的需求认识往往不够清晰,因而使得项目开发难以做到一次遍成功,进行在开发在所难免。因此,可以先做试验开发,其目标只是探索可行性,弄清软件需求。然后,在此基础上获得较为满意的软件产品。通常,把第一次得到的实验性产品称为“原型”。

    ③螺旋模型    对于复杂的大型软件,开发一个原型往往达不到要求。螺旋模型将瀑布模型与演化模型结合起来,并且添加两种模型均忽略的风险分析。螺旋模型沿着螺线旋转,如图1.3所示,在笛卡尔坐标的4个象限上分别表达了4个方面的活动。

28_235423~1.jpg

(a)制定计划:确定软件目标,选定实施方案,弄清项目开发的限制条件。

(b)风险分析:分析所选方案,考虑如何识别和消除风险。

(c)实施工程:实施软件开发。

(d)客户评估:评价开发工作,提出修正建议。

    沿螺旋线自内向外每旋转一圈,便开发出一个更为完善的、新的软件版本。

    ④喷泉模型    喷泉模型对软件复用和生存周期中多项开发活动的集成提供了支持,主要支持面向对象的开发方法。“喷泉”一词体现了迭代和无间隙的特性。迭代是指系统的某个部分常常重复工作多次,相关功能在每次迭代中被加入演进的系统。无间隙是指在开发活动,(即分析、设计和编码)之间不存在明显的边界。喷泉模型如图1.4所示。

29_000501~1.jpg

    ⑤智能模型    智能模型是基于知识的软件开发模型,它综合了上诉若干模型的特点,并与专家系统相结合。该模型应用基于规则的系统,采用规约和推理机制,帮助软件人员完成开发工作,并使维护工作在系统规格说明级进行。

5.软件工程的目标和原则

(1)软件工程的定义

    Fritz Bauer 曾经为软件工程做定义:“软件工程是为了经济地获得能够在实际机器上有效运行的可靠软件二建立和使用的一系类完善的工程化原则。”

    1983年,IEEE(Institute of Electrical & Electronic Engineers,电气和电子工程师学会)做出的定义为:“软件工程是开发、运行、维护和修复软件的系统方法”。其中,“软件”的定义为:计算机程序、方法、规则、相关的文档资料以及在计算机上运行时所必须的数据。

    尽管又有一些人提出了更为完善的定义,但主要思想都是强调软件开发过程中需要应用工程化原则。

    软件工程包括3个要素,即方法、工具和过程。

    ①软件工程方法为软件开发提供了“如何作”的技术。它包括多方面的任务,如项目计划与估算、软件系统需求分析、数据结构设计、系统总体结构设计、算法过程设计、编码、测试以及维护等。

    ②软件工具为软件工程方法提供自动或半自动的软件支撑环境。软件工具集成起来,建立起称做计算机辅助软件工程(CASE,Computer Aided Software Engineering)的软件开发支撑系统。CASE将各种软件工具、开发机器和一个存放开发过程信息的工程数据库组合起来,形成软件工程环境。

    ③软件工程的过程是指将软件工程的方法和工具综合起来,已达到合理、及时地进行计算机软件开发的目的。过程定义了方法使用的顺序、要求支付的文档质料、保证质量和协调变化所需的管理,以及软件开发各个阶段完成的里程碑。

(2)软件工程项目的基本目标

    组织实施软件工程项目是为了获得项目的成功,即达到以下几个主要的目标:

    ①付出较低的开发成本。

    ②达到预期的软件功能。

    ③取得较好的软件性能。

    ④使开发的软件易于移植。

    ⑤需要较低的维护费用。

    ⑥能按时完成开发工作,及时交付使用。

    在项目的实际开发中,使以上几个目标都能达到理想的程度往往是非常困难的。

    图1.5表明了软件工程的目标间存在的关系。有些目标之间的互补关系,例如,高可靠性和易于维护之间,低开发成本与按时交付之间。还有一些目标之间是互斥的,例如,低开发成本与高可靠性之间,高性能与高可靠性之间。

9_122806~1.jpg

(3)软件工程的原则

    软件工程基本目标适用于所有软件工程项目。为达到这些目标,在软件开发过程中必须遵循下列软件工程原则。

    ①抽象    抽象事物最基本的特性和行为,忽略非基本细节。采用分层抽象,自顶向下、逐层细化的办法控制软件开发过程的复杂性。

    ②信息屏蔽    将模块设计成“黑箱”,实现细节隐藏在模块内部,不让模块的使用者直接访问。这就是所谓信息封装(使用与实现分离)的原则。使用者只能通过模块接口访问模块中封装的数据。

    ③模块化    模块是程序中在逻辑上相对自主的成分,是独立的编程单位,应有良好的接口定义。如C语言程序中的函数过程,C++语言程序中的类。模块化有助于信息隐蔽和抽象,有助于表示复杂的系统。

    ④局部化    在一个物理模块内集中逻辑上相互关联的计算机资源,保障模块之间有松散的耦合,模块内部有较强的内聚。这有助于控制各个解的复杂性。

    ⑤确定性    软件开发过程中所有概念的表达应是确定的、无歧义的、规范的。这样有助于人们在交时不会产生误解、遗漏,保证整个开发工作的协调一致。

    ⑥一致性    整个软件系统(包括程序、文档和数据)的各个模块应使用一致的概念、符号和术语;程序内、外部接口应保持一致;软件同硬件、操作系统的接口应保持一致;系统规格说明与系统行为应保持一致;用于形式化规格说明的公理系统应保持一致。

    ⑦完备性    软件系统不会丢失任何重要成分,可以完全实现系统所要求的功能。为了保障系统的完备性,爱软件开发和运行过程中需要严格的技术评审。

    ⑧可验证性    开发大型的软件系统是需要对系统自顶向下、逐层分解。系统分解应遵循使系统易于检查、测试、评审的原则,以确保系统的正确性。

    使用一致性、完备性和可验证性的原则可以帮助开发者设计一个正确的系统。


#转载请注明出处!
快来制作你的简历吧 ,请猛戳这里→点击在线制作
宝塔服务器面板,一键全能部署及管理,送你3188元礼包。请猛戳这里→点我领取

本文标题:《软件工程概述》作者:xuanzhe
原文链接:https://blog.xuanzhe.club/?id=17
特别注明外均为原创,转载请注明。

分享到微信

扫描二维码

可在微信查看或分享至朋友圈。

上一篇: 初识Java Web

相关文章

发表评论:
验证码

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

你好,朋友

真是美好的一天!

访客信息

  • IP: 3.17.28.48
  • 地点: United StatesOhioDublin

标签列表

站点信息

  • 文章总数:69
  • 页面总数:2
  • 分类总数:19
  • 标签总数:34
  • 评论总数:7
  • 浏览总数:149610
您好,欢迎到访网站!
忘记密码

网站分类

文章归档

歌曲 - 歌手
0:00