第三章软件工程基础3.1软件工程基本概念3.1.1软件定义与软件特点3.1.2软件危机与软件工程3.1.3软件工程过程与软件生命周期3.1.4软件工程的目标与原则3.1.5软件开发工具与软件开发环境3.1.1软件定义与软件特点计算机软件(Software)是计算机系统中与硬件相互依存的另一部分,是包括程序、数据及相关文档的完整集合。其中,程序是软件开发人员根据拥护需求开发的、用程序设计语言描述的、适合计算机执行的指令(语句)序列。数据是使程序能正常操纵信息的数据结构。文档是与程序开发、维护和使用有关的图文资料。可见软件由两部分组成:一是机器可以执行的程序和数据;二是机器不可执行的,与软件开发、运行、维护、使用等有关的文档。国标(GB)中对计算机软件的定义为:与计算机系统的操作有关的计算机程序、规程、规则、以及可能的文件、文档及数据。软件在开发、生产、维护和使用等方面与计算机硬件相比存在明显的差异。深入理解软件的定义需要了解软件的特点:①软件是一种逻辑实体,而不是物理实体,具有抽象性。软件的这个特点使它与其他工程对象有着明显的差异。人们可以把它记录在纸上或存储介质上,但却无法看到软件本身的形态,必须通过观察、分析、思考、判断,才能了解它的功能、性能等特性。②软件的生产与硬件不同,它没有明显的制作过程。一旦研制开发成功,可以大量拷贝同一内容的副本。所以对软件的质量控制,必须着重在软件开发方面下功夫。③软件在运行、使用期间不存在磨损、老化问题。软件虽然在生存周期后期不会因为磨损而老化,但为了适应硬件、环境以及需求的变化要进行修改,而这些修改又不会不可避免的引入错误,导致软件失效率升高,从而使得软件退化。④软件的开发、运行对计算机系统具有依赖性,受计算机系统的限制,这导致了软件移植的问题。⑤软件复杂性高,成本昂贵。软件是人类有史以来生产的复杂度最高的工业产品。软件涉及人类社会的各行各业、方方面面,软件开发常常涉及其他领域的专门知识。软件开发需要投入大量、高强度的脑力劳动,成本高,风险大。⑥软件开发涉及诸多的社会因素。许多软件的开发和运行涉及软件拥护的机构设置,体制问题以及管理方式等,甚至涉及到人们的观念和心理,软件知识产权及法律等问题。软件根据应用目标的不同,是多种多样的。软件按功能可以分为:应用软件、系统软件、支撑软件(或工具软件)。应用软件是为解决特定领域的应用而开发的软件。例如,事物处理软件,工程与科学计算软件,实时处理软件,嵌入式软件,人工职能软件等应用性质不同的各种软件。系统软件是计算机管理自身资源,提高计算机使用效率并为计算机用户提供各种服务的软件。如操作系统,编译程序,汇编程序,网络软件,数据库管理系统等。支撑软件是介于系统软件和应用软件之间,协助用户开发软件的工具性软件,包括辅助和支持开发和维护应用软件的工具软件,如需求分析工具软件,设计工具软件,编码工具软件,测试工具软件,维护工具软件等,也包括辅助管理人员控制开发进程和项目管理的工具软件,如,计划进度管理工具软件,过程控制工具软件,质量管理及配置管理工具软件等。3.1.2软件危机与软件工程软件工程概念的出现源自软件危机,20世纪60年代末以后,“软件危机”这个词频繁出现。所谓软件危机是泛指在计算机软件的开发和维护过程中所遇到的一系列严重问题。实际上,几乎所有的软件都不同程度地存在这个问题。随着计算机技术的发展和应用领域的扩大,计算机硬件性能/价格比和质量稳步提高,软件规模越来越大,复杂程度不断增加,软件成本逐年上升,质量没有可靠的保证,软件已成为计算机科学发展的“瓶颈”。具体地说,在软件开发和维护过程中,软件危机主要表现在:①软件需求的增长得不到满足。用户对系统不满意的情况经常发生。②软件开发成本和进度无法控制。开发成本超出预算,开发周期大大超过规定日期的情况经常发生。③软件质量难以保证。④软件不可维护或维护程度非常低。⑤软件的成本不断提高。⑥软件开发生产率的提高赶不上硬件的发展和应用需求的增长。总之,可以将软件危机归结为成本、质量、生产率等问题。分析带来软件危机的原因,宏观方面是由于软件日益深入社会生活的各个层面,对软件需求的增厂速度大大超过了技术进步所能带来的软件生产率的提高。而就每一项具体的工程任务来看,许多困难来源于软件工程所面临的任务和其他工程之间的差异以及软件和其他工业产品的不同。在软件开发和维护过程中,之所以存在这些严重的问题,一方面与软件本身的特点有关,例如,在软件运行前,软件开发过程的进展难衡量,质量难以评价,因此管理和控制软件开发过程相当困难;在软件运行过程中,软件维护以为着改正或修改原来的设计;另外,软件的显著特点是规模庞大,复杂度超线性增长,在开发大型软件时,要保证高质量,极端复杂困难,不仅涉及技术问题(如分析方法、设计方法、版本控制),更重要的是必须有严格而科学的管理。另一方面与软件开发和维护方法不正确有关,这是主要原因。为了消除软件危机,通过认真研究解决软件危机的方法,认识到软件工程是使计算机软件走向工程科学的途径,逐步形成了软件工程的概念,开辟了工程学的新兴领域——软件工程学。软件工程就是试图用工程、科学和数学的原理与方法研制、维护计算机软件的有关技术及管理方法。关于软件工程的定义,国标(GB)中指出,软件工程是应用于计算机软件的定义、开发和维护的一整套方法、工具、文档、实践标准和工序。1968年在北大西洋公约组织会议(NATO会议)上,讨论摆脱软件危机的办法,软件工程(Softwareengineering)作为一个概念首次被提出,这在软件技术发展史上是一件大事。其后的几十年里,各种有关软件工程的技术、思想、方法和概念不断地被提出,软件工程逐步发展成为一门独立的科学。在会议上,德国人FritzBauer认为:“软件工程是建立并使用完善的工程化原则,以较经济的手段获得能在实际机器上有效运行的可靠软件的一系列方法”。1993年,IEEE(InstituteofElectrical&ElectronicEngineers,电气和电子工程师学会)给出了一个更加综合的定义:“将系统化的、规范的、可度量的方法应用于软件的开发、运行和维护的过程,即将工程化应用于软件中”。这些主要思想都是强调在软件开发过程中需要应用工程化原则。软件工程包括3个要素,即方法、工具和过程。方法是完成软件工程项目的技术手段;工具支持软件的开发、管理、文档生成;过程支持软件开发的各个环节的控制、管理。软件工程的进步是近几十年软件产业迅速发展的重要原动力。从根本上说,其目的是研究软件的开发技术,软件工程的名称以为着用工业化的开发方法来替代小作坊式的开发模式。但是,几十年的软件开发和软件发展的实践证明,软件开发是既不同于其他工业工程,也不同于科学研究。软件不是自然界的有形物体,它作为人类智慧的产物有其本身的特点,所以软件工程的方法、概念、目标等都在发展,有的与最初的想法有了一定的差距。但是认识和学习过去和现在的发展演变,真正掌握软件开发技术的成就,并为进一步发展软件开发技术,以适应时代对软件的更高期望是有极大意义的。软件工程的核心思想是把软件产品(就像其他工业产品一样)看作是一个工程产品来处理。把需求计划、可行性研究、工程审核、质量监督等工程化的概念引入到软件生产当中,以期达到工程项目的三个基本要素:进度、经费和质量的目标。同时,软件工程也注重研究不同于其他工业产品生产的一些独特特性,并针对软件的特点提出了许多有别于一般工业工程技术的一些技术方法。代表性的有结构化的方法、面向对象方法和软件开发模型及软件开发过程等。特别地,从经济学的意义上来说,考虑到软件庞大的维护费用远比软件开发费用要高,因而开发软件不能只考虑开发期间的费用,而且应该考虑软件声明周期内的全部费用。因此,软件生命周期的概念就变得特别重要。在考虑软件费用时,不仅仅要降低开发成本,更要降低整个软件生命周期的总成本。3.1.3软件工程过程与软件生命周期1.软件工程过程(SoftwareEngineeringProcess)ISO9000定义:软件工程过程是把输入转化为输出的一组彼此相关的资源和活动。定义支持了软件工程过程的两方面内涵。其一,软件工程过程是指为获得软件产品,在软件工具支持下由软件工程师完成的一系列软件工程活动。基于这个方面,软件工程过程通常包含4种基本活动:•P(Plan)——软件规格说明。规定软件的功能及其运行时的限制。•D(Do)——软件开发。产生满足规格说明的软件。•C(Check)——软件确认。确认软件能够满足客户提出的要求。•A(Action)——软件演进。为满足客户的变更要求,软件必须在使用的过程中演进。事实上,软件工程过程是一个软件开发机构针对某类软件产品为自己规定的工作步骤,它应当是科学的、合理的,否则必将影响软件产品的质量。通常把拥护的要求转变成软件产品的过程也叫做软件开发过程。此过程包括对拥护的要求进行分析,解释成软件需求,把需求变换成设计,把设计用代码来实现并进行代码测试,有些软件还需要进行代码安装和交付运行。其二,从软件开发的观点看,它就是使用适当的资源(包括人员、硬软件工具、时间等),为开发软件进行的一组开发活动,在过程结束时将输入(拥护要求)转化为输出(软件产品)。所以,软件工程的过程是将软件工程的方法和工具综合起来,以达到合理、及时地进行计算机软件开发的目的。软件工程过程应确定方法使用的顺序、要求交付的文档资料、为保证质量和适应变化所需要的管理、软件开发各个阶段完成的任务。2.软件生命周期(SoftwareLifeCycle)通常,将软件产品从提出、实现、使用维护到停止使用退役的过程成为软件生命周期。也就是说,软件产品从考虑其概念开始,到该软件产品不能使用为止的整个时期都属于软件生命周期。一般包括可行性研究与需求分析、设计、实现、测试、交付使用以及维护等活动,如图3.1所示。这些活动可以有重复,执行时也可以有迭代,还可以将软件生命周期分为如图3.1所示的软件定义、软件开发及软件运行维护三个阶段。图3.1所示的软件生命周期的主要活动阶段是:①可行性研究与计划制定。确定待开发软件系统的开发目标和总的要求,给出它的功能、性能、可靠性以及接口等方面的可能方案,制定完成开发任务的事实计划。②需求分析。对待开发软件提出的需求进行分析并给出详细定义。编写软件规格说明书及初步的用户手册,提交评审。③软件设计。系统设计人员和程序设计人员应该在反复理解软件需求的基础上,给出软件的结构、模块的划分、功能的分配以及处理流程。在系统比较复杂的情况下,设计阶段可分解成概要设计阶段和详细设计阶段。编写概要设计说明书、详细设计说明书和测试计划初稿,提交评审。④软件实现。把软件设计转换成计算机可以接受的程序代码。即完成源程序的编码,编写用户手册、操作手册等面向用户的文档,编写单元测试计划。⑤软件测试。在设计测试用例的基础上,检验软件的各个组成部分。编写测试分析报告。⑥运行和维护。将已交付的软件投入运行,并在运行使用中不断地维护,根据新提出的需求进行必要而且可能的扩充和删改。3.1.4软件工程的目标与原则1.软件工程的目标软件工程的目标是,在给定成本、进度的前提下,开发出具有有效性、可靠性、可理解性、可维护性、可重用性、可适应性、可移植性、可追踪性和可互操作性且满足用户需求的产品。软件工程需要达到的基本目标应是:付出较低的开发成本;达到要求的软件功能;取得较好的软件性能;开发的软件易于移植;需要较低的维护费用;能按时完成开发,及时交付使用。基于软件工程的目标,软件工程的理论和技术性研究的内容主要包括:软件开发技术和软件工程管理。⑴软件开发技术软件开发技术包括:软件开发方法学、开发过程、开发工具和软件工程环境,其主体内容是软件开发方法学。软件开发方法学是根据不同的软件类型,按不同的观点和原则,对软件开发中应遵循的策略、原则、步骤和必须产生的文档资料都做出规定,从而使软件的开发能够进入规范化和工程化的阶段,以克服早期的手工方法生产中的随意性和非规范性做法。⑵软件工程管理软件工程管理包括:软件管理学
本文标题:第三章软件工程基础
链接地址:https://www.777doc.com/doc-2183038 .html