软件工程教学做一体化教程(txt+pdf+epub+mobi电子书下载)


发布时间:2020-10-10 04:58:31

点击下载

作者:陈恒,王雅轩,景雨

出版社:清华大学出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

软件工程教学做一体化教程

软件工程教学做一体化教程试读:

前言

本书按照“教学做”一体化模式精编了软件工程的核心内容,以核心知识、能力目标、任务驱动和实践环节为模块组织本书的体系结构。核心知识体现最重要和实用的知识,是教师需要重点讲解的内容;能力目标提出学习核心知识后应具备的能力;任务驱动给出了教师和学生共同来完成的任务;实践环节给出了需要学生独立完成的实践活动。

全书共10章。第1章概括地介绍了软件工程基本概念,包括软件、软件危机、软件工程、软件生命周期与常用模型。第2~7章按软件生命周期的顺序讲解了各阶段的任务、过程、方法和工具,其中:第2章重点讲述了如何使用系统流程图和数据流图分别描绘系统的物理模型和逻辑模型;第3章是需求分析与建模的有关知识,包括需求分析过程、需求获取方法、结构化分析建模工具以及软件需求规格说明书的内容框架;第4和5章是有关软件设计的知识,详细地介绍了软件设计的原理、工具、方法和文档,包括模块化设计原理、软件结构及描绘它的图形工具、面向数据流的设计方法、面向数据结构的设计方法以及设计文档的内容框架;第6章是关于系统实现的知识,重点讲述了系统实现的原理、技术和方法,包括编码、单元测试、集成测试、白盒测试、黑盒测试以及JUnit单元测试工具;第7章是有关软件维护的知识,包括维护策略与方法;第8章系统地讲解了面向对象方法学的有关知识,包括面向对象的基本概念、面向对象分析建模的原理与方法、面向对象程序的设计模式以及设计模式的应用;第9章讲述了软件项目管理的概念、原理、方法与技术,包括成本管理、进度管理、配置管理、风险管理、过程管理以及管理工具Microsoft Project的应用;第10章由5个实验组成,其目的是训练综合运用知识的能力,巩固本书前9章所学知识,提高工程实践与管理的能力。

本书特别注重引导学生参与课堂教学活动,适合高等院校相关专业作为教、学、做一体化的教材,也可以供软件工程爱好者、从业者自学使用。编 者2013年4月  第1章软件工程基本概念主要内容● 软件危机与软件工程● 软件生命周期● 软件工程的常用模型

随着计算机科学技术的迅速发展,如何更有效地开发软件产品越来越受到人们的重视。同时,由于软件复杂程度的不断增加,开发和维护的一系列严重问题(软件危机)随之产生。软件工程正是致力于解决软件危机,研究如何更有效地开发和维护计算机软件的一门新兴学科。

本章将介绍软件工程的基本概念,包括软件、软件危机、软件工程、软件生命周期与常用模型等。1.1 软件危机与软件工程1.1.1 核心知识1.计算机软件的发展

随着计算机硬件性能的极大提高和计算机体系结构的不断更新,计算机软件系统更加成熟和更为复杂,从而促使计算机软件的角色发生了巨大的变化,其发展历史大致可以分为如下四个阶段。

第一阶段是20世纪50年代初期至20世纪60年代初期的十余年,是计算机系统开发的初级阶段。计算机软件实际上就是规模较小的程序,程序的编写者和使用者往往是同一个(或同一组)人。由于程序规模小,程序编写起来比较容易,也没有什么系统化的方法,对软件的开发过程更没有进行任何管理。这种个体化的软件开发环境使得软件设计往往只是在人们头脑中隐含进行的一个模糊过程,除了程序清单之外,没有其他文档资料。

第二阶段跨越了从20世纪60年代中期至20世纪70年代末期的十余年,多用户系统引入了人机交互的新概念,实时系统能够从多个源收集、分析和转换数据,从而使得进程的控制和输出的产生以毫秒而不是分钟来运行,在线存储的发展产生了第一代数据库管理系统。

第三阶段是20世纪70年代中期至20世纪80年代末期,分布式系统极大地提高了计算机系统的复杂性,网络的发展对软件开发提出了更高的要求,特别是微处理器的出现和广泛应用,孕育了一系列智能产品。硬件的发展速度已经超过了人们对软件的需求速度,使得硬件价格下降,软件的价格急剧上升,导致了软件危机的加剧,致使更多的科学家着手研究软件工程学的科学理论、方法和时限等一系列问题。软件开发技术的度量问题受到重视,最著名的有软件工作量估计COCOMO模型、软件过程改进模型CMM等。

第四阶段是从20世纪80年代末期开始的。这个阶段软件体系结构从集中式的主机模式转变为分布式的客户机/服务器模式(C/S)或浏览器/服务器模式(B/S),专家系统和人工智能软件从实验室走出来进入了实际应用,完善的系统软件、丰富的系统开发工具和商品化的应用程序的大量出现,以及通信技术和计算机网络的飞速发展,使得计算机进入了一个大发展的阶段。2.计算机软件的定义及特点

软件是计算机系统中与硬件相互依存的一部分,包括程序、数据及其说明文档。其中程序是能够完成特定功能的指令序列;数据是程序能正常操纵信息的数据结构;文档是与程序设计、开发及维护有关的各种图文资料。

软件同传统的工业产品相比,具有以下特点。(1)软件是一种逻辑产品。软件产品是看不见摸不着的,因而具有无形性,是脑力劳动的结晶,是以程序和文档的形式出现的,保存在计算机存储器和光盘介质上,通过计算机的执行才能体现其功能和作用。(2)软件产品的生产主要是研发,软件产品的成本主要体现在软件研发所需要的人力上。软件一旦研发成功,通过复制就产生了大量软件产品。(3)软件在使用过程中,没有磨损、老化的问题。但在使用过程中为了适应硬件环境以及需求的变化需要进行修改。当修改的成本变得难以接受时,软件即被抛弃。(4)软件的开发主要是脑力劳动。(5)软件会越来越复杂。软件涉及人类社会的各行各业、方方面面,软件开发常常涉及其他领域的专门知识,这对软件工程师提出了很高的要求。(6)软件的成本相当昂贵。软件研发需要投入大量、高强度的脑力劳动,成本非常高,风险也很大。(7)软件工作牵涉很多社会因素。软件的开发和运行涉及机构、体制和管理方式等问题,还会涉及人们的观念和心理等因素。3.软件危机与软件工程

20世纪60年代中期,大容量、高速度计算机的出现,使计算机的应用范围迅速扩大,软件开发急剧增长。软件系统的规模越来越大,复杂程度越来越高,软件可靠性问题也越来越突出。原来的个人设计、个人使用的方式不再能满足要求,迫切需要改变软件生产方式,提高软件生产率,软件危机爆发。事实上,软件危机几乎从计算机诞生的那一天起就出现了,只不过到了1968年,北大西洋公约组织的计算机科学家在联邦德国召开的国际学术会议上第一次提出了“软件危机”这个名词。

软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。这类问题绝不仅仅是“不能正常运行的软件”才具有的,几乎所有软件都不同程度地存在这类问题。概括来说,软件危机包含两方面问题:如何开发软件,以满足对软件日益增长的需求;如何维护数量不断膨胀的已有软件产品。

具体地说,软件危机主要有下列典型表现。(1)软件开发进度难以预测,软件开发成本难以控制。开发成本超出预算,实际进度比预订计划一再拖延。(2)用户对产品功能难以满足。(3)软件产品质量无法保证。(4)软件产品难以维护。(5)软件缺少适当的文档资料。(6)软件的成本不断提高。(7)软件开发生产率的提高赶不上硬件的发展和人们需求的增长。

之所以出现软件危机,其主要原因一方面是与软件本身的特点有关;另一方面是与软件开发和维护的方法不正确有关。

为了消除软件危机,既要有技术措施,又要有组织管理措施。软件工程正是从技术和管理两方面研究如何更有效地开发和维护计算机软件的一门新兴学科。

1968年秋季,第一届NATO(北约)会议上第一次提出了软件工程这个概念。概括地说,软件工程是一门指导计算机软件开发和维护的学科。它采用工程的概念、原理、技术和方法来开发与维护软件,把先进的、正确的管理理念和当前最好的技术结合起来,以最小的经济代价开发出高质量的软件并维护它。1.1.2 能力目标

了解计算机软件的发展历史,理解软件危机产生的原因,掌握软件、软件危机以及软件工程的概念。1.1.3 任务驱动

任务1:试想自己平时写的计算机应用程序,是计算机软件吗?

任务2:在平时生活中,你使用过哪些软件?它们出现过问题吗?请举例说明。1.1.4 实践环节

请上网查阅资料,了解软件工程与传统工程的区别是什么。1.2 软件生命周期1.2.1 核心知识

同任何事物一样,软件也有其孕育、诞生、成长、成熟和衰亡的生存过程,一般称为“软件生命周期”。软件工程采用的生命周期方法学就是从时间角度对软件开发和维护的复杂问题进行分解,把软件生命周期划分为软件定义(软件计划)、软件开发和软件维护3个时期,每个时期又划分为若干个阶段。每个阶段的任务相对独立,而且比较简单,便于不同人员分工协作,从而降低了整个软件开发工程的困难程度;在软件生存周期的每个阶段都采用科学的管理技术和良好的技术方法,而且在每个阶段结束之前都从技术和管理两个角度进行严格的审查,合格之后才开始下一阶段的工作,这就使软件开发工程的全过程以一种有条不紊的方式进行,保证了软件的质量,特别是提高了软件的可维护性。1.定义时期

定义时期主要是确定待开发的软件系统要做什么;确定系统开发是否成功;弄清系统的关键需求;估算软件开发的成本;制定软件开发进度表。这个时期的工作通常又称为系统分析,由系统分析员负责完成。定义时期通常进一步划分成三个阶段,即问题定义、可行性研究和需求分析。(1)问题定义

系统分析员通过对实际用户的调查,提出关于软件系统的性质、工程目标和规模的书面报告,同用户协商,达成共识。(2)可行性研究

系统分析员需要制订软件项目计划,包括确定工作域、风险分析、资源规定、成本核算、工作任务和进度安排等。(3)需求分析

对待开发的软件提出的需求进行分析并给出详细的定义。开发人员与用户共同讨论决定哪些需求是可以满足的,并对其加以确切的描述。这个阶段的一项重要任务是用正式文档准确地记录系统的需求,这份文档通常称为需求规格说明书。2.开发时期

开发时期主要是确定待开发的软件应怎样设计与实现,这个时期通常由概要设计、详细设计、编码和单元测试以及综合测试组成。总体设计与详细设计又称为系统设计,编码和单元测试与综合测试又称为系统实现。(1)概要设计

概要设计又称为总体设计。这个阶段的主要任务是设计程序的体系结构,即确定程序由哪些模块组成以及模块间的关系。(2)详细设计

详细设计又称为过程设计或模块设计。这个阶段的主要任务是设计出程序的详细规格说明,即确定实现模块功能所需要的算法和数据结构。(3)编码和单元测试

在编码和单元测试阶段,程序员根据实际需要选取一种高级程序设计语言,把详细设计的结果翻译成用选定的语言书写的程序,并且仔细测试编写出的每一个模块。(4)综合测试

综合测试阶段的主要任务是通过各种类型的测试及相应的调试,以发现功能、逻辑和实现上的缺陷,使软件达到预定的要求。3.维护时期

这个阶段的主要任务是进行各种修改,使系统能持久地满足用户的需要。维护阶段要进行再定义和再开发,所不同的是在软件已经存在的基础上进行。

通常有4类维护活动:改正性维护,即诊断和改正在使用过程中发现的软件错误;适应性维护,即修改软件使之能适应环境的变化;完善性维护,即根据用户的新要求扩充功能和改进性能;预防性维护,即修改软件为将来的维护活动预先准备。

在软件工程中的每一个阶段完成后,为了确保活动的质量,必须进行评审。为了保证系统信息的完整性和软件使用的方便,还要有相应的文档资料。各阶段需要编写的文档与软件生命周期的关系如表1.1所示。表1.1 软件生命周期各阶段与文档编制的关系

每个软件文档最终要回答如下问题。(1)为什么要开发与维护软件,即回答“为什么(why)”。(2)最终目标要满足哪些需求,即回答“做什么(what)”。(3)功能需求应如何实现,即回答“怎么做(how)”。(4)开发与维护软件计划由谁来完成,即回答“谁来做(who)”。(5)工作时间如何安排,即回答“何时做(when)”。(6)工作在什么环境中进行,所需信息从哪里来,即回答“何处做(where)”。

表1.1中的文档要回答哪些问题,请参考表1.2。表1.2 软件文档所回答的问题1.2.2 能力目标

理解软件生命周期每个阶段所完成的核心任务。1.2.3 任务驱动

任务1:试想:“在软件开发中,编写出正确的程序即可完成任务。”这句话正确吗?请说明理由。

任务2:为什么要把软件生命周期划分成若干个阶段?1.2.4 实践环节

假设你是一家软件公司的项目经理(PM),当让你手下的软件工程师们撰写详细设计文档时,有人说:“写这些文档没有用,我们直接写代码吧!”怎么反驳他?1.3 常用的软件开发模型1.3.1 核心知识

软件开发模型是贯穿整个软件生命周期(开发、运行和维护)所实施的全部工作和任务的结构框架,它描述了软件开发过程各阶段之间的关系。目前,常见的软件开发模型有瀑布模型、快速原型模型、增量模型、螺旋模型、喷泉模型、第四代技术过程模型等。下面简单介绍瀑布模型与快速原型模型。1.瀑布模型

瀑布模型即生存周期模型,其核心思想是按工序将问题简化,将功能的实现与设计分开,便于分工协作,即采用结构化的分析与设计方法将逻辑实现与物理实现分开。瀑布模型规定了软件生命周期各阶段的工作自上而下、相互衔接的固定次序,如同瀑布流水逐级下落。采用瀑布模型的软件过程如图1.1所示。图1.1 瀑布模型

瀑布模型是最早出现的软件开发模型,在软件工程中占有极其重要的地位,它提供了软件开发的基本框架。瀑布模型的本质是一次通过,即每次活动只执行一次,最后得到软件产品,也称为“线性顺序模型”或者“传统生命周期”。其过程是从上一项活动接收该项活动的工作对象作为输入,利用这一输入实施该项活动应完成的内容,给出该项活动的工作成果,并作为输出传给下一项活动。同时评审该项活动的实施,若确认,则继续下一项活动;否则返回前面,甚至更前面的活动。

瀑布模型有利于大型软件开发过程中人员的组织及管理,有利于软件开发方法和工具的研究与使用,从而提高了大型软件项目开发的质量和效率。然而软件开发的实践表明,上述各项活动之间并非完全是自上而下且呈线性图式的,因此瀑布模型存在严重的缺陷。

瀑布模型软件开发方法适合在软件需求比较明确、开发技术比较成熟、工程管理比较严格的场合下使用,如二次开发或升级型的项目。2.快速原型模型

快速原型模型的第一步是快速建立一个能满足用户基本需求的原型系统,使用户通过这个原型初步表达出自己的需求,并通过反复修改、完善,逐步靠近用户的全部需求,最终形成一个完全满足用户需求的新系统。

通过建立原型,可以更好地和客户进行沟通,澄清一些模糊需求,并且对需求的变化有较强的适应能力。原型模型可以减少技术、应用的风险,缩短开发时间,减少费用,提高生产率,通过实际运行原型,提供了用户直接评价系统的方法,促使用户主动参与开发活动,加强了信息的反馈,促进了各类人员的协调交流,减少误解,能够适应需求的变化,最终有效提高软件系统的质量。

快速原型模型软件开发方法适用于软件需求不明确的情况。从图1.2可以看出,快速原型模型的开发步骤如下。图1.2 快速原型模型(1)快速分析

在分析人员与用户的密切配合下,迅速确定系统的基本需求,根据原型所要体现的特征描述基本需求以满足开发原型的需要。(2)构造原型

在快速分析的基础上,根据基本需求说明尽快实现一个可行的系统。这里要求具有强有力的软件工具的支持,并忽略最终系统在某些细节上的要求,如安全性、坚固性、异常处理等,主要考虑原型系统能够充分反映所要评价的特性,而暂时删除一切次要内容。(3)运行原型

这是发现问题、消除误解、开发者与用户充分协调的一个步骤。(4)评价原型

在运行原型的基础上,考核评价原型的特性,分析运行效果是否满足用户的愿望,消除和纠正过去交互中的误解与分析中的错误,增添新的要求,并满足因环境变化或用户的新想法引起的系统变动需求,提出全面的修改意见。(5)修改类型

根据评价原型的活动结果进行修改。若原型未满足需求说明的要求,就说明对需求说明存在不一致的理解或实现方案不够合理,此时应根据明确的要求迅速修改原型。1.3.2 能力目标

理解常用的软件开发模型的特点与开发流程。1.3.3 任务驱动1.任务的主要内容

假设有这样的软件开发案例,客户(C)与开发人员(D)对话如下。

C:我想找你帮我开发一个图书销售网站,可以吗?

D:就是和××网站类似的吗?

C:差不多吧,功能可能不需要那么强大,具体什么样我也不是很清楚。

D:要不这样吧!我给你先做一个雏形,你看看行不行。

C:好吧,多长时间给我看看。

D:两周吧。

C:好的。

两周过去了,开发人员拿着网站的雏形来找客户。

D:看看你要的网站是不是这样的?

C:嗯,我试一试。哦?怎么没有对图书的销量进行排序啊?

于是,开发人员回去了,几天后拿着改好的网站再找客户,客户看完后又说:怎么随便对书进行评论啊?为了客观,不买书的会员不让评论吧。

开发人员心想:Oh,my God!顾客就是上帝!于是,开发人员又回去了……

就这样,客户反反复复地提出新的要求,开发人员不断地修改网站。最后,客户终于满意了图书销售网站的功能。

请问该图书销售网站的开发过程是属于哪种开发模型?2.任务分析

从上述案例分析得知:(1)客户并不是很清楚自己网站的需求;(2)开发人员快速开发出网站的雏形;(3)客户运行雏形,提出新的需求;(4)开发人员修改网站的雏形;(5)再运行雏形、再提出需求、再修改雏形,一直到客户满意为止。

因此,该案例的开发过程应属于快速原型模型。3.任务小结或知识扩展

瀑布模型中每个阶段的结果是一个或多个经过核准的文件。直到上一个阶段完成,下一阶段才能启动。在实际过程中,这些阶段经常是重叠的、彼此间有信息交换的。在设计阶段,需求中的问题被发现;在编程阶段,设计问题被发现,以此类推。软件过程不是一个简单的线性模型,它包括开发活动的多个反复。因此它的缺点是:委托事项需要在过程的早期阶段清晰给出,响应用户需求的变更比较困难。快速原型模型就是为了克服瀑布模型的缺点而提出来的。

总之,当需求不太明确的时候,应采用快速原型模型;当需求比较明确的时候,应采用瀑布模型。由于瀑布模型反映了工程的实际情况,所以在大型系统工程项目中,软件开发仍采用瀑布模型。4.任务的参考答案【答案】 快速原型模型1.3.4 实践环节

分析如下软件开发案例,判断该案例的开发过程是属于哪种软件开发模型。

某个老师(T)想要考查一个同学(S)的学习情况和技术水平,于是交给该学生一个任务。

1)两个人的对话

T:我想要一个单词统计软件,统计功能包括:单词总数、单个单词重复出现的个数,并按字典顺序排序。你能做这样一个软件吗?

S:就是这样的软件吗?如,一篇文章内容为:How are you?Fine,thank you.统计结果为:单词总数6,are 1 Fine 1 How 1 thank 1 you 2。

T:嗯,可以。

S:这个我上网查查相关资料,应该没有问题,很简单的。

T:好的,给你10天时间,两天之后你再来一趟,讲一下你的工作进度。

2)工作清单

这位同学非常明白老师的意图,回去后想了一下,列出了一个清单,工作清单如下。(1)功能

① 统计单词总数。

② 统计单个单词的数目。(2)其他说明

① 界面尽量简洁,容易操作。

② 处理速度尽量快。

③ 开发文档尽量齐全。(3)开发工具

Eclipse 3.7(4)开发环境

普通PC

Windows 7/Windows XP系统

JDK1.5(5)工作量

① 研究一下文档(存放文章内容)文件的格式。

② 设计一个解析器类,解析这些文件格式。

③ 设计一个文档类,实现读取功能。

④ 设计一个统计类,实现统计功能。

⑤ 设计一个视图类,实现按要求显示功能。

3)案例的实际情况

一切顺利,学生S按期交付了软件,经过一两周的检查、试用、修改、完善后,该软件在老师那里成为得心应手的工具。1.4 小结

生命周期方法学把软件生命周期从时间角度划分为软件定义、软件开发和软件维护三个时期,每个时期又划分为若干个阶段。每个阶段结束之前都从技术和管理两个角度进行严格的审查。

瀑布模型有利于大型软件开发过程中人员的组织及管理,也有利于提高大型软件项目开发的质量和效率。然而实践表明,软件开发的各项活动之间并非完全是自上而下且呈线性图式的,因此瀑布模型存在严重的缺陷。

快速原型模型就是为了克服瀑布模型的缺点而提出来的。它通过快速建立一个能满足用户基本需求的原型系统,使用户通过这个原型初步表达出自己的要求,并通过反复修改、完善,逐步靠近用户的全部需求,最终形成一个完全满足用户需求的新系统。习题1一、单项选择题

1.软件是( )。A.处理对象和处理规则的描述B.程序C.程序、数据及文档D.计算机系统

2.下列选项中,( )是软件开发中存在的不正确的观念、方法。A.重编程、轻需求B.重开发、轻维护C.重技术、轻管理D.以上三条都正确

3.下列哪个阶段不属于软件生命周期的三大阶段?( )A.计划阶段B.开发阶段C.编码阶段D.维护阶段

4.开发软件所需高成本和产品的低质量之间有着尖锐的矛盾,这种现象称为( )。A.软件工程B.软件周期C.软件危机D.软件产生

5.以下属于软件危机典型表现的是( )。A.软件开发进度难以预测B.软件产品难以维护C.软件缺少适当的文档资料D.以上三条都正确

6.计算机系统就是( )。A.主机、显示器、硬盘、软驱、打印机等B.CPU、存储器、控制器、I/O接口及设备C.计算机硬件系统和软件系统D.计算机及其应用系统

7.以下对软件工程的解释正确的是( )。A.软件工程是研究软件开发和软件管理的一门工程科学B.软件工程是将系统化的、规范化的、可度量化的方法应用于软件开发、运行和维护的过程C.软件工程是把工程化的思想应用于软件开发D.以上三条都正确

8.软件生存周期包括问题定义、可行性分析、需求分析、系统设计、编码和单元测试、( )、维护等活动。A.应用B.检测C.综合测试D.以上答案都不正确

9.一个软件从开始计划到废弃为止,称为软件的( )。A.开发周期B.生命周期C.运行周期D.维护周期

10.软件定义时期的主要任务是:分析用户要求、新系统的主要目标以及( )。A.开发软件B.开发的可行性C.设计软件D.运行软件二、判断题

1.软件就是计算机系统中的程序、数据及其文档。 ( )

2.程序是指计算机为完成特定任务而执行的指令的有序集合。 ( )

3.数据是指被程序处理的信息。 ( )

4.软件工程是为研究克服软件危机应运而生的。 ( )

5.软件危机是20世纪60年代以前产生的。 ( )

6.软件缺少适当的文档资料属于软件危机现象之一。 ( )

7.软件工程是把工程化的思想应用于软件开发。 ( )

8.软件工程是研究软件开发和软件管理的一门管理科学。 ( )

9.一位好的开发人员应具备的素质和能力不包括具有良好的书面和口头表达能力。 ( )

10.软件工程学是理论研究,没有实际用途。 ( )

11.软件生存周期包括需求分析、系统设计、程序设计、测试、维护五个阶段。 ( )

12.软件生存周期是指某一软件从被提出并着手开始实现,直到软件完成其使命被废弃为止的全过程。 ( )三、简答题

1.什么是软件危机?它有哪些典型表现?如何解决软件危机?

2.什么是软件?什么是软件工程?软件生命周期有哪几个时期?每个时期又分哪几个阶段?

3.常用的软件开发模型有哪几个?试比较瀑布模型和快速原型模型的优缺点,并说明每种模型的适用范围。  第2章可行性研究主要内容● 可行性研究的目的、任务、要素及过程● 可行性研究报告的编写● 系统流程图● 数据流图● 数据字典● 成本/效益分析

对于确定的问题,判断是否值得解决,能否解决,是可行性研究的根本任务。例如,癞蛤蟆想吃天鹅肉,它日复一日地坐在井底胡思乱想,最终老去也没有吃到天鹅肉。作为可行性分析员不能像癞蛤蟆那样不切实际,我们要果断、务实。因此,可行性研究的目的是用极少的代价在最短的时间内确定问题是否能够解决。

可行性研究是运用多门学科(技术科学、社会学、经济学及系统工程学等)对一项工程项目的必要性、可行性及合理性进行技术经济论证的综合科学。2.1 可行性研究概述2.1.1 核心知识1.可行性研究的目的及任务

在澄清问题之后,分析员应该导出软件系统的逻辑模型。然后依据逻辑模型,探索出若干供选择的系统实现方案。每个实现方案都应该仔细研究其可行性。

在软件项目开发过程中,只要资源和时间不加以限制,所有的项目基本都可以成功开发,然而,资源和时间不可能是无限的,因此,尽早对软件项目的可行性做出谨慎的评估是十分必要的。

可行性研究的目的是用极少的代价在最短的时间内确定被开发的软件能否开发成功,以避免盲目投资带来的巨大损失;可行性研究的目的不是解决问题,而是确定问题是否值得解决。

可行性研究的任务是从技术、经济、应用以及法律等方面分析应解决的问题是否有可行的解,从而确定该软件系统是否值得开发。可行性研究最根本的任务是对以后的行动方针提出建议。当问题没有可行的解时,分析员应该建议停止项目的开发,以避免时间、资源、人力和金钱的浪费。当问题值得解时,分析员应该推荐一个较好的解决方案,并且为工程制订一个初步的计划。2.可行性研究的要素

一般来说,软件领域的可行性研究主要考虑五个要素:经济、技术、社会、法律以及操作。(1)经济可行性。进行开发成本估算及可能取得的经济效益评估,确定待开发系统是否值得投资开发。(2)技术可行性。对待开发的系统进行功能、性能和限制条件分析,确定使用现有的技术能否实现该系统。(3)社会可行性。社会的可行性至少包括两种因素:市场与政策。

市场又分为未成熟的市场、成熟的市场和将要消亡的市场。涉足未成熟的市场要冒很大的风险,要尽可能准确地估计潜在的市场有多大?自己能占多少份额?多长时间能实现?挤进成熟的市场,虽然风险不高,但利润也不高。

政策对软件公司的生存与发展影响非常大。政策不当将阻碍软件公司的健康发展,最怕的是政府干预企业的正当行为。(4)法律可行性。研究在系统开发过程中可能涉及的各种合同、侵权、责任以及各种与法律相抵触的问题。(5)操作可行性。系统的操作方式在用户组内能否行得通。3.可行性研究的过程

如何进行可行性研究呢?典型的可行性研究步骤如图2.1所示。(1)复查系统规模和目标

分析员对关键人员进行调查访问,认真阅读和分析有关材料,以便进一步确认系统的规模和目标,改正有歧义或错误的描述,确保解决问题的正确性。(2)研究目前正在使用的系统

对现有系统功能特点的充分了解是成功开发新系统的前提。通过图2.1 可行性研究的步骤收集、研究和分析现有系统的文档资料,实地考查现有系统,总结出现有系统的优缺点。在此基础上,访问关键人员,描绘现有系统的高层系统流程图(见2.3节),与有关人员一起审查该系统流程图是否正确。最后了解并记录现有系统和其他系统之间的接口情况,这是设计新系统的重要约束条件。(3)导出新系统的高层逻辑模型

如图2.2所示,软件系统的设计过程通常是从现有的物理系统出发,导出现有系统的逻辑模型,再根据现有系统的逻辑模型,设想新系统的逻辑模型,最后根据新系统的逻辑模型实现新的物理系统。图2.2 导出新系统的逻辑模型

通过第二步的工作,分析员对目标系统应该具有的基本功能和所受的约束条件已有一定了解。这时能够使用数据流图(见2.4节)描绘数据在系统中流动和处理情况,从而表达出他对新系统的设想。为了把新系统更清晰准确地描绘,还应该有一个初步的数据字典(见2.4节),定义新系统中使用的数据。新系统的逻辑模型由数据流图和数据字典共同定义,以后可以从该逻辑模型出发设计与开发新系统。(4)重新定义问题

新系统的逻辑模型实质上表述了分析员对新系统必须做什么的看法,但是用户是否也有相同的看法呢?因此,分析员应该和用户一起再次复查问题定义、工程规模和目标。这个步骤主要是发现和改正分析员对问题理解的错误或补充用户遗漏的要求。

如图2.1所示,可行性研究的前四个步骤实质上构成一个循环。分析员定义问题,分析问题,导出一个试探性的解;在此基础上再次定义问题,分析问题,修改解;继续这个循环过程,直到导出的逻辑模型完全符合系统目标。(5)导出和评价供选择的解法

分析员从他提出的系统逻辑模型出发,导出若干个物理解法供比较和选择。导出供选择的解法的最简单的途径,是从技术角度出发考虑方案的可行性。当从技术角度提出若干个可能的物理解法之后,根据技术可行性初步排除一些不可能实现的解法。其次,可以考虑用户操作方面的可行性,去掉其中从操作方式看用户不能接受的解法。再次,应该考虑经济方面的可行性。最后,应该为每个在技术、操作和经济等方面都可行的解法制定实现进度表,这个进度表通常只需要估计生命周期每个阶段的工作量。(6)推荐行动方案

分析员根据可行性研究结果需要做出一个关键性决定:是否继续进行新系统的开发。分析员必须清晰地表明他对这个关键性决定的建议,如果他认为值得继续进行系统的开发,那么他应该选择一种最好的解决方案,并且说明理由。另外,分析员还要考虑系统的成本、效益问题,因为使用部门的负责人主要根据经济上是否可行决定是否投资。(7)草拟开发计划

分析员应该进一步为推荐的系统草拟一份开发计划,除了项目进度表之外还应该估计人员(系统分析员、软件工程师、程序员、资料员等)和资源(计算机硬件、软件等)的需求情况。另外,还应该估计系统生命周期每个阶段的成本。最后,给出下一阶段(需求分析)的详细进度表和成本估计。(8)书写文档,提交审查

分析员需要把上述可行性研究各个步骤的结果写成清晰无误的文档(见2.2节),请用户、使用部门的负责人以及评审组仔细审查,以决定是否继续这个系统的开发以及是否接受分析员推荐的解决方案。2.1.2 能力目标

掌握可行性研究的目的、任务以及要素,理解可行性研究的步骤。2.1.3 任务驱动1.任务的主要内容

某学校需要建立一个网上作业提交与管理系统,其基本功能描述如下。(1)账号和密码。任课老师用账号和密码登录系统后,提交所有选课学生的名单。系统自动为每个选课学生创建登录系统的账号和密码。(2)作业提交。学生使用账号和密码登录系统后,可以向系统申请所选课程的作业。系统首先检查学生的当前状态,如果该学生还没有做过作业,则从数据库服务器申请一份作业。若申请成功,则显示需要完成的作业。学生需在线完成作业,完成后单击“提交”按钮上交作业。(3)在线批阅。系统自动在线批改作业,显示作业成绩,并将该成绩记录在作业成绩统计文件中。

假如你是一个系统分析员,需要研究上述系统的可行性,请问应该从哪几个方面研究该系统的可行性?2.任务分析

我们从核心知识中了解到软件领域的可行性研究主要考虑五个要素:经济、技术、社会、法律以及操作。3.任务小结或知识扩展

该任务主要告诉读者应该着重理解可行性研究的必要性,以及它的目的、任务和步骤,在此基础上才能进一步学习具体方法和工具。4.任务的参考答案【答案】 经济、技术、社会、法律以及操作2.1.4 实践环节

请问在软件开发的早期阶段为什么要进行可行性研究?可行性研究又有哪些步骤?2.2 可行性研究报告2.2.1 核心知识

可行性研究报告是从事一种经济活动(投资)之前,双方要对经济、技术、生产、供销直到社会各种环境、法律等各种因素进行具体调查、研究、分析,确定有利和不利的因素,项目是否可行,估计成功率高低、经济效益和社会效果,为决策者和主管机关审批的上报文件。GB/T 8567—2006(计算机软件文档编制规范)给出了可行性研究报告的内容框架,如图2.3所示。图2.3 可行性研究报告的内容框架

图2.3只是列出了可行性研究报告的内容框架,具体细节内容可以参考GB/T 8567—2006标准。2.2.2 能力目标

理解可行性研究报告的编写内容要求,了解可行性研究报告的内容框架。2.2.3 任务驱动

任务:上网查阅图书管理系统的可行性研究报告。2.2.4 实践环节

按照可行性研究报告的内容框架,将所查阅到的图书管理系统的可行性研究报告进行完善。2.3 系统流程图2.3.1 核心知识

我们在2.1节中了解到,在进行可行性研究时需要分析现有的系统,并概括地表达对现有系统的认识;根据对现有系统的认识设想新系统的逻辑模型,然后需要把新系统的逻辑模型转变成物理模型,因此需要描绘未来的物理系统的概貌。怎样概括地描绘一个物理系统呢?这里介绍一个工具——系统流程图。1.系统流程图的定义

系统流程图是描绘物理系统的图形工具,基本思想是用图形符号以黑盒子形式描绘系统里面的每个部件(程序、文档、数据库、表格、人工过程等)。系统流程图表达的是数据信息在系统各部件之间流动的情况,而不是对数据信息进行加工处理的控制过程,因此尽管它使用的某些符号和程序流程图中的符号相同,但它是物理数据流程图而不是程序流程图。2.系统流程图的符号

系统流程图的符号如表2.1和表2.2所示。当用概括的方式抽象地描绘一个物理系统时,仅使用表2.1中列出的基本符号就足够了,其中每个符号表示系统中的一个部件。当需要更具体地描绘一个物理系统的时候,还需要使用表2.2中列出的系统符号。表2.1 基本符号符号名称说明能改变数据值或数据位置的加工处理或部件,如程序、处理机、人工加工等都是处理表示输入或输出(或既输入又输输入/输出出),是一个广义的不指明具体设备的符号指出转到图的另一部分或从图的连接另一部分转来,通常在同一页上换页(离指出转到另一页图上或由另一页页)连接图转来用来连接其他符号,指明数据流数据流动方向表2.2 系统符号符号名称说明表示用磁盘输入或输出,也可表磁盘示存储在磁盘上的文件或数据库表示用磁鼓输入或输出,也可表磁鼓示存储在磁鼓上的文件或数据库表示用磁带输入或输出,或表示磁带一个磁带文件表示用穿孔卡片输入或输出,也穿孔卡片可表示一个穿孔卡片文件表示打印输出,也可表示用打印文档终端输入数据表示任何种类的联机存储,包括联机存储磁盘、磁鼓和海量存储器件等CRT终端或类似的显示部件,可显示用于输入或输出,也可表示既输入又输出手动输入数据的脱机处理,例手动输入如,填写表格手动完成的处理,例如,出纳在手动操作账单上签字辅助操作使用设备进行的脱机操作终止表示一个流程的终结3.系统流程图的实例

下面以某高校考试系统为例,说明系统流程图的使用。【例2.1】 考试业务流程:命题人员依据大纲在试题库中抽取考题,形成试卷;教务部门印制试卷,安排日程及监考人员,根据日程安排学生考试,完成答卷;教师批改答卷,成绩提交给成绩管理子系统处理。根据分析画出考试系统流程图如图2.4所示。图2.4 考试系统的系统流程图2.3.2 能力目标

灵活使用系统流程图概括地描绘一个物理系统。2.3.3 任务驱动1.任务的主要内容

某航空公司为给旅客乘机提供方便,需要开发一个旅行社机票预订系统。业务流程如下。(1)各个旅行社把预订机票信息输入到系统中,系统为旅客安排航班。(2)当旅客交付了预订金后,系统打印出取票通知和账单给旅客。(3)旅客在飞机起飞前一天凭取票通知和账单交余款取票,系统核对无误即打印机票给旅客。

请完善该系统的系统流程图(如图2.5所示)。图2.5 机票预订系统的系统流程图2.任务分析

把机票预订系统的业务流程细分为:①预订机票信息输入到系统中;②系统为旅客安排航班;③旅客交付预订金;④系统打印取票通知和账单给旅客;⑤旅客凭取票通知和账单,交款取票;⑥系统核对无误即打印机票给旅客。

根据业务流程的细分可知:①应该是取票通知和账单数据;②应该是核对处理程序。3.任务小结或知识扩展

系统流程图是在系统分析员接触实际系统时,对未来系统的一种描述。这种描述是相对简单且完全的,涉及未来系统中使用的处理部件,如磁盘、文档、用户输入以及处理过程的先后顺序表示等。系统流程图的习惯画法是使信息在图中自顶向下或从左到右流动。4.任务的参考答案【答案】

②2.3.4 实践环节

某高校教材订购系统可细化为两个子系统:销售系统和采购系统。

销售系统的工作流程为:首先由教师或学生提交购书单,经教材发行人员审核(人工处理),确认是有效购书单后,开发票、登记并返给教师或学生领书单,教师或学生即可拿着领书单去书库找教材发行人员领书。若是脱销教材则生成缺书通知单。

采购系统的工作流程为:汇总缺书通知单,发采购单给书库采购人员;一旦新书入库,即给销售系统发送进书通知,销售系统接到进书通知后给教材发行人员发送进书通知单。

请画出教材订购系统的系统流程图。2.4 数据流图及数据字典2.4.1 核心知识

在2.1节中了解到,为了清晰地表达系统分析员对新系统的设想,需要使用数据流图和数据字典描绘数据在系统中的流动和处理情况。下面简要介绍在可行性研究阶段要用到的工具数据流图和数据字典。1.数据流图

数据流图(DFD)是一种描述“分解”的图形化技术,它用直观的图形清晰地描绘了系统的逻辑模型,图中没有任何具体的物理元素,它仅仅描绘信息流和数据在软件中流动和处理的逻辑过程。设计数据流图时只考虑系统必须完成的基本逻辑功能,完全不考虑怎样具体地实现这些功能。

1)数据流图的符号

数据流图有四种基本符号:正方形(或立方体)、圆角矩形(或圆形)、开口矩形(或两条平行线)以及箭头,如表2.3所示。表2.3 数据流图的基本符号符号名称说明软件系统外部环境中的实体(包数据的源点括人员、组织或其他软件系统),或或终点一般只出现在数据流图的顶层图中或加工是对数据进行处理的单元,加工或处理它接收一定的数据输入,对其进行处理,并产生输出

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载