软件工程(第二版)-电子教案_第1页
软件工程(第二版)-电子教案_第2页
软件工程(第二版)-电子教案_第3页
软件工程(第二版)-电子教案_第4页
软件工程(第二版)-电子教案_第5页
已阅读5页,还剩762页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

软件工程电子教学文档第1章软件工程概述

第2章软件的定义及可行性研究第3章需求分析第4章软件设计第5章面向对象软件工程

目录

第6章编码

第7章软件测试

第8章软件维护

第9章软件项目管理

第10章软件设计过程的技术与方法目录

第1章软件工程概述

内容提要1.1软件的概念、特点及分类1.2软件开发引发的问题1.3软件工程的基本内容1.4软件工程的基本目标和原则1.5本章小结

软件的概念、特点及分类

软件的概念、特点及分类1.1.1软件的概念及其特点

从计算机应用的角度来看,计算机软件是计算机在各个方面应用的基础。计算机软件不仅包含计算机可以识别的代码形式,而且还包含每个项目内部构件的所有文件,如技术要求文件、设计文件、各种法律和财务上的文件、软件项目管理计划以及其他的管理文本和所有形式的手册。因此,软件是程序及程序开发、使用和维护过程中需要的所有文档。计算机软件从其特征上来看,主要有以下特点:软件的概念、特点及分类1.软件是逻辑意义上的概念而不是有形的系统中的部件。从这个意义上来说,软件是具体化的知识,软件的生产是一个知识化的脑力劳动过程,而不是一般的产品生产制造过程。2.软件的退化和失效不是因为使用过程中的消耗和老化而是由软件的自身缺陷以及维护修改不当导致的。软件的维护与硬件的维修有着本质的区别,它是一个使软件持续发挥其效能的更复杂、更重要的过程。主要是为适应对象的使用要求所做的软件改进和软件开发中存在缺陷的去除,而不是因部件损坏或失效使其恢复性能的一般修理。因此,软件的维护在整个软件的生命周期中起着举足轻重的作用。3.由于软件不能完全摆脱硬件和软件环境而单独发挥作用,因此软件的开发必须考虑计算机系统所能提供的基础条件,软件开发和运行对计算机系统有一定的依赖性。4.由于软件只有与实际应用紧密相结合才能发挥出其独特的效力,所以软件一般都是由定制的专门化生产来满足需求。从这个意义上讲,一个软件的应用成功与否取决于软件能否最大限度地满足对象的使用要求。软件的概念、特点及分类

5.软件,特别是大型软件的开发需要投入大量的、复杂的和高强度的脑力劳动,这导致了软件的高成本特征。如今,软件开发的费用已大大超过硬件的开销。另外由于软件开发技术本身的局限性和其他各方面因素的影响,大量软件开发资金投入后并不能保证都能获得预期的成果和回报。据统计,美国军方每年花费数十亿美元来购买软件,其中可直接使用的仅占百分之二,另外有百分之三要做一些修改才能投入使用,剩下的百分之九十五由于基本不能满足使用要求而失去了使用价值。由此可以看出,软件开发具有高风险的特征。

软件的概念、特点及分类软件的概念、特点及分类

6.相对于计算机硬件技术的发展,计算机软件技术的发展十分缓慢,不论是在理论研究中还是在实际开发的普及上都与计算机硬件的发展有相当的距离。面对计算机硬件的飞速发展,软件已经成为制约计算机技术发展和应用的瓶颈。计算机软件技术的发展时期:程序设计(ProgramDesign)时期(1947年~60年代初)程序系统(ProgramSystem)时期(60年代初~70年代初)软件工程(SoftwareEngineering)时期(70年代初至今)其发展主线是由个体简单的开发方式向着复杂、大规模、标准化、工程化的方向发展。在其最高阶段,把软件的开发界定为两个方面的内容:软件开发和随软件应用要求而带来的软件维护。软件的概念、特点及分类1.1.2软件的分类计算机软件是一个涉及多个领域、应用广泛的概念。人们从各个不同的角度对计算机软件提出了许多分类方法。目前一般的分类方法有:按软件的功能进行划分;按软件的规模进行划分;按软件的工作方式进行划分;按软件服务对象的范围进行划分;按使用频度进行划分;按软件失效影响进行划分。从某种程度上说,要兼顾多个不同类型的对象和范围对计算机软件给出一个科学、通用的分类确实是一件不容易的事情。因为不管是从哪个角度讲,随着软件复杂性的增加和应用领域及对象的多样性,各种分类方法都摆脱不了分类间的相互渗透,因此难以找出它们之间一般的差异性。软件的概念、特点及分类从应用领域的角度,把软件做以下归类。

系统软件

实时软件

嵌入式软件

基于Web的软件

实用软件软件的概念、特点及分类

1.系统软件与计算机硬件紧密结合,构成用户在某一方面使用计算机的基础平台。它的功能既包括复杂信息的数据结构处理,也包括计算机资源的共享与复杂的进程管理。不管哪种情况,系统软件的工作通常都伴随着与计算机硬件的频繁交互,需要精细调度。它同时又具有良好的用户支持、资源共享及多外部接口的特征,如操作系统、数据库管理系统、设备驱动程序等。这些软件在某种程度上具有较大范围的适应性,一般由专业的软件公司有目的的开发并较好地维护。

2.实时软件计算机的高速处理能力使得应用计算机对事件和数据进行实时处理成为可能,例如,工业过程控制、卫星导弹的运行控制、管理信息处理等等。这些完成处理、反馈、控制过程的软件称为实时软件。这些软件的特征是,对事件的响应时间有严格限定。它主要包括数据收集、实时分析和输出控制三个部分。实时软件既可以应用于信息处理,也可以广泛应用于过程控制。软件的概念、特点及分类3.嵌入式软件随着智能化产品的不断出现,微型处理器(MCU)在消费产品和工业产品中的应用越来越普及。这些用于提供控制和专职功能的软件称之为嵌入式软件。嵌入式软件一般为某一单独的应用专门设计,驻留在只读内存中,执行有限的专职功能(如洗衣机、电冰箱等简单器具的操作及控制)或提供重要的功能及复杂的控制能力(如空调器的控制、数控机床等控制系统),另外还可以用来进行信息处理(如电子词典、PDA等)。软件的概念、特点及分类软件的概念、特点及分类4.基于Web的软件互联网的普及给计算机的应用提供了更广泛的空间,Internet提供了无所不包、使用方便的软件资源。为了浏览和检索,基于Web的可执行指令(如CGI、HTML、Perl或Java)以及数据(如超文本以及可视、音频等格式的数据)等应用于浏览器的软件成为当今的又一个热点。5.实用软件这些软件是针对计算机在某一领域或特定工作性质的环境中应用的具有一定通用性质的软件。它通常可分为应用软件和支撑软件两大类,应用软件是在操作系统的基础上为某一特定领域应用而开发的软件,例如商业处理软件、科学计算软件、计算机辅助设计软件、人工智能软件等等;支撑软件一般用来辅助和支持开发人员开发和维护软件,例如需求分析工具、设计工具、编码工具、测试工具、维护和管理工具等等。软件的概念、特点及分类软件开发引发的问题

1.2.1社会对软件需求的不断发展随着社会的发展和科技的进步,人们需要解决的问题愈加复杂,并有更高的实时性要求。上述问题若单靠人工解决,不光是成本高而且要耗费大量的时间,有时甚至是问题解决了却由于时间过长而失去了意义。对于种种单靠人类自身能力难以解决的问题,人们使用计算机而成功地达到了预期的目的。在计算机技术的应用中,多样化问题的解决,需要大量不同软件的支持。因为离开了软件,计算机将不能解决任何问题,所以作为当今计算机信息技术灵魂的软件,随着计算机应用的日益普及和深化,它的数量正以惊人的速度急剧膨胀,复杂程度和规模也在迅速地增加。软件开发引发的问题软件开发引发的问题1.2.2软件开发理念和手段与客观实际存在的差异长期以来,由于计算机及其软件技术发展的阶段性和种种制约,人们总是凭着对计算机技术的片面理解和对实际问题的不充分的认识来进行软件开发。应用的开发理念和手段与客观实际的情况存在较大的差异,这些差异的存在对软件开发的各个环节形成了较大的障碍。目前,存在的差异主要表现在以下几个方面。

1.对软件本身的认识存在差异:

在计算机产生初期,计算机软件被认为是独立的程序,认识的角度是独立的、个体的。那时认为软件开发工作的主要任务就是编程,编程是程序设计人员个人技巧的充分发挥,工作是独立完成的而且是无章可循的。没有把个人的活动和整个软件的开发活动结合起来,片面地夸大了个人的作用。整个软件的开发过程缺乏系统的理论和方法,对软件产品本身的认识也等同于一般的产品,把重点放到生产制造环节,缺乏维护的思想。软件开发引发的问题软件开发引发的问题2.对软件的服务对象认识不足:在人们的传统认识中,一直把软件开发的重点放在开发者本身上,而对使用者一方没有给予足够的重视。随着软件的日益复杂和规模的不断扩大,软件的专业性也随之增强。这时软件开发人员对实际问题的理解和认识就成了软件开发成败的关键所在。现代软件工程要求对使用者提出的问题给予充分的认识和定义,并且进一步在软件开发中加以完善。软件开发引发的问题3.对软件的开发缺乏科学的管理:现代软件开发过程是一个复杂的系统工程,具有明显的工程特征和较高的技术含量。由于软件开发过程能见度低,管理人员对开发人员的工作和进度都难以把握,所以现有的管理手段和方法也难以适应软件开发的要求。例如,用一般工作量的衡量方法,比如以人·时、人·月或人·年作为计量单位的方法(简称人时、人月或人年)就难以准确地把握软件开发的工作进度。因为在软件的开发过程中,任务是不能简单分解的。任务分解后,人员的增加会带来沟通和交流的工作量增加,从而使总的工作量进一步增加。因此人员的数量和时间是不能简单替换的,它们的关系见图1.1。软件开发引发的问题图1.1软件开发过程中人员的数量和时间的关系软件开发引发的问题

4.软件开发手段和工具的不完善:从人们长期的劳动实践中可以看出,每一次先进工具的引入都会极大地提高生产效率。这一点在软件开发的过程中也不例外。虽然在长期的软件开发过程中人们一直在不断地探索、研究和制造有效实用的开发工具,但是,由于软件的开发工程是人类智慧的运用过程,所面临的对象又是复杂多样的,所以虽然目前出现了一些开发工具,但是都只能应用在软件开发的某一方面。尤其是在软件的分析、设计阶段,更无有效的工具,这一方面的工作还是主要由人工完成的。软件开发引发的问题1.2.3由软件开发导致的“软件危机”

软件危机是指在计算机软件开发和维护过程中遇到的一系列严重问题。这些问题主要体现在如何开发软件以满足用户日益增长的需求和如何对已有的软件进行维护。对于这一系列源于软件的开发理念、方法与客观现实不适应的严重问题,人们在软件的开发过程中不是彻底失败了就是虽然软件开发出来了但是运行结果不甚理想,有的虽然完成了预定的功能要求但是在工期或者成本上却大大超出了预算。软件开发引发的问题软件开发的高成本与软件产品的低质量之间的尖锐矛盾是导致软件危机的主要原因。它的主要表现和产生原因可以归结为以下几个方面。

1.软件开发成本和进度难以满足要求在复杂多样的软件开发对象面前,没有系统的开发手段和方法。开发具有较大的盲目性,从而导致不是经费的大大超支就是工作完成期限一拖再拖。这不仅损害了软件开发者的信誉,也极大地损害了委托开发者的利益。软件开发引发的问题

2.软件系统不能符合用户的要求在软件开发的初期,软件设计的依据是根据用户的需求提出的。由于种种原因,这些需求存在着用户表达的局限性和开发者理解的差异性。若在软件开发的过程中软件开发人员和用户没有及时沟通和不断地修正,则势必造成开发的软件与用户的需求产生巨大的分歧,从而给双方带来巨大的损失。

软件开发引发的问题3.软件难以维护在传统的软件开发过程中,由于轻视软件开发的管理和缺乏统一的要求,导致软件设计人员存在较大的自由倾向性,加大了软件对设计人员的依赖性。另外,在开发过程中对设计和实现过程的资料收集不够重视,开发人员间的接口部分不规范,这些都给软件的维护工作带来了极大的困难甚至使维护工作不可行。

4.软件工作不可靠

在软件开发完成后由于种种原因不能保证软件的正确性。软件测试是保证软件正常工作的重要环节。由于技术和其他方面的原因,软件开发者未能对软件做好充分的检测工作,导致提交给用户的软件质量难以保证。这些存在缺陷的软件在运行中暴露出大量的问题,轻者影响系统的正常工作,重者会发生意想不到的重大事故。寻找解决软件危机方法的过程就是软件工程形成的过程。软件工程目前已成为软件开发中的一门综合技术与管理两个方面的新兴学科,逐渐成为计算机软件开发、维护和管理的重要理论依据。软件开发引发的问题软件工程的基本内容软件工程的基本内容

软件工程以计算机软件生产为对象,其核心是以工程化的原理和方法对软件进行规划定义、开发和维护。其宗旨是以较少的投入,最快的时间生产出高质量的软件。

1.3.1软件工程的概念及其要素一般认为,软件工程学是指研究软件生产过程的理论和方法以及综合管理技术的应用学科,凝聚了软件实践者的成功经验和失败教训。软件工程一词最早是在1968年由北大西洋公约组织在联邦德国召开的一次会议上针对软件危机提出的。软件工程的主要思想是强调软件开发过程中应用工程化原则的重要性。软件工程的基本内容作为一门独立的学科,软件工程的内容包括三个方面的要素,即方法、工具和过程。软件工程方法为软件开发提供了开发、维护的实现技术。它采用特殊的语言或图形方式、结合完善的质量保证手段为软件开发的各个阶段提供了可靠的技术保证。软件工具是为软件工程方法的顺利实施提供的软件、技术的支撑环境,它为软件工程方法提供了自动化或半自动化的支持。如果将多个工具集成起来,由一个工具输出的信息就可以被另一个工具使用,这样就创建了支持软件开发的综合系统——计算机辅助软件工程(CASE)系统。

软件工程的基本内容软件工程过程是软件工程方法和软件工程工具的综合,以人为主为软件开发过程制定的一系列可操作的步骤并规定了每一步使用的方法及产生的结果,其目的是合理、及时地进行计算机软件开发。对软件工程的认识既要借鉴传统工程的知识、方法和技术,又要充分考虑软件自身的特殊性。在短短的30多年的发展历程中,软件工程的理论、方法和技术有了较大的发展,但是由于计算机技术本身就是一门新兴的学科,所以还不能说软件工程学科已经像经典的工程学科那样成熟。软件工程的基本内容1.3.2软件的生命周期软件工程强调使用生命周期的方法从时间的角度对软件开发和维护的复杂问题进行分解。使用这种方法把软件从形成概念开始,经过开发、使用和维护直到退役的漫长周期划分为若干个阶段,每个阶段都有相对独立的任务和解决的步骤和方法。这样,有利于软件开发过程的组织和管理,从而降低了整个软件开发过程的困难程度。对每个阶段都可选用最优的管理方法,同时也使每个阶段能够规定更明确的目标和恰当的审核标准。这样有利于保证软件的质量,大大地提高了软件开发的生产效率和成功率。软件工程的基本内容

软件生命周期的划分涉及软件本身以及软件开发等方面的多种因素,而且从不同的角度出发也有不同的划分方法。但它们都有一个统一的原则,即同一阶段内包含的任务性质尽量统一,各阶段任务间尽可能相对独立。目前通常采用的方法是把软件的生命周期划分为三个时期,即软件定义、软件开发和软件维护。在上述三个时期的叙述方法中,比较明确地揭示了软件开发的基本过程。为了更加深入地揭示软件的生命周期,给软件开发提供更明确的指导,我们把上述的基本时期进一步展开从而揭示软件生命周期的更详细、更具有明确特征的6个阶段。即问题的定义和可行性研究、需求分析、软件设计、程序编码、软件测试以及软件的维护。软件工程的基本内容

1.问题的定义和可行性研究每一个软件的开发都有确定的应用领域及使用对象,要使开发出的软件符合使用要求,就必须明确软件要解决的问题。软件开发人员通过与用户的充分沟通,根据用户提出的要求,从开发的角度把问题明晰化以作为软件开发的依据。在问题明确后,接下来的工作就是针对问题进行项目实施的可行性研究,探讨解决问题的可能方案,结合软件开发、使用的可利用条件(计算机硬件、软件、人力等资源)、开发费用以及软件投入使用后的经济效益等方面的问题,对定义的问题做出客观的评价,就问题的解决从技术、实施以及经济的角度做出是否可行的明确结论,以作为项目实施的决策依据。若可行,则在此基础上制定出完成开发项目的实施计划。软件工程的基本内容2.需求分析

在软件开发的初期用户提交系统要求时,一般只是从使用的角度,对所要求的内容概略地确定使用计算机解决问题的框架。对于这些要求,有些是开发工作能够满足的,有些需要在实现方法上做一些修改,有些实施起来存在困难,另外还存在软件可以实现而用户没有涉及到的功能。针对上面的问题,软件设计人员需要在已经明确定义了问题的基础上,反复与用户讨论、沟通。使用户针对提出的问题进一步明确所达到的目的。使软件开发者与用户对开发软件的认识达成一致,从而得到更详细的定义。最后根据分析的结果写出软件需求说明书以及与软件相关的初步说明文件。软件工程的基本内容

3.软件设计

软件设计是软件实现的一个重要过程。要实现一个软件的良好设计,前提是对软件需求的准确分析。有了良好的分析基础,首先进行总体设计,接下来再做详细设计。在总体设计中,确定软件系统的总体结构,结构中的各部分由与特定需求相对应的模块组成,根据系统的实现要求确定模块之间的关系。在详细设计阶段,对总体设计确定的功能模块逐步进行细化,为软件程序的编写打下基础。

软件工程的基本内容

在软件设计中,为了提高工作效率,有许多可供选择的方法和工具。随着对软件工程研究的不断深入,大量的新方法和有效的工具不断地涌现,这无疑给软件开发注入了新的活力。例如目前常用的结构化设计方法、面向对象设计方法、统一建模语言UML以及产品化的辅助工具RationalRose软件等。4.程序编码软件要发挥其功能最终是要有能在计算机上运行的、符合用户要求的程序。软件工程的基本内容程序编码的任务是应用适当的程序语言,把软件设计的结果转换成计算机可运行的程序代码。其要求是语言结构清晰、能准确实现软件的功能、有较高的运行效率并且易于维护。5.软件测试为保证软件的功能得以准确地实现,在软件设计完成后要经过严格的测试,以发现软件在整个设计过程中存在的问题并加以纠正。整个测试过程分单元测试、组装测试以及系统测试三个阶段进行。最后的结果是保证软件达到预定的要求。软件工程的基本内容

6.软件的维护软件维护是软件生命周期中持续时间最长的阶段。在软件开发完成并投入使用后,由于多方面的原因,软件不能继续适应用户的要求。要延续软件的使用寿命,就必须对软件进行维护。软件的维护包括纠错性维护和改进性维护两个方面。软件工程的基本内容1.3.3软件开发技术及过程管理

1.软件开发模型

软件开发模型是在软件生命周期基础上构造出的由软件开发全过程中的活动和任务组成的结构框架。它反映了软件开发中各种活动的组织衔接方式。它是软件项目开发工作的基础。它规定了软件开发、运作和维护中所需的过程、活动和任务。软件开发中使用的模型化方法就是用一定的流程将软件开发的各个环节连接起来,用规范的方式操作的软件实现过程,此过程类似于一般产品在工厂中的整个生产历程。软件工程的基本内容目前软件工程的研究学者和开发人员根据软件开发的实践经验提出了许多软件开发模型,例如:

瀑布模型(图1.2)

渐增式模型(图1.3)

软件重用模型

喷泉模型

螺旋模型(图1.4)软件工程的基本内容图1.2瀑布模型软件工程的基本内容图1.3渐增式模型软件工程的基本内容软件重用模型该模型是将有一般功能的软件模块组成重用库,以备在下一次软件开发中对有相近功能的模块实现重用。这样可减少软件开发中的重复工作,提高开发效率,缩短开发周期,降低开发成本。软件工程的基本内容喷泉模型该模型主要是针对面向对象软件开发模式提出的,着重强调不同软件开发阶段的重叠,各阶段没有严格的分界线,在软件开发过程中某一部分经常需要重复进行多次。比如,每个软件开发阶段结束后都要进行复审。另外,喷泉模型也强调模块的重用和合成,在设计中不强调从头开始,而是尽可能利用已有的设计模块。软件工程的基本内容图1.4螺旋模型软件工程的基本内容

对于实际的软件开发,由于问题的复杂性,一般一种模型很难符合要求。通常把几种模型组合在一起,配套使用,这样就形成了组合模型。这种把模型组合的方法,允许一个项目沿着最有效的路径发展,从而容易达到降低软件开发成本、缩短软件开发时间、提高软件产品质量的目的。软件工程的基本内容

2.软件开发的主要技术在软件开发中通常采用的技术方法有:

结构化分析和设计技术

Jackson软件设计技术

原型设计技术

面向对象的软件设计技术软件工程的基本内容

结构化分析和设计技术SADT(StructuredAnalysisandDesignTechnique)是Softech公司为解决复杂问题而提出的一种软件设计技术,它也是目前软件系统开发中使用最广泛的一种技术。SADT首先对问题进行结构分析,然后逐层分解,直至明了做什么(在需求分析阶段)或怎样做(在设计阶段)为止,最后写出详细的系统说明书。SADT技术软件系统的开发过程以瀑布式生命周期模型为基础,主要用于需求分析和功能设计阶段。软件工程的基本内容

Jackson技术为面向数据流的软件设计技术,称为Jackson(也称面向数据结构的)软件设计技术。在许多应用领域,数据结构对软件设计的影响很大,不仅影响软件结构的设计,还影响软件过程的设计。应用领域中的任一数据结构都可以概括为以下三种:重复性的控制结构即循环结构、具有选择特性的条件语句结构和分层次的层次软件结构。所以,基于数据结构能充分揭示软件结构的思想,Jackson方法为面向数据结构的设计定义了一组以数据结构为指导的映射过程。软件工程的基本内容

原型设计技术(PrototypesTechno1ogy)是针对传统瀑布模型的缺点而提出的一种新的软件开发技术。它通过建立和使用一系列原型来进行系统的设计、实现、测试和安装。其核心思想是快速建立一个具有若干功能(不要求完全)的可执行的原型,用该原型启发用户和设计者不断试用和完善(甚至可抛弃)。每次完善都获得一个新原型,直到满足用户全部要求为止。因此,许多人把原型技术称为“快速弱功能”开发技术。软件工程的基本内容

面向对象技术不仅已在计算机学科的传统领域,如程序设计语言、数据库、程序设计方法等方面取得成功,而且在CASE(计算机辅助软件工程)、CAD(计算机辅助设计)、CAI(计算机辅助教育)、多媒体、超文本、超媒体等新领域中也得到广泛应用。

面向对象软件=(数据+相应操作)的封装,以数据为中心。面向对象软件是事物的集合,通过对象以及对象和对象之间的通讯联系实现。它采用交互式、并行处理方式,由消息驱动控制。从应用的角度看,面向对象方法更加适合大型复杂的人机交互式软件和数据统计管理软件的开发。软件工程的基本内容3.软件过程管理

软件工程过程是软件工程师在软件开发过程中为实现开发目标而完成的一系列软件工程活动。其关键部分是软件开发和维护中的管理和支持能力。一个好的管理是成功的基础,一个差的或者是不当的管理势必导致过程的失败。为了成功地实施软件开发过程,首先管理者应对软件工程的目标、所需要的资源、经费以及工作量有一个基本的了解。然后在此基础上制定一个科学的软件开发计划、有效的具体实施措施以及完善的质量控制标准,并在软件开发过程中合理地掌握进度。软件工程的基本内容软件工程是一门实践性很强的应用学科,它的对象主要是软件开发中的社会学———人的问题,因而在实践中有很大的灵活性和多样性。即使是相同性质项目的开发,针对不同的团队(人员)也不能照搬原有的开发管理模式,必须根据实际情况进行调整。因此科学的管理是软件项目成功所不可缺少的重要组成部分。软件工程的基本目标和原则1.4.1软件工程的基本目标软件工程的目标是在给定成本、工期的前提下,达到要求的软件功能,取得较好的软件性能,开发的软件应易于移植、可靠、有效、可重用。并且应尽量提高软件质量与生产率,最终实现软件的工业化生产目标。在诸多的因素中质量是软件需求方最关心的问题,而生产率是软件供应方最关心的问题。从经济学的角度看,质量与生产率之间有着内在的联系,高生产率必须以质量合格为前提。质量与生产率之间不存在根本的对立,好的软件工程方法可以同时提高质量与生产率。软件工程的基本目标和原则软件工程的基本目标和原则1.4.2软件工程的基本方法及原则

抽象

局部化与信息隐蔽方法

模块化(高内聚,低耦合)

一致性

完全性和可验证性软件工程的基本目标和原则

1.抽象抽象就是透过现象深入里层,抽取出本质的过程和方法。人们对客观事物的认识是通过一系列抽象思维来完成的,抽象思维的过程就是运用概念进行判断、推理的过程。工程设计中的许多重要技术都是以抽象为基础的,如系统、模型、设计流程等。软件工程属于工程科学范畴,软件项目的开发也继承了这些思想、方法和技术。软件工程的基本目标和原则

2.局部化与信息隐蔽方法

局部化是指把一些有关的、具有特定目的的软件要素放在一起,以使程序的一个部分与另一个部分不相互牵扯和影响。

信息隐蔽是指一个模块将一些具有特定目的的数据及对数据的操作封装起来使其内部与外界相隔离。模块信息隐蔽的结果意味着系统有效的模块化可以通过定义一组独立的模块来实现,这些独立的模块彼此之间仅仅交换那些为了完成系统功能所必须交换的信息。当在测试或软件维护期间需要修改软件时,使用局部化与信息隐蔽原则设计的软件会把修改的影响限制在最小的范围之内。这对于提高程序的可靠性、可维护性以及模块的可重用性尤为重要。软件工程的基本目标和原则3.模块化(高内聚,低耦合)软件模块化,是指把软件系统划分为若干个逻辑上独立的模块,每个模块完成独立的子功能,将所有的模块集合起来能满足问题的要求。模块化是设计复杂软件的有效方法,也是为了有效地管理和维护软件经常采用的方法。模块化设计使软件结构清晰、设计方便、理解容易,并且易于修改和测试,有助于提高软件的可靠性和程序员的分工合作。软件工程的基本目标和原则模块独立,是指一个模块的工作不依赖于另一个模块的存在,模块与模块之间的联系只是不可缺少的必要的数据联系。它是抽象、模块化、局部化和信息隐蔽的直接结果,也是获得良好设计的关键。对降低软件成本、提高软件开发的成功率至关重要。模块的独立性可以由两个定性的标准来衡量,即内聚度和耦合度。内聚度是指模块内部各个成分之间联系的紧密程度,用来衡量模块的内部特性;耦合度是指模块与模块之间互相依赖的程度,用来衡量模块的外部特性。一个模块的内聚度愈高、耦合度愈低,模块的独立性就愈好。软件工程的基本目标和原则4.一致性为了保证系统的良好性能,在软件设计时应使用统一的结构和规则。这包括系统接口的一致性、符号术语的一致性以及规格说明与实现对象的一致性。为实现一致性的原则,软件工程提供了许多有效的软件设计工具(如数据词典、数据库、文档自动生成器与一致性检查工具)和设计方法以及编码风格的支持。软件工程的基本目标和原则5.完全性和可验证性一个成功的软件应该完全、充分地实现系统所需的功能,而且要使系统有一定的“坚固性”,即在系统处于非正常状态时有一定的使系统行为保持正常的能力。同时,对于一个在开发中分解细化的大型软件系统应注意遵循容易检查、测试和评审的原则。本章小结

本章介绍了软件以及软件工程中所涉及的一些基本概念和软件设计中的有关理论以及实践中的方法和原则。从软件开发所引发的软件危机以及解决的方法导入了软件工程的概念、要素及其在软件开发中的方法和作用。讲述了软件及其特征、软件工程的概念及要素、软件工程过程、软件的生命周期和开发模型等概念。

第2章软件的定义及可行性研究

内容提要2.1

问题定义2.2

可行性研究2.3

可行性研究报告的主要内容以及在

软件开发中的作用2.4

实例分析2.5

本章小结软件的定义及可行性研究一般说来,把软件的生命周期划分为软件定义、软件开发、软件运行三个时期。软件定义时期是生命周期的第一个时期,也是软件开发的基础。根据软件开发的基本过程,这个时期可分为两个阶段:问题定义和可行性研究。这两个阶段的主要任务就是分析用户要求,在对用户要求充分了解的前提下,分析未来新系统(即目标系统)的主要目标,分析开发系统的可行性。参加这个时期工作的人员有用户和系统分析员。软件的定义及可行性研究图2.1软件定义时期工作流程

2.1问题定义

问题定义问题定义是软件定义时期的第一个阶段,作为软件的开发者,在这个阶段必须弄清用户“需要计算机解决什么问题”。2.1.1问题定义的内容(1)问题的背景,弄清楚待开发系统现在处于什么状态,为什么要开发它,是否具备开发条件等问题。(2)提出开发系统的问题要求以及总体要求。(3)明确问题的性质、类型和范围。(4)明确待开发系统要实现的目标、功能和规模。(5)提出开发的条件要求和环境要求。问题定义2.1.2问题定义的方法在问题定义阶段,需要用户和系统分析员共同协作、紧密配合,方能圆满地完成问题定义报告。具体步骤如下:

首先,系统分析员要针对用户的要求做详细的调查研究,认真听取用户对问题的介绍;阅读与问题有关的资料,必要时还要深入现场,亲自操作;调查开发系统的背景;了解用户对开发的要求。其次是与用户反复讨论,以使问题进一步确定化。经过用户和系统分析员双方充分协商,确定问题定义的内容。最后写出双方均认可的问题定义报告。

2.2可行性研究可行性研究可行性研究是在问题定义之后进行的,它是软件定义时期的第二个阶段。可行性研究的目的是明确“问题是否能够解决”和“是否值得去解决”。也就是判断为开发系统所定的目标和规模是否能够实现,新系统是否能够带来经济效益。可行性研究的实质是在高层次上做一次大大简化了的需求分析和设计。作为可行性研究的成果,最后要写出《可行性论证报告》。可行性研究2.2.1可行性研究的任务1.技术可行性从技术的角度去研究系统实现的可行性。主要包括:在给出的限制范围内,能否设计出系统,并实现必要的功能和性能;开发人员、硬件和软件是否存在问题;系统所用到的相关技术是否支持。2.经济可行性是对软件开发项目进行成本.效益估算,分析实现这个系统有没有经济效益。3.运行可行性指为新系统规定的运行方式是否可行。如果新系统建立在原来已担负其他任务的原系统上,就不能要求它在实时在线状态下运行,以免与原有的任务相矛盾。可行性研究4.法律可行性研究新系统的开发在社会上和政治上会不会引起侵权、破坏以及会不会与法律相抵触等问题。可行性研究最根本的任务是对以后的行动方向提出建议。如果可行性研究的结果是问题没有可行的解,那么系统分析员应该建议停止这项工程的开发;如果可行性研究的结果是问题值得去解决,那么系统分析员应该推荐一个较好的解决方案,并且为工程制定一个初步的开发计划。可行性研究2.2.2可行性研究的方法和步骤可行性研究的整个过程是从分析《新系统目标与范围的说明书》开始到新系统的推荐方案通过审查为止。在整个过程中,要经过以下步骤:1.审核系统的规模和目标2.研究当前正在使用的系统3.导出新系统的高层逻辑模型(1)由当前物理系统提出当前系统物理模型;(2)由当前系统物理模型,导出当前系统逻辑模型;(3)参考当前系统逻辑模型,设想出新系统逻辑模型;(4)根据新系统逻辑模型建造新系统物理模型,导出新物理系统。可行性研究

4.重新定义问题图2.3建立系统逻辑模型的过程可行性研究5.提出和评价供选择的方案6.推荐一个方案和行动方针(1)项目的开发价值;(2)推荐这个方案的理由。7.草拟项目开发计划(1)工程进度表(2)开发人员(3)各种资源(4)成本估计8.书写文档,提交审查可行性研究2.2.3系统流程图在进行可行性研究的过程中,需要用物理模型对当前物理系统和新物理系统进行描述,系统流程图是用来描述系统物理模型的一种传统工具。

系统流程图的基本内容是:

(1)用图形符号以黑盒子形式描述系统内的每一个成分(例如:程序、文件、数据库、硬件设备、人工过程等)。

(2)用“→”表示信息在系统各个成分之间的流动情况(不要误认为“”表示信息的加工和控制过程)。可行性研究图2.4教师图书采购系统流程图可行性研究2.2.4数据流图数据流图(DFD)是描述数据处理过程的工具。它从数据传递和加工的角度,以图形的方式描述数据流从输入到输出的传输变换过程。它表示了系统内部信息的流向以及系统的逻辑处理功能。数据流图中的基本图形符号有四种:(1)“→”表示数据和数据流。箭头表示数据的流动方向。数据流图中应在线旁标注数据流名。(2)“○”表示对数据的加工,即对数据的某种操作或变换。数据流图中应在圆圈内写上加工名。(3)“”表示按照某种规则生成,且长度不限的数据文件(也称数据存储)。数据流图中应在双线旁标注文件名。(4)“□”表示数据流的源头和终端。可行性研究图2.5教师图书采购系统数据流图可行性研究数据流图中各种成分及命名方法(1)数据流数据流表明数据和数据流向,它通常由一组数据项组成。两个加工之间可以有多个数据流,这些数据流之间没有任何联系。数据流图中也不表明它们的先后次序。指向文件的数据流可以是写入文件或查询文件,从文件引出的数据流可以是从文件读出的数据或得到的查询结果。在加工之间传输的数据流必须有一个合适的名词,而在文件和加工之间传输的数据流可以不命名,因为可以从“加工”和“文件”的名字,弄清数据流的含义。可行性研究(2)加工加工是对数据的某种操作或变换。加工要取适当的名字,以提高可读性。“加工”的名字通常是动词短语,它应简明扼要地表明完成什么加工。不要使用含糊不具体的动词,如“处理”、“加工”等。(3)文件文件起暂时保存数据的作用。文件的命名方法与数据流的命名方法类似。

(4)数据源头和终点数据源头和终点是数据的始发点和终止点,是表示系统和环境的接口。在实际问题中,它可以是人员、计算机外部设备或其他装置,不需要对它进行软件设计和实现。因此,在命名时应符合环境的真实状况。可行性研究2.2.5经济可行性在可行性研究过程中,经济可行性研究占有重要地位,它从经济上衡量一个项目是否有开发价值。经济可行性研究主要包括两个方面的内容:一是新系统成本的估计;二是新系统可能产生的效益。又称为成本/效益分析。主要内容系统成本系统效益软件开发成本运行维护成本经济效益社会效益图2.6经济可行性分析的主要内容可行性研究报告的主要内容以及在软件开发中的作用可行性研究报告的主要内容

以及在软件开发中的作用可行性研究报告是可行性分析阶段结束后提交的文档,是决定软件开发项目的重要基础,也是软件后续设计的基本依据。2.3.1

可行性研究报告的基本内容

1.引言

2.可行性研究的前提

3.对现有系统的分析

4.所建议技术的可行性分析

5.所建议系统经济可行性分析

6.社会因素可行性分析

7.其他可供选择的方案

8.结论意见可行性研究报告的主要内容

以及在软件开发中的作用1.引言

(1)阐明编写该报告的目的,指出读者对象。(2)指出项目的背景。包括项目名称;项目的任务提出者、开发者、用户及实现软件的单位;项目与其他软件系统的关系。(3)定义。给出报告中用到的专门术语的定义和英文缩写的原文。(4)参考资料。列出可能使用到的有关资料的标题、标号、作者、发表日期、出版社或资料来源。

①书写文档所引用的有关资料所参考的软件标准或规范;

②与项目有关的已发表的资料;

③项目经批准的计划任务书、合同或上级机关的批文。可行性研究报告的主要内容

以及在软件开发中的作用2.可行性研究的前提(1)要求:列出对拟开发项目的各项基本要求,并加以说明。包括:功能、性能、输入.输出、基本数据流图、安全与保密要求等。(2)目标:可包括人力与设备费用的节省、处理速度的提高、控制精度或生产力的提高、管理信息服务的改进、决策系统的改进、人员工作效率的提高。(3)条件、假定和限制:可包括建议开发软件运行的最短寿命,经费来源和使用限制,法律和政策方面的限制,硬件、软件、运行环境和开发环境的条件和限制,可利用的信息和资源,建议开发软件投入使用的最迟时间等。(4)可行性研究方法。(5)决定可行性的主要因素。可行性研究报告的主要内容

以及在软件开发中的作用3.对现有系统的分析

(1)处理流程和数据流程。(2)工作负荷。(3)费用支出:如人力、设备、空间、支持性服务、材料等各项开支。(4)人员:列出所需人员的专业技术类别和数量。(5)设备。(6)局限性:说明现有系统存在的问题以及开发新系统的必要性。可行性研究报告的主要内容

以及在软件开发中的作用4.所建议技术的可行性分析(1)对系统的简要概述。(2)与现有系统比较的优越性。(3)处理流程和数据流程。(4)采用建议系统带来的影响:对设备的影响、对现有软件的影响、对用户的影响、对系统运行的影响、对开发环境的影响、对经费支出的影响。(5)技术可行性评价:包括在限制的条件下,功能目的能否达到;利用现有技术,功能目的能否达到;对开发人员数量和质量的要求,并说明是否满足;在规定的期限内,开发能否完成。可行性研究报告的主要内容

以及在软件开发中的作用

5.所建议系统经济可行性分析(1)支出。(2)效益。(3)收益/投资比。(4)投资回收周期。(5)敏感性分析:指一些关键性因素,如系统生命周期长短、系统工作负荷量、处理速度要求、设备和软件配置变化等对支出和收益的影响分析。可行性研究报告的主要内容

以及在软件开发中的作用

6.社会因素可行性分析(1)法律因素:如合同责任、侵犯专利权、侵犯版权等。(2)用户使用可行性:如用户单位的行政管理、工作制度、人员素质等能否满足要求。

7.其他可供选择的方案逐个阐明其他可供选择的方案,并重点说明未被推荐的理由。

8.结论意见(1)着手组织开发;

(2)等待若干条件具备后才能开发;(3)需对开发目标进行某些修改;(4)不能进行或不必进行;(5)其他。可行性研究报告的主要内容

以及在软件开发中的作用2.3.2可行性研究报告编制中应注意的问题1.坚持实事求是的原则,不要随意夸大新系统的功能和其他指标。2.任何一项内容的书写均要以科学分析的结果为依据,不能凭空想象。

3.对每一项内容的描述必须反复推敲,一定要做到用词恰当、准确。

4.从具体情况出发。可行性研究报告不一定面面俱到,但对于用户关心的部分或项目中重要的部分要重点阐明。5.书写形式要规范。可行性研究报告的主要内容

以及在软件开发中的作用2.3.3可行性研究报告在软件开发中的作用1.可行性研究报告是可行性研究阶段的成果。

2.可行性研究报告提出了软件开发的总体目标和范围,因此它是软件开发的行动指南。

3.可行性研究报告是需求分析的基础和依据。2.4实例分析实例分析

2.4.1弄清问题的背景及定义

2.4.2确定目标系统的功能

2.4.3技术可行性分析

1.网络方面

2.数据库方面2.4.4经济效益分析2.4.5项目实施计划1.需求分析;2.需求分析确认;3.系统设计;4.程序设计;5.新作业制度实施;6.数据收集整理与建档本章小结软件的定义及可行性研究是软件生命周期的第一个阶段。在问题正确定义的基础上,通过分析,导出问题的初步试探性的解法。然后在此基础上复查,并修改问题的定义,再分析,再提出改进解法……如此反复,直至提出一个符合系统目标的高层次的逻辑模型。由这个逻辑模型可设想出多种可能的物理系统。然后对这些物理系统进行可行性研究,最后由系统分析员提出一个推荐的行动方案,提交审查。数据流图是描述系统逻辑模型的最好工具,而系统流程图则是描述系统物理模型的最好工具。在可行性研究中,经济可行性是一项重要内容。使用部门往往从经济的角度考虑是否投资于这项工程。”可行性研究报告”是软件的定义及可行性研究时期所产生的重要文档。

第3章需求分析

内容提要3.1

需求分析的目标和任务3.2

软件需求的获取方法3.3

需求分析的基本过程3.4

结构化需求分析的方法3.5

支持需求分析的原型化方法需求分析需求分析是软件生命周期中最重要的一步,也是最关键的一步。它将可行性研究阶段产生的软件功能和性能的总体概念描述为具体的软件需求规格说明。而软件需求规格说明是软件开发的基础,它关系到工程的成败和软件产品的质量。软件需求分析也是一个不断认识“问题”,逐步细化系统“做什么”的过程。在该过程中,要将软件定义和规划阶段所确定的软件范围逐步细化到可详细定义的程度,分析和提出各种不同的软件元素,然后为这些元素找到可行的解决方法。用户和系统分析员在软件需求分析阶段均充当着重要角色。

3.1需求分析的目标和任务

需求分析的目标和任务需求分析的基本任务就是细化“系统必须做什么”,准确地回答“系统必须做什么”。需求分析实际上分两个阶段:需求理解获取阶段和需求表达阶段需求分析的目标和任务需求分析的任务确定系统必须完成哪些工作,也就是对新系统提出完整、准确、清晰、具体的要求。系统分析员以可行性研究阶段产生的数据流图(逻辑模型)为出发点,在实现系统基本功能的基础上,对这些功能仔细研究,从而进一步将功能具体化。需求分析阶段结束时提交的文档,应包括详细的数据流图、数据词典。需求分析的任务就是借助于当前系统的逻辑模型导出新系统的逻辑模型,确定新系统“做什么”的问题。需求分析的目标和任务软件需求分析阶段的具体任务

1.确定软件系统的综合需求软件系统综合需求有:系统功能需求、系统性能需求、系统环境需求、可靠性需求、安全保密性需求、用户界面需求以及将来可能提出的需求等。

2.分析系统的数据需求任何一个软件系统本质上都是信息处理系统,都经过数据的输入、处理与输出的过程。系统要求处理的信息和输出的信息在很大程度上决定了系统的概貌。因此,分析系统的数据需求是一个重要任务。复杂的数据是由许多基本数据元素组成的,数据元素之间的逻辑关系可由数据结构表示,可以利用数据词典全面地定义数据。需求分析的目标和任务3.导出新系统的逻辑模型完成了以上工作后,就可以导出新系统的逻辑模型了。它采用分层表示的方法,对可行性研究时导出的高层逻辑模型做逐层细化的处理。4.修正系统开发计划经过需求分析,分析员对新系统有了更深入更具体的认识。因此,可以较准确地计划系统的进度和估算成本,在此基础上应该对以前制定的开发计划进行修正。5.开发原型系统一般说来,在生产一种新的工业产品时,常常先制造一个“样机”,成功后再成批投产。原型化软件开发思想,正是从“样机”借用过来的。在开发新系统之前,先构造一个原型系统(相当于“样机”,详见3.5节)。需求分析的目标和任务构造原型系统的目的是:用较少的投入和较短的时间,让用户看到新系统的主要功能,从而使用户可以更准确地提出和确定对新系统的要求。6.编写软件需求规格说明书软件需求分析阶段结束后要编写软件需求规格说明书,它明确地表达了用户与系统分析员对软件系统的共同理解。

3.2软件需求的获取方法软件需求的获取方法软件需求分析首先要进行需求理解的获取。通常,获取软件需求的一般途径和方法有以下几个方面:1.用户访谈和会议。在系统分析员和用户之间存在这样一个问题:用户熟悉业务,但不熟悉计算机技术,而系统分析员熟悉计算机技术,却不了解用户业务。因此就会出现用户提出的所有要求并不一定都合理,而系统分析员对一些用户要求又模糊不清的问题。这就需要系统分析员和用户反复交谈,共同讨论,必要时系统分析员可以通过深入现场,开座谈会的方式,了解用户对软件系统的各种要求。澄清模糊的需求认识,去掉那些无法实现的和不合理的要求,然后再决定采纳哪些要求。对于去掉的要求,应向用户做充分的解释,以求得谅解。软件需求的获取方法2.了解用户当前工作流程,找出新系统实现的方法。用户的当前系统可能是某个需要改进的已在计算机上运行的数据处理系统,也可能是一个人工的数据处理过程。系统分析员要深入现场调查研究,了解当前系统是如何运行的,其组织结构、输入、输出以及资源利用情况和日常数据处理过程是怎样的,并把自己对当前系统的理解用一个物理模型描述出来。然后,对当前的物理模型进行分析,区分出本质的和非本质的因素。去掉那些非本质的因素,得到反映系统本质的逻辑模型。接下来的工作就是:决定新系统与当前系统在逻辑上的差别,将变化的部分看作是新的处理步骤,对数据流图进行调整。从这个逻辑模型我们可以找出当前系统的缺陷。3.开发人员和委托人要充分地交流和合作。3.3软件需求的基本过程3.3软件需求的基本过程软件需求分析的基本过程可以分成以下四步:问题识别、分析与综合、编制文档和综合评审。3.3.1问题识别首先,系统分析员要研究可行性分析报告(如果有的话)和软件项目实施计划。主要是从系统的角度来理解软件,确定对目标系统的综合要求,即软件的需求。还要提出这些需求实现的条件,以及需求应达到的标准。也就是解决待开发系统需要“做什么”,“做到什么程度”的问题。这些需求包括:

(1)功能需求:提出目标系统在职能上应该做什么,这是最主要的需求。(2)性能需求:给出目标系统的技术性能指标,包括存储容量限制、运行时间限制等。3.3软件需求的基本过程(3)环境需求:给出目标系统运行时所需的环境要求。例如,在硬件方面,采用的机型、外部设备、数据通信接口等。在软件方面,支持系统运行的系统软件(操作系统、网络软件、数据库管理系统等)。在使用方面,使用部门的制度和操作人员的技术水平应具备的条件等。(4)可靠性需求:不同的软件在运行时,失效的影响各不相同。在需求分析时应对目标系统投入运行后不发生故障的概率按实际的运行环境提出要求。对于重要系统,或是运行失效会造成严重后果的系统,应提出较高的可靠性需求。

3.3软件需求的基本过程(5)安全保密性需求:不同的用户,对系统的安全、保密的要求也不相同。应当对用户这方面的需求恰当地做出规定,以便给待开发系统以特殊的设计,使其在运行中安全保密方面的性能得到必要的保证。(6)用户界面需求:系统与用户界面如果友好,用户就能够方便、有效、愉快地使用该系统。从市场角度看,具有友好用户界面的软件系统有很强的竞争力。因此,在需求分析时,必须为用户界面细致地规定应达到的要求。3.3软件需求的基本过程(7)资源使用需求:这是指对目标系统运行时所需的数据、软件、内存空间等各项资源的要求。另外,软件系统开发时所需要的人力、支撑软件、开发设备等都属于软件开发的资源,需要在需求分析时加以确定。(8)软件成本消耗与开发进度需求:在软件项目立项后,要根据合同规定,对软件开发的进度和各步骤的费用提出要求,作为开发管理的依据。(9)预先估计以后系统可能达到的目标。这样,在开发过程中,可以对系统将来可能的扩充与修改做准备。一旦需要时,就比较容易进行补充和修改。3.3软件需求的基本过程3.3.2分析与综合问题分析和方案的综合是需求分析第二个方面的工作。系统分析员必须从信息流和信息结构出发,逐步细化所有的软件功能,找出系统各元素之间的联系、接口特性和设计上的约束,分析它们是否满足功能要求、是否合理。依据功能需求、性能需求、运行环境需求等,除去不合理的部分,增加需要部分。最终综合成系统的解决方案,给出目标系统的详细逻辑模型。

3.3软件需求的基本过程

在这个步骤中,分析和综合工作应反复地进行。在对现行问题和期望的信息(输入和输出)进行分析的基础上,系统分析员开始综合出一个或几个解决方案,然后检查它的工作是否符合软件计划中规定的范围,若有不符再进行修改。总之,对问题进行分析和综合的过程将一直持续到系统分析员与用户双方都认为可以正确地制定该软件的规格说明为止。3.3软件需求的基本过程

3.3.3编制文档经过分析,确定了系统必须具有的功能和性能,定义了系统中的数据并且简略地描述了处理数据的主要算法。下一步应该把分析的结果用正式的文档记录下来,作为最终软件配置的一个组成成分。根据需求分析阶段的基本任务,在这个阶段一般应该完成下述四份文档资料。(1)系统规格说明:主要描述目标系统的概貌、功能需求、性能需求、运行需求和将来可能提出的需求。在分析过程中得出的数据流图和用IPO图或其他工具简要描述的系统的主要算法是这份文档的重要组成部分。此外,这份文档还应该包括用户需求和系统分析功能之间的参照关系以及设计约束等。3.3软件需求的基本过程(2)数据要求:主要包括通过需求分析建立起来的数据词典以及描绘数据结构的层次方框图和对存储信息(数据库和普通文件)分析的结果。(3)用户系统描述:这份文档从用户使用系统的角度来描述系统,相当于一份初步的用户手册。其内容包括对系统功能和性能的简要描述,使用系统的主要步骤和方法以及系统用户的责任等。这份初步的用户手册使未来的用户能从使用的角度检查该项目系统,从而使他们比较易于判断这个系统是否符合他们的需要。(4)修正的开发计划:经过需求分析阶段的工作,系统分析员对目标系统有了更深入更具体的认识,因此,可以对系统的成本和进度做出更准确的估计。在此基础上应该对开发计划进行修正。包括修正后的成本计划、资源和进度计划等。3.3软件需求的基本过程3.3.4综合评审需求分析阶段工作的复查是综合评审。综合评审就是对功能的正确性、完整性、清晰性以及其他需求给予评价。评审的主要内容如下:(1)系统定义的目标是否与用户的需求一致;

(2)系统需求分析阶段提供的文档资料是否齐全;

(3)文档中的所有描述是否完整、清晰、准确地反映了用户需求;(4)与所有其他系统成分的重要接口是否都已经描述;3.3软件需求的基本过程

(5)待开发项目的数据流与数据结构是否完全确定;(6)所有图表是否清楚,在不补充说明时能否理解;

(7)主要功能是否已包括在规定的软件范围之内,是否都已充分说明;(8)设计的约束条件或限制条件是否符合实际。除系统分析员之外,用户.需求者、开发部门的管理者以及软件设计、实现、测试人员都应当参加评审工作。评审结束时应有评审负责人的结论意见及签字。

3.4结构化需求分析的方法结构化需求分析的方法需求分析常用的方法有:面向数据流的结构化分析方法、面向数据结构的Jackson方法、结构化数据系统开发方法、面向对象的分析方法等,对于要求时序的调度类软件,还可使用状态迁移图、Petri网等。

3.4.1面向数据流的结构化分析方法结构化分析方法(StructuredAnalysis,简称SA方法)是20世纪70年代由E.Yourdon等人提出的一种系统化的软件开发方法。三十多年来,结构化分析方法一直在软件设计中起着重要的作用,它的一些重要概念,也应用于其他开发方法中。结构化需求分析的方法

结构化分析方法的核心思想:采用“自顶向下,逐步求精”的技术,对系统进行划分。最初,把整个系统表示成一张环境总图,指出系统所有的输入、输出和边界。然后,逐步对系统进行细化,每细化一次,就把一些复杂的功能分解成较简单的功能,并增加细节描述。继续细化,直到所有的功能都足够简单,不需要再细化为止。面向数据流的结构化分析方法中的常用工具:

数据词典和结构化语言结构化需求分析的方法3.4.2数据词典及其功能顾名思义,数据词典是数据的集合,它对数据流图中的各个元素作出完整的定义和说明,是数据流图的补充工具。数据流图和数据词典共同构成系统的逻辑模型,两者缺一不可。

1.数据词典的内容一般说来,数据词典应包括以下6类元素的定义。

(1)数据流在一个数据流图中,数据以数据流为单位进行传输。定义的主要内容有:数据流名称及其编号、别名、数据流的来源、数据流的去向、数据流的组成结构化需求分析的方法(2)数据项也称数据元素,是数据的最小单位。定义的主要内容有:数据项名称及其编号、别名、取值范围和取值含义、备注。(3)数据结构一个数据结构可以由若干个数据项组成,或者由若干个数据结构组成,也可以由若干个数据项和数据结构共同组成,总之它把关系“密切”的数据组合在一起。定义的主要内容有:名称及其编号、数据结构的组成。若是一个简单的数据结构,只列出数据项;若嵌套了数据结构,只列出数据结构的名称。结构化需求分析的方法(4)数据存储数据存储是保留或保存数据的地方。定义的主要内容有:数据存储名称及其编号、数据存储的组成(它所包含的数据项或数据结构)、组织方式。(5)加工逻辑定义加工逻辑的主要内容有:名称及其编号、加工逻辑的输入和输出、加工逻辑的说明(对加工逻辑的功能做明确的描述,常采用的工具有:结构化语言、判定树、判定表等)。(6)外部实体外部实体是系统的“人—机”界面。数据流由外部实体输入,又从系统向外部实体输出。定义的主要内容有:外部实体的名称及其编号、外部实体的简述、与外部实体有关的数据流。结构化需求分析的方法

2.数据词典中使用的符号为了定义简明,在词典中允许使用5种关系符号和1种注释符号。符号含义

=

等于,定义为

+加

[]选择符号,表示对[]中列举的值可以任选其一{}重复符号,表示对{}中的内容可视需要重复使用()可选符号,表示对()中的内容可由设计者决定取舍*…*

注释符号,表示两个*之间的内容是对条目的注释结构化需求分析的方法

3.加工逻辑的说明通常采用结构化语言、判定表或判定树等工具来描述加工逻辑。(1)结构化语言自然语言加上结构化的形式就构成了结构化语言,这是一种介于自然语言与程序设计语言之间的语言。结构化程序有顺序、选择、循环等控制结构。结构化需求分析的方法(2)判定表在一些数据处理中,数据流图的加工需要经过多个逻辑条件组合的取值才能确定,此时运用判定表描述就比较清晰明了。判定表由四部分组成,各部分功能如下:左上部:列出所有条件。左下部:列出所有可能做的工作。右上部:每一列表表示各种条件的一种可能组合。右下部:每一列表表示与每一种条件组合所对应的工作。(3)判定树判定树也是用来表达加工逻辑的工具,有时比判定表更直观,更易于接受。下面以一个具体实例来说明以上三种加工逻辑的应用。结构化需求分析的方法4.数据词典的功能数据词典最重要的功能就是作为分析阶段的工具。用户通过它可以清楚地了解系统分析员对系统数据和加工逻辑的详细说明。不同的开发人员或不同的开发小组之间可以通过对数据做出一致的定义来避免定义的混乱。数据词典中对加工逻辑的描述很有价值,若改变了某个数据的定义,则很容易看出对加工逻辑所产生的影响,并且可方便地对受影响的加工逻辑做出相应的改变。数据词典也是下一步设计的依据,若要求所有的开发人员都按照数据词典的定义去设计模块,则会避免麻烦的接口问题。结构化需求分析的方法5.数据词典的实现通常,实现数据词典有三种途径。(1)人工方法:采用人工方法实现时,把每一词典条目(即每一个数据定义或每一个加工逻辑说明)写在一张卡片上,由专人管理和维护。为了便于搜索,所有卡片按数据名称排序。人工方法的优点是容易实现。(2)自动方法:把词典存在计算机中,用计算机对它搜索和维护。现有多种“词典管理程序”如PLS.PSA。用计算机管理词典质量高,搜索、维护方便。(3)人工和自动混合的方法:在人工过程中可使用正文编写程序、报告生成程序等帮助完成。结构化需求分析的方法3.4.3数据流图的细化经过需求获取阶段的工作,分析员更加清楚地确定了系统边界,即系统与外界或环境的输入和输出。因此可以酌情对它进行完善,从而得到顶层数据流图。由于它表示了系统的环境,因此也称为系统环境图。

1.数据流图的细化有了顶层数据流图后,接下来的工作就是自顶向下画出各层的数据流图。具体地说,就是对加工逻辑进行“逐步分解”或“逐层细化”,直到底层的加工足够简单,功能清晰易懂,不必再继续分解为止。结构化需求分析的方法

2.数据流图和加工的编号问题为了便于管理,对于所有的数据流图和加工均需要编号。编号原则为:在整个系统中每一编号是惟一的。我们采用以下的编号规则:

(1)数据流图的编号规则:顶层不参加编号,从0层开始所有的子图均有一个编号,其编号采用所分解的父图和相应加工的编号。结构化需求分析的方法(2)加工编号规则:顶层加工不编号,0层的加工编号为1,2,3…,从1层开始所有加工的编号由相应的子图号、小数点和加工在子图中的顺序组成。

3.数据流图的补充和完善经过细化的数据流图,并没有对数据和加工进行详细的说明。因此,我们还必须在数据词典中完成以下工作:(1)定义各层数据流图中所包含的数据流和数据存储。(2)定义最底层数据流图中的所有加工。3.5支持需求分析的原型化方法3.5支持需求分析的原型化方法在需求分析阶段很难得到一个完整的规格说明,对于一些大型软件项目更是如此。究其原因,一方面,在软件开发初期用户想法模糊,很难完全准确地表达系统的全面需求;另一方面,软件开发者不熟悉应用环境,对问题的认识更是模糊不清。虽然经过详细的讨论和分析也许能够得到一份较好的规格说明,但它很难能将系统的各个方面都描述得完整、准确且与环境相符合。环境发生了变化,开发者遇到了事先未预料到的困难,就需要改变需求来解决,因此规格说明难以完善。需求的变更以及通信中的模糊和误解,都会成为软件开发的障碍。为了解决上述问题,逐渐形成了软件系统快速原型化的概念。在工业产品中,原型就是“样机”,在软件开发中,原型则是软件的一个早期可运行的版本。它必须反映出最终系统的重要特性。3.5支持需求分析的原型化方法软件原型化方法:在获得一组基本需求说明后,经过快速分析构造出一个满足用户基本要求的小型的软件系统(原型系统)。用户运行该系统,从中得到感受和启发,进而对该系统做出反应和评价,然后开发者根据用户的意见对原型加以改进。随着不断地实验、纠错、使用、评价和修改,不断获得新的原型版本。如此反复,逐步减少分析和通话中的误解,弥补不足之处,进一步确定各种需求细节,适应需求的变更,从而提高最终产品的质量。3.5支持需求分析的原型化方法

3.5.1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论