软件工程的概念、目标及生命周期

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

软件工程的概念、目标及生命周期

软件工程

认真研究和分析了软件危机背后的真正原因,便开始探索用工程的方法进行软件生产的可能性,即用现代工程的概念、原理、技术和方法进行计算机软件的开发、管理和维护。于是,计算机科学技术的一个新领域——软件工程诞生了。

软件工程的概念

软件工程的定义有许多,下面给出两个典型的定义。

1968年秋季,北大西洋公约组织举行的国际会议上首次给出了软件工程的定义:软件工程是为了经济地获得能够在实际机器上高效运行的可靠软件而建立和使用的一系列好的工程化原则。

1993年《IEEE Standard Glossary of Software Engineering Terminology》给出了一个更全面的定义:软件工程是,①将系统性的、规范化的、可定量的方法应用于软件的开发、运行和维护,即将工程化应用到软件上。②对①中所述方法的研究。

从软件工程的定义可以看出,软件工程不仅强调软件开发技术的研究,还包括软件项目管理。统计数据表明,大多数软件开发项目的失败,并不是由于软件开发技术方面的原因。它们的失败是由于不适当的管理造成的。遗憾的是,尽管人们对软件项目管理重要性的认识有所提高,但在软件管理方面的进步远比在设计方法学和实现方法学上的进步小。

此外,软件工程是将工程的思想应用于软件领域。与一切工程领域一样,软件工程师也需要不断积累经验,从已有的理论、方法和工具中选择最适宜的,同时还要不断探索新的理论、方法和工具。

软件工程的目标

软件工程的目标就是运用最先进的技术和经过时间检验证明正确的管理方法来提高软件的质量和生产率,也就是在给定成本、进度的前提下,开发出高质量的软件产品,最终实现软件生产自动化。通常质量和生产率是一对矛盾,但这两者又都是软件开发追求的目标。因此,好的软件工程方法要能同时提高软件质量和生产率。

概括地说,软件工程就是要解决软件危机问题,具体到当前软件工程主要面临如下问题。

1.遗留系统带来的挑战

现在使用的许多大型系统都是几年前,甚至十几年前开发的。这些系统在使用过程中不断地被修改,因此不断地退化,但同时这些系统也不断地被注人大量的业务知识、规程。现在面临的问题是这些系统维护起来的成本很高,但彻底淘汰的代价也无法承受。如何以合理的成本维护和更新系统,同时又要不断交付基本的业务服务是带给软件工程的一大难题。

2.软件开发方式和运行环境多样性的挑战

随着网络时代的来临,软件的开发由过去集中在专门的机构中封闭实施,转变为在网络环境下基于开放源码的方式由许多开发者协作完成。同时,系统也越来越要求像基于网络的分布式系统一样运行,但这些网络中包含各种不同类型的软硬件平台。因此,必须开发出新的技术来制作可靠的、灵活的软件来应对网络化的挑战。

3.软件交付上的挑战

传统的软件工程技术开发高质量软件需要消耗大量时间,而今天的软件必须具有快速制作、快速响应变化的特点。因此,必须找到新一代软件开发技术,在不损害软件质量的前提下快速开发大型的、复杂的系统。

4.高可信软件带来的挑战

随着软件在国民经济和人们生活中的广泛使用,人们更加关注软件的质量问题,尤其当软件是通过远程方式获取时。除了软件的正确性和性能外,软件的可靠性、安全性和保密性等可信性质是人们关注的焦点。传统的软件工程技术通过测试来检查软件中存在的问题,但无法验证软件的可信性。目前,基于严格数学模型的形式化开发方法为高可信软件的开发提供了一种解决思路。

虽然人类彻底解决软件危机的目标尚待时日,但软件工程的研究与应用已经取得很大成就,它在软件开发方法、工具、管理等方面的应用极大地缓解了软件危机造成的被动局面。

软件生命周期

概括地说,软件生命周期是由软件规格描述、软件开发、软件确认和软件演进4个基本活动组成的,每个基本活动又进一步划分成若干个阶段。

软件规格描述的主要任务是解决“做什么”的问题,即确定工程必须完成的总目标和可行性,导出实现工程目标应该采用的策略及系统必须完成的功能;估计完成该项工程需要的资源和成本,并且制订工程进度表。这个时期的工作通常又称为系统分析,由系统分析员负责完成。软件规格描述通常进一步划分成3个阶段,即问题定义、可行性研究和需求分析。

软件开发的主要任务是解决“如何做”的问题,即具体设计和实现在前一个时期定义的软件,它通常由下述3个阶段组成:总体设计,详细设计,编码实现。

软件确认的主要任务是“确认实现的系统满足用户的要求”,即依据规格说明来测试所实现的软件。软件测试包括单元测试、集成测试、系统测试等。通常单元测试合并在编码实现阶段进行。

软件演进又称为软件维护,通常有4类维护活动:改正性维护,当软件在使用过程中发现错误时应该加以改正;适应性维护,当环境改变时应该修改软件以适应新的环境;完善性维护,当用户有新要求时应该及时改进软件以满足用户的新需要;预防性维护,即修改软件为将来的维护活动做准备。

下面简单介绍软件生命周期每个阶段的基本任务。

1.问题定义

问题定义阶段必须明确要解决的问题是什么。尽管确切地定义问题的必要性是十分明显的,但是在实践中它却可能是最容易被忽视的一个步骤。通过问题定义阶段的工作,系统分析员应该提出关于问题性质、工程目标和规模的书面报告。通过对系统的实际用户和使用部门负责人的访问调查,分析员扼要地写出他对问题的理解,并在用户和使用部门负责人的会议上认真讨论这份书面报告,澄清含糊不清的地方,改正理解不正确的地方,最后得出一份双方都满意的文档。

问题定义阶段是软件生命周期中最简短的阶段,一般只需要卫天甚至更少的时间。

2.可行性研究

这个阶段要明确在成本和时间的限制条件下,上一个阶段所确定的问题是否有行得通的解决办法。为此,系统分析员需要在较抽象的高层次上进行一次系统分析和设计过程。在用户的配合下,由分析员提出解决问题的候选方案,然后对每个方案从技术、经济、法律和操作等方面进行可行性研究。

相关文档
最新文档