您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 工程监理 > 第一讲软件与软件工程
第一讲软件与软件工程第一节软件关键的概念:软件、软件角色、软件特点、软件分类、软件危机、软件问题、软件神话、遗留软件与软件进化。软件定义:软件是多种术语和对象的集合,并将这些术语和对象有效地配置在一起。一般包括程序、文档和数据。软件在整个社会体系中一般承担两种角色:软件首先作为一种服务社会的产品,提供计算的能力;产生、管理、获取、修改、显示或传送信息的功能其次软件也可以作为其他产品的承载工具,如支持或直接提供系统功能;控制其他的软件(如操作系统);辅助通讯(如网络软件);帮助建立其他软件(如软件工具)。软件的特点:软件是被工程化的逻辑系统;软件一般没有磨损;软件具有不同于一般实物系统的复杂性;软件分类:传统分类:系统软件;应用软件;工程和科学软件;嵌入式软件;专用产品软件;Web应用软件;人工智能软件;现代分类:随处计算软件(Ubiquitouscomputing,无线网络wirelessnetworks为代表);网络源软件(Netsourcing,,thewebasacomputingengine);开源软件(免费开放的源代码对于所有感兴趣的人,是希望但也存在许多问题);数据挖掘(DataMining);网格计算(Gridcomputing);认知机器(Cognitivemachines);软件新经济研究;软件危机:软件危机是指在软件发展过程中遇到的一系列严重问题。这些问题不是在解决具体问题时遇到的,而是软件开发过程所面临的具有普适性的问题。主要的典型表现有:1.对软件开发成本和进度的评估常常很不准确。2.用户对“已完成的”软件系统不满意3.软件产品的质量无法保障4.软件难以维护5.相关的开发文档不健全6.软件的重要性在不断提高7.软件开发的工作量的提高8.软件需求越来越复杂软件问题:为什么需要这么长的时间去获取一个可用的软件;为什么软件开发的费用这么高;为什么不能在将软件提交给我们的用户之前,发现所有的软件错误并解决它们;为什么需要花费那么多的时间和努力来维护已经在运行的系统;为什么无论在软件被开发还是在维护阶段我们都那么困难来度量它;软件神话:所谓软件神话主要是针对三类人来说:软件管理者、软件客户和软件开发者。分析人们日常理解中的一些误区。例如:管理者角度有些人认为:对于软件开发有一些通用的能够适应所有需要的准则或程序,可满足所有的开发需求。实际情况是:这种理想是不现实的,即使有这种理想的东西存在,他也是不可用的。因为软件是一种社会性和变化性非常强的产品。有些人认为:如果软件产品的开发周期拖后了,可以通过增加人手来加快软件的开发速度,并尽快完成产品。实际情况是:软件产品的开发不同于普通机器的生产过程。一般来说,直观的感觉通过增加人手可以有效地提高劳动生产效率,但软件的开发,对于新加入的人来说还需要对其进行有效的培训和熟悉需求要求的过程,因此综合考虑各种因素,简单地添加人手是不能很好地解决问题,有时还时工程进一步拖延。有些人认为:通过从第三方采购软件项目,就可以轻松地什么都不用做地完成项目。实际情况是:如果你不能够自己管理和控制软件,那你将永远不能够掌握用户,以及和第三之间的无休止的争吵。用户角度:有些人认为:一般对于需求的描述就足够开始编写程序了,详细的细节将由程序开发人员在开发过程中补充完善。实际情况是:在需求描述中综合且稳定的描述并不总是存在的。用户的需求往往描述的非常模糊,有时甚至充满冲突,只有保证一定的沟通时间才能够将需求正确的理解清楚。有些人认为:项目的需求在不断的改变,但由于软件是灵活的因此这种变化可以轻易地被在软件中进行调整。实际情况是:对于这种变化在软件开发的早期可能比较容易调整,但如果到了软件开发的后期,这种变化有时将是致命的,有可能将导致整个软件的重新开发。开发者角度:有些人认为:一旦我们编写完程序,并使他们上线运行,那么我们的工作就完成了实际情况是:实际的工业数据显示,大约有60%到80%的软件产品提交给用户后还需要进行扩展。有句话说的好,你开始编写代码越快,而你将花费越长的时间来结束它。有些人认为:直到程序运行,我多没有办法来评估我的软件的好坏。实际情况是:软件的测试和度量技术都是对软件进行评估的好工具。有些人认为:仅仅可运行的软件产品才是用户需要的东西。实际情况是:一个工作程序仅仅整个软件配置中各类元素之一,文档和相关的一些数据对于软件开发将更加重要。有些人认为:在编写软件过程中,还要编写文档和进行一些与编程无关的活动是浪费时间。实际情况是:编写文档和其他的一些工作将有效地减少重复工作的时间,加快工程的进度。遗留软件与软件进化:所谓遗留软件是指多年之前开发的,能够继续被修改以满足商业需要和计算平台的系统,对于这些系统的增殖处理常常是让一些大的组织头痛的事情,系统的维护费用和风险都将增大。软件的“再工程概念”的原因:软件必须适应新的计算环境和技术;软件必须增强新的功能,满足新商业需求;必须扩展软件,让他们和更加现代的系统和数据库交互;软件必须进行在构造使他适应新的网络环境;软件进化的条件:软件必须被不断的改变;软件的复杂性将增加;维护组织的稳定性;维护相关产品的稳定性;软件的功能必须不断的增加;软件的质量在不断的衰退;多层反馈系统;第二节软件工程关键的概念:软件工程、软件过程、CMMI、ISO9001:2000、过程评估、过程框架、过程模板、过程技术、PSP、TSP、任务集、雨伞行为(UmbrellaActivities)。1.软件工程:基本定义:1968年NATO会议上的定义对于软件工程是软件工程概念的基础:为了经济地获得可靠的且能在实际机器上有效地运行的软件,而建立和使用完善的工程原理(soundengineeringprinciples)。这个定义仅仅是一个模糊的,非常基础的。对于一些问题什么是“完善的工程原理”?怎样“经济地”建造“可靠的”软件?等。1993年IEEE[IEE93]给出了一个综合全面的定义。软件工程是:1.把系统的、规范的、可度量的方法应用于软件开发、运行和维护过程,也就是把工程应用于软件;2.将第一点中提到的方法作为对象的研究活动;PressMan提出的层次化软件工程概念(我认为这种从技术角度提出的层次化概念更容易理解,也更具有实用价值,比我们书中提出的软件工程的本质特性和软件工程的基本原理等内容更具体):Pressman提出软件工程是一种层次技术。作为整个软件工程的基础,软件的品质问题是软件工程的核心问题,因此品质焦点是软件工程的基础技术。其次,软件工程的基础层是“过程层”,软件工程过程是将各种技术层粘合在一起的胶合汁,从而能够合理、即时的开发软件系统。过程通过定义框架能够有效地运用各类软件工程技术,软件过程形成了管理控制软件项目的基础,并且建立各类技术方法被应用顺序关系。同时在软件过程中将产生一些主要的工作产品(如模型、文档、数据、报告、形式等,核心的里程碑被建立,软件品质被保证,软件的变化也被管理起来。第三层,软件工程的方法提供了多种怎样建立软件的技术。这些方法涉及到最广泛的任务内容,如通讯、需求分析、设计模型、程序构造、测试和维护。同时这些方法并不是一些人意想的结果,他们具有一组坚实的理论背景,这些背景也可能是一些其他领域的研究结果。第四层,软件工程工具为软件工程和软件方法提供自动或半自动支持。统称称其为计算机辅助软件工程。这一节我们重点讲解软件过程的概念,因为通过对软件过程的理解,我们可以从一个较高的层面上更好地理解软件工程的作用和意义。对于软件工程在整个软件项目中的作用也可以有一个较好的分析。2.软件过程为了了解软件过程的具体含义,我们首先需要搞清楚几个问题。什么是软件过程:当你建造一个产品或系统时,采用一系列可推断的步骤是非常重要的,这样一个路径表能够帮助你建立一个即时的、高品质的结果。这个所谓的路径表就是我们所说的软件过程。什么人使用软件过程:软件工程师和软件项目管理者根据项目的需要选择使用软件过程,并遵循软件过程的要求进行分析设计。为什么软件过程是重要的:因为软件过程使软件的开发行为成为稳定的、可控制的和有组织的。一旦软件的开发行为变为失控,将造成整个软件开发活动的混乱。软件过程有那些步骤:通常情况下,你采用的软件过程主要依赖你所需要的建立什么样的软件系统。如一种过程可能非常适合建立飞机航空系统软件,而另一个完全不同的过程适合用于建立Web系统。应用软件过程会产生什么结果:从软件工程的观点来看,软件过程所获得的产品是一系列依据软件过程所定义的行为和任务的而产生的程序、模型、文档和数据等aa““qquuaalliittyy””ffooccuusspprroocceessssmmooddeellmmeetthhooddssttoooollss我们怎样能够确定软件过程产生的结果就是正确的哪?当前有多种软件过程的评价组织机制能够来确定各类软件过程的成熟度。无论如何,使用该软件过程建立的软件系统的品质、效率和长期的生存能力是该软件模型有效性的最好证明。2.1软件过程的框架软件过程的框架通过封装一些阶段性的行为,并将这些行为普遍应用到各类软件项目中,而不需要考虑该项目的大小和复杂性等。这里给出一个具有一般性的通用过程框架:通讯:这个框架行为包括大量的与客户的通讯和协作,对于传统的软件工程来说就是其提出软件生命周期中的“问题定义”、“可行性研究”和“需求分析”等环节的过程行为。计划:该行为为后续的软件工程的工作制定一个初步的计划。该计划描述了主要的技术任务、可能遇到的风险、需求的资源、系统完成的目标和完成这些需求的设计等。该部分相对于传统的软件工程来说类似于其中的“总体设计”工作。建模:该行为的主要任务是创建能够让开发者和客户都能够很好理解软件需求的模型,该模型以能够达到设计要求为基础。该部分相对于传统的软件工程来说类似于其中的“详细设计”工作。建模活动通常包括两类软件工程活动(分析和设计)。其中分析又包括了多种工作任务(如需求的汇集、细化、协商、描述和确认等)来创建一个分析模型。同样,设计也包括了多种工作任务(如数据设计、体系结构设计、接口设计和组件层设计等)来创建设计模型构造:该行为结合了代码设计和软件测试阶段的工作,该部分相对于传统的软件工程来说类似于其中的“编码和单元测试”和“综合测试”工作。部署:整个完成或部分完成的软件被提交给用户,让用户评估一下当前的产品,并提供相关的反馈意见。该部分相对于传统的软件工程来说类似于其中的“综合测试”和“软件维护”工作所有这些过程在具体实施时可能会有一些不同,但过程的框架行为始终保持不变。软件过程中还存在一些始终贯穿整个过程的雨伞行为,一般对这些行为的分类有:软件项目的跟踪和控制:由软件的评估者或管理者随时监控管理软件过程进行的情况,和项目计划进行对比,并有权采取有效的行动来维护开发的进度;风险管理:评估影响项目成果和项目品质的风险;软件品质保障:定义和引导行为保障软件品质;形式化技术分析:评价软件过程产品的有效性,并在其中的错误传播到下一个行为之前修正它;度量分析:通过与其他的雨伞行为行为相结合,度量过程、项目和产品,帮助开发出的软件产品满足用户的需要;软件配置管理:有效地管理软件过程的变化;重用管理:定义中间产品被重用的标准,并建立一种实现重用组件的机制。中间产品的准备和生产:中间产品包括有,模型、文档、标记、表格和图等。软件过程模型在软件工程领域的应用历史已经有30年了。使用过程模型的目的是更好地管理项目、更有效地预测时间和花费、指导软件开发队伍执行与建设系统相关的工作。但遗憾的是许多时候并不能达到这些效果,主要原因是教条和官僚的作风。过程模型强调项目的灵活性,因而最近几年在实际应用采用更多的都是一些非形式化的方法。这些敏捷的过程模型强调可操作性和适用性。过程模型的两种观点:严格的形式化描述和敏捷的可操作性描述。软件过程举例:CMMI(CapabilityMaturityModelIntegration)CMMI是SEI开发的一个综合过程元模型,主要描述软件企业规范开发的能力。CMMI从两个方面表示一
本文标题:第一讲软件与软件工程
链接地址:https://www.777doc.com/doc-2207329 .html