`

软件工程基本原理 (转载)

阅读更多
软件工程基本原理

著名软件工程专家B.Boehm综合有关专家和学者的意见并总结了多年来开发软件的经验,于1983年在一篇论文中提出了软件工程的七条基本原理。
(1)用分阶段的生存周期计划进行严格的管理。
(2)坚持进行阶段评审。
(3)实行严格的产品控制。
(4)采用现代程序设计技术。
(5)软件工程结果应能清楚地审查。
(6)开发小组的人员应该少而精。
(7)承认不断改进软件工程实践的必要性。
B.Boehm指出,遵循前六条基本原理,能够实现软件的工程化生产;按照第七条原理,不仅要积极主动地采纳新的软件技术,而且要注意不断总结经验。
软件工程(SoftWare Engineering)的框架可概括为:目标、过程和原则。
(1)软件工程目标:生产具有正确性、可用性以及开销合宜的产品。正确性指软件产品达到预期功能的程度。可用性指软件基本结构、实现及文档为用户可用的程度。开销合宜是指软件开发、运行的整个开销满足用户要求的程度。这些目标的实现不论在理论上还是在实践中均存在很多待解决的问题,它们形成了对过程、过程模型及工程方法选取的约束。
(2)软件工程过程:生产一个最终能满足需求且达到工程目标的软件产品所需要的步骤。软件工程过程主要包括开发过程、运作过程、维护过程。它们覆盖了需求、设计、实现、确认以及维护等活动。需求活动包括问题分析和需求分析。问题分析获取需求定义,又称软件需求规约。需求分析生成功能规约。设计活动一般包括概要设计和详细设计。概要设计建立整个软件系统结构,包括子系统、模块以及相关层次的说明、每一模块的接口定义。详细设计产生程序员可用的模块说明,包括每一模块中数据结构说明及加工描述。实现活动把设计结果转换为可执行的程序代码。确认活动贯穿于整个开发过程,实现完成后的确认,保证最终产品满足用户的要求。维护活动包括使用过程中的扩充、修改与完善。伴随以上过程,还有管理过程、支持过程、培训过程等。
(3)软件工程的原则是指围绕工程设计、工程支持以及工程管理在软件开发过程中必须遵循的原则。


软件工程必须遵循什么原则

围绕工程设计、工程支持以及工程管理已提出了以下四条基本原则:

(1)选取适宜的开发模型

该原则与系统设计有关。在系统设计中,软件需求、硬件需求以及其它因素间是相互制约和影响的,经常需要权衡。因此,必需认识需求定义的易变性,采用适当的开发模型,保证软件产品满足用户的要求。

(2)采用合适的设计方法

在软件设计中,通常需要考虑软件的模块化、抽象与信息隐蔽、局部化、一致性以及适应性等特征。合适的设计方法有助于这些特征的实现,以达到软件工程的目标。

(3)提供高质量的工程支撑

工欲善其事,必先利其器。在软件工程中,软件工具与环境对软件过程的支持颇为重要。软件工程项目的质量与开销直接取决于对软件工程所提供的支撑质量和效用。

(4)重视软件工程的管理

软件工程的管理直接影响可用资源的有效利用,生产满足目标的软件产品以及提高软件组织的生产能力等问题。因此,仅当软件过程予以有效管理时,才能实现有效的软件工程。


软件工程是指导计算机软件开发和维护的工程学科。

采用工程的概念、原理、 技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够 得到的最好的技术方法结合起来,这就是软件工程。

软件工程强调使用生存周期方法学和各种结构分析及结构设计技术。它们是在七十年代为了对付应用软件日益增长的复杂程度、漫长的开发周期以及用户对软件产品经常不满意的状况而发展起来的。人类解决复杂问题时普遍采用的一个策略就是“各个击破”,也就是对问题进行分解然后再分别解决各个子问题的策略。软件工程采用的生存周期方法学就是从时间角度对软件开发和维护的复杂问题进行分解,把软件生存的漫长周期依次划分为若干个阶段,每个阶段有相对独立的任务,然后逐步完成每个阶段的任务。采用软件工程方法论开发软件的时候,从对任务的抽象逻辑分析开始,一个阶段一个阶段地进行开发。前一个阶段任务的完成是开始进行后一个阶段工作的前提和基础,而后一阶段任务的完成通常是使前一阶段提出的解法更进一步具体化,加进了更多的物理细节。每一个阶段的开始和结束都有严格标准,对于任何两个相邻的阶段而言,前一阶段的结束标准就是后一阶段的开始标准。在每一个阶段结束之前都必须进行正式严格的技术审查和管理复审,从技术和管理两方面对这个阶段的开发成果进行检查,通过之后这个阶段才算结束;如果检查通不过,则必须进行必要的返工,并且返工后还要再经过审查。审查的一条主要标准就是每个阶段都应该交出“最新式的”(即和所开发的软件完全一致的)高质量的文档资料,从而保证在软件开发工程结束时有一个完整准确的软件配置交付使用。文档是通信的工具,它们清楚准确地说明了到这个时候为止,关于该项工程已经知道了什么,同时确立了下一步工作的基础。此外,文档也起备忘录的作用,如果文档不完整,那么一定是某些工作忘记做了,在进入生存周期的下一阶段之前,必须补足这些遗漏的细节。在完成生存周期每个阶段的任务时,应该采用适合该阶段任务特点的系统化的技术方法——结构分析或结构设计技术。

把软件生存周期划分成若干个阶段,每个阶段的任务相对独立,而且比较简单,便于不同人员分工协作,从而降低了整个软件开发工程的困难程度;在软件生存周期的每个阶段都采用科学的管理技术和良好的技术方法,而且在每个阶段结束之前都从技术和管理两个角度进行严格的审查,合格之后才开始下一阶段的工作,这就使软件开发工程的全过程以一种有条不紊的方式进行,保证了软件的质量,特别是提高了软件的可维护性。总之,采用软件工程方法论可以大大提高软件开发的成功率,软件开发的生产率也能明显提高。

目前划分软件生存周期阶段的方法有许多种,软件规模、种类、开发方式、开发环境以及开发时使用的方法论都影响软件生存周期阶段的划分。在划分软件生存周期的阶段时应该遵循的一条基本原则就是使各阶段的任务彼此间尽可能相对独立,同一阶段各项任务的性质尽可能相同,从而降低每个阶段任务的复杂程度,简化不同阶段之间的联系,有利于软件开发工程的组织管理。一般说来,软件生存周期由软件定义、软件开发和软件维护三个时期组成,每个时期又进一步划分成若干个阶段。下面的论述主要针对应用软件,对系统软件也基本适用。

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

开发时期具体设计和实现在前一个时期定义的软件,它通常由下述四个阶段组成:总体设计,详细设计,编码和单元测试,综合测试。

维护时期的主要任务是使软件持久地满足用户的需要。具体地说,当软件在使用过程中发现错误时应该加以改正;当环境改变时应该修改软件以适应新的环境;当用户有新要求时应该及时改进软件满足用户的新需要。通常对维护时期不再进一步划分阶段,但是每一次维护活动本质上都是一次压缩和简化了的定义和开发过程。

下面扼要介绍软件生存周期每个阶段的基本任务和结束标准。

1问题定义

问题定义阶段必须回答的关键问题:“要解决的问题是什么?”如果不知道问题是什么就试图解决这个问题,显然是盲目的,只会白白浪费时间和金钱,最终得出的结果很可能是毫无意义的。尽管确切地定义问题的必要性是十分明显的,但是在实践中它却可能是最容易被忽视的一个步骤。

通过问题定义阶段的工作,系统分析员应该提出关于问题性质、工程目标和规模的书面报告。通过对系统的实际用户和使用部门负责人的访问调查,分析员扼要地写出他对问题的理解,并在用户和使用部门负责人的会议上认真讨论这份书面报告,澄清含糊不精的地方,改正理解不正确的地方,最后得出一份双方都满意的文档。

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

2可行性研究

这个阶段要回答的关键问题:“对于上一个阶段所确定的问题有行得通的解决办法吗?”为了回答这个问题,系统分析员需要进行一次大大压缩和简化了的系统分析和设计的过程,也就是在较抽象的高层次上进行的分析和设计的过程。

可行性研究应该比较简短,这个阶段的任务不是具体解决问题,而是研究问题的范围,探索这个问题是否值得去解,是否有可行的解决办法。


分享到:
评论

相关推荐

    转载 天线原理与设计

    根据提供的标题“转载 天线原理与设计”以及描述中的简略信息,我们可以推断出这篇文章主要关注的是天线的工作原理及其设计方法。虽然提供的部分内容似乎并没有直接包含具体的知识点,但基于标题和描述,我们可以...

    电子工程师必备的基本电路知识(转载)[收集].pdf

    电子工程师在进行软件开发时,往往需要理解和应用一些基本的硬件电路知识,因为软件与硬件是相互依存的。以下是一些电子工程师必备的基础电路知识: 1. **桥式整流电路**:桥式整流电路利用二极管的单向导电性,将...

    基于Pro/E的转载机三维建模及其在煤机制修行业中的应用

    文章还提到了一些相关的技术参数和计算,虽然由于OCR扫描识别的原因,部分数字和公式可能不够准确,但基本原理表明,通过精确的建模与仿真分析,可以在不影响正常生产的情况下,对设备进行节能减排的改造,从而实现...

    计算机网络第八版PPT课件(齐齐哈尔大学计算机与控制工程学院上课用ppt)

    适合人群:计算机及相关专业,如软件工程。 内容:全面系统地介绍了计算机网络的发展和原理体系结构、物理层、数据链路层(包括局域网)、网络层、运输层、应用层、网络安全、互联网上的音频/视频服务,以及无线网络...

    weijiyuanli.zip_微机原理

    【微机原理】是一门深入理解计算机硬件与软件交互机制的基础课程,对于计算机科学和技术、电子工程等相关专业的学生至关重要。本压缩包文件“weijiyuanli.zip_微机原理”包含了作者在微机原理课程设计中创作的成果,...

    工程图入门与提高(转载)

    1. **基础概念**:介绍工程绘图的基本原理和重要性。 2. **软件操作**:针对特定的CAD软件(如PTC Creo或Pro/ENGINEER)进行操作指南。 3. **绘图标准与规范**:遵循国际标准和行业规范进行工程图纸绘制的方法。 4. ...

    测绘工程毕业论文选题汇编(转载)

    - **主要内容**:探讨独立椭球变换方法的基本原理及其在实际测量中的应用。 - **研究意义**:通过深入研究,可以提高空间数据转换的准确性,为后续的空间分析提供可靠的数据支持。 - **技术要求**:学生需具备一定的...

    转载的不错的点评系统 大家学习用

    【标题】"转载的不错的点评系统 大家学习用"所涉及的知识点主要集中在搭建和理解一个点评系统上...对于想要进一步开发和维护的人来说,还需要学习版本控制工具(如Git)和软件工程的最佳实践,以便协同工作和版本管理。

    转载:《机械设计》课件

    1. **机械设计基础**:这部分通常会介绍机械设计的基本原理,包括力的分析、静力学和动力学的基础知识。了解这些基础知识对于理解机械设备的工作原理至关重要。 2. **机械零件设计**:课程可能涵盖各种常见机械零件...

    水动力原理

    因此,水动力学的基本原理和相关技术对于船舶的设计和建造至关重要。 水动力学的应用范围包括但不限于以下几个方面: 1. 船舶设计和性能分析:通过对船舶在水中的运动规律进行研究,可以优化船体设计,降低阻力,...

    【转载】NET平台下的架构开发(最全的).docx

    本文档由一系列文章组成,旨在通过一个简单的NGuestBook留言本系统的开发,来阐述分层架构的基本原理和实现方法。作者EricZhang强调,此系列文章将避免过多的理论探讨,而是通过实例让读者更直观地理解分层架构。 ...

    Arduino_CNC_Code_Firmware.ino_arduinocnc转载_arduino_arduino写字机_写字

    标题中的“Arduino_CNC_Code_Firmware.ino”表明这是一个基于Arduino的CNC...对于爱好者来说,这是一个很好的结合软件与硬件的动手项目,可以提升编程技能,理解控制系统的工作原理,并且能创造出有实际用途的设备。

    超声波测距51C程序_超声波测距51C程序转载_

    超声波测距的基本工作原理是利用超声波的发射和接收。系统首先通过单片机控制超声波发射器(通常是压电陶瓷元件)发射一个短暂的超声波脉冲,然后进入待检测状态。当这个超声波脉冲遇到障碍物后会反射回来,被超声波...

    教您如何学会写压缩壳(转载)

    2. **掌握壳的基本原理**: 壳通常由两部分组成:加载器(loader)和原始程序的压缩数据。加载器负责解压原始程序并将其控制权交给它。学习如何将原始程序的代码和数据转换为压缩形式,以及如何在运行时解压和恢复...

    PLC编程入门-个人总结-转载.doc

    利用现代PLC编程软件提供的强大监控工具,可以实时观察程序运行结果,进而验证指令的功能和效果。这样不仅能够加深对指令的理解,还能增强编程信心。 #### 三、缜密的逻辑思维 编程本质上是一种逻辑思维活动,涉及...

    Cuplaw任现职以来专业技术工作总结.doc

    他在教学方面,不仅承担了多门马克思主义理论课程,如《马克思主义哲学原理》、《马克思主义基本原理》、《马克思主义基本原理概论》、《马列主义原著选读》、《自然辩证法》以及《马克思主义与现代科技》,并且教学...

    Java工程师新人入门书籍推荐

    - 《Java 语言程序设计》:这本书适合初学者快速学习Java语法,了解面向对象编程的基本概念。不过,书中关于图形用户界面和Java Applet的内容对于后端开发人员来说并不重要,可以略过。 - 《Java 核心编程》(Core...

    proteus仿真8086微机课程设计步进电机(按键控制)

    在电子工程领域,8086微处理器是一个经典的学习对象,尤其在微机原理与接口技术的课程设计中。Proteus是一款强大的电子电路仿真软件,它为学习者提供了模拟真实硬件环境的能力,无需实际搭建电路。在这个"proteus...

Global site tag (gtag.js) - Google Analytics