1、软件工程与实践第1章 软件工程概述1.1 1.1 软件软件1.1.1 1.1.1 软件的定义与特征软件的定义与特征1 1软件的定义软件的定义 程序设计阶段(程序设计阶段(1946194619561956年),年),“软件软件”的含义就是的含义就是“程程序序”。程序系统阶段(程序系统阶段(1956195619681968年)。这个阶段的生产方式是作坊年)。这个阶段的生产方式是作坊式的式的 小集团合作生产,生产工具是高级语言,开发方法仍就小集团合作生产,生产工具是高级语言,开发方法仍就靠个人技巧,但开始提出结构化方法。靠个人技巧,但开始提出结构化方法。该阶段的后期,随着软件需求量、规模及复杂度的增
2、大,生该阶段的后期,随着软件需求量、规模及复杂度的增大,生产作坊的方式已经不能够适应软件生产的需要,出现了所谓的产作坊的方式已经不能够适应软件生产的需要,出现了所谓的“软件危机软件危机”。这个阶段。这个阶段“软件软件”的含义就是的含义就是“程序和使用说明程序和使用说明书书”。软件工程阶段(软件工程阶段(19681968年至今)。此阶段的主要任务是为了克年至今)。此阶段的主要任务是为了克服软件危机,适应软件发展的需要,而在软件生产中采用服软件危机,适应软件发展的需要,而在软件生产中采用“工程工程化的生产化的生产”方式进行开发。这个阶段方式进行开发。这个阶段“软件软件”的含义就是的含义就是“程序、
3、程序、文档、数据文档、数据”。2 2软件的特征软件的特征 有计算机软件就有计算机硬件,二者共同组成计算机系统。有计算机软件就有计算机硬件,二者共同组成计算机系统。软件的特征是:软件的特征是:(1 1)软件是一种逻辑实体。它的存在是保存在一种媒介)软件是一种逻辑实体。它的存在是保存在一种媒介上面,例如:纸张,磁盘,内存,磁带,光盘等。上面,例如:纸张,磁盘,内存,磁带,光盘等。(2 2)软件是绿色产品,没有污染,它的运行不会出现磨)软件是绿色产品,没有污染,它的运行不会出现磨损和对空气、土地等对人体有害的物质。损和对空气、土地等对人体有害的物质。(3 3)软件的研制是一种高智力劳动。计算机软件既
4、是作)软件的研制是一种高智力劳动。计算机软件既是作品,又是工具,是作品性与工具性紧密结合的智力成果。品,又是工具,是作品性与工具性紧密结合的智力成果。(4 4)计算机软件开发工作最大、成本高,但复制容易、)计算机软件开发工作最大、成本高,但复制容易、成本极低。计算机软件是开发者智力劳动的结晶,具有原成本极低。计算机软件是开发者智力劳动的结晶,具有原创性质。创性质。1.1.2 软件系统软件系统 数据通信软件 数据通信软件是指按着网络协议的要求,完成通信功能的软件。网络操作系统 网络操作系统是指能够控制和管理网络资源的软件。网络应用软件(4)网络信息系统 网络信息系统是指以计算机网络为基础开发的信
5、息系统。1.2 软件工程的知识体系 1.3.1 1.3.1 软件工程的产生软件工程的产生 当软件开发技术的进步不能跟上硬件技术的进步,当软件开发技术的进步不能跟上硬件技术的进步,未能满足发展的要求,致软件开发中遇到的问题找不到解未能满足发展的要求,致软件开发中遇到的问题找不到解决的办法,使问题积累起来,形成了尖锐的矛盾,因而导决的办法,使问题积累起来,形成了尖锐的矛盾,因而导致了软件危机。主要表现为:致了软件危机。主要表现为:经费预算经常突破,完成时间一再拖延;经费预算经常突破,完成时间一再拖延;开发的软件不能满足用户要求;开发的软件不能满足用户要求;开发的软件可维护性差;开发的软件可维护性差
6、;开发的软件可靠性差。造成软件危机的原因是由于软开发的软件可靠性差。造成软件危机的原因是由于软件产品本身的特点以及开发软件的方式、方法、技术和人件产品本身的特点以及开发软件的方式、方法、技术和人员引起的。员引起的。1.3.2软件工程的定义 美国电气与电子工程师学会美国电气与电子工程师学会IEEEIEEE对软件工程的对软件工程的定义:定义:(1 1)应用系统化的、学科化的、定量的方法来开)应用系统化的、学科化的、定量的方法来开发、运行和维护软件,即,将工程应用到软件;发、运行和维护软件,即,将工程应用到软件;(2 2)对()对(1 1)中的各种方法的研究。)中的各种方法的研究。软件工程是一门研究
7、用工程化方法构建和维护有效的、实用的和高质量的软件的学科。它应用计算机科学、数学及管理科学等原理,采用工程的概念、原理、技术和方法来开发与维护软件,把正确的管理技术和目前最有效的技术与方法结合起来去开发、生产、维护软件,以达到提高质量,降低成本的目的。软件工程的三要素软件工程的三要素 软件工程的方法、工具和过程构成了软件工程软件工程的方法、工具和过程构成了软件工程的三要素。的三要素。(1)软件工程方法。软件工程方法。(2)软件工具。软件工具。(3)软件工程过程。软件工程过程。1.4 软件工程的原则(1)抽象性。(2)信息隐蔽性。(3)模块化。(4)局部化(5)确定性(6)一致性(7)完备性(7
8、)可验证性。1.5 软件工程的目标 软件工程的目标可以用四个字总结:多、快、软件工程的目标可以用四个字总结:多、快、好、省。好、省。“多多”指的是功能齐全;指的是功能齐全;“快快”指的是提高生产率,按照项目计划提指的是提高生产率,按照项目计划提前完成任务;前完成任务;“好好”指的是取得较好软件性能的,满足用户指的是取得较好软件性能的,满足用户需要的高质量软件产品;需要的高质量软件产品;“省省”指的是节省成本。指的是节省成本。1.6 软件工程的基本原理 1 用分阶段的生命周期计划严格管理。2 坚持进行阶段评审 3 实行严格的产品控制。4 采用现代程序设计技术。5结果可审查 6 开发小组的人员应少
9、而精。7 软件实践不断改进。1.7 软件工程思维的培养 1考虑整个项目或者产品的市场前景。2从用户的角度来考虑问题。3从技术的角度考虑问题。4合理进行模块的分割。5人员的组织和调度。6开发过程中文档的编写。7充分考虑实施时可能遇到的问题。再见!第2章 软件生命周期与开发模型 2.1 软件生命周期软件生命周期 软件生存周期一般划分为三个阶段:软件生存周期一般划分为三个阶段:(1)计划时期;)计划时期;(2)开发时期;开发时期;(3)运行与维护时期。运行与维护时期。2.1.1计划时期 这个时期的任务是:这个时期的任务是:(1 1)确定软件开发工程必须完成的总目标;)确定软件开发工程必须完成的总目标
10、;(2 2)确定工程的可行性;)确定工程的可行性;(3 3)导出实现工程目标应该采用的策略及软件)导出实现工程目标应该采用的策略及软件必须具有的功能;必须具有的功能;(4 4)估算完成该项开发工程需要的资源和成本,)估算完成该项开发工程需要的资源和成本,并且制定工程进度表。并且制定工程进度表。可行性研究的步骤一般有如下几个步骤:1关键人员访谈:可行性研究分析人员找到项目干系人中的关键人员,了解如下几方面的内容:(1)项目的规模有多大;(2)项目目标是什么;(3)目前系统的信息来源于何处;(4)目前系统的优点和缺点;(5)目前系统与国内外同类产品的比较,优势和劣势分别是什么。2找出逻辑模型:3找
11、出多种方案。4写出可行性研究报告。5写出需求分析报告。6进行审查。2.1.2 开发时期 一个软件的开发包括四个步骤:一个软件的开发包括四个步骤:(1)需求分析;)需求分析;(2)概要设计;)概要设计;(3)详细设计;)详细设计;(4)编码和测试。这两个过程是)编码和测试。这两个过程是同步进行的。同步进行的。项目的可行性研究 项目立项 项目组的成立 需求分析,解决方案 项目总体设计(概要设计)详细设计(数据库设计等)编码 项目评审 项目评审 项目评审 需求分析报告 概要设计报告 详细设计报告 项目启动通知单 2.1.3 运行与维护时期 软件的维护一般包括改正性维护、适应性维护、完善性维护和预防性
12、维护等四个方面。2.2 软件开发方法综述 2.2.1 2.2.1 结构化方法结构化方法 结构化开发方法是由E.Yourdon 和 L.L.Constantine 提出的,即所谓的SASD 方 法,也可称为面向功能的软件开发方法或面向数据流的软件开发方法。Yourdon方法是80年代 使用最广泛的软件开发方法。它首先用结构化分析(SA)对软件进行需求分析,然后用结构化设计(SD)方法进行总体设计,最后是结构化编程(SP)。它给出了两类典型的软件结构(变换型和事务型)使软件开发的成功率大大提高。2.2.2 面向数据结构的软件开发方法 Jackson方法是最典型的面向数据结构的软件开发方法,Jack
13、son方法把问题分解为可由三种基本结构形式表示的各部分的层次结构。三种基本的结构形式就是顺序、选择和重复。三种数据结构可以进行组合,形成复杂的结构体系。这一方法从目标系统的输入、输出数据结构入手,导出程序框架结构,再补充其它细节,就可得到完整的程序结构图。2.2.3 面向问题的分析法(PAM)面向问题的分析法(面向问题的分析法(PAM,Problem Analysis Method)是)是80年代末由日立公司年代末由日立公司提出的一种软件开发方法。提出的一种软件开发方法。它的基本思想它的基本思想是考虑到输入、输出数据结构,指导系统是考虑到输入、输出数据结构,指导系统的分解,在系统分析指导下逐步
14、综的分解,在系统分析指导下逐步综 合。合。这一方法的具体步骤是:从输入、输出这一方法的具体步骤是:从输入、输出数据结构导出基本处理框;分析这些处理数据结构导出基本处理框;分析这些处理框之间的先后关系;按先后关系逐步综合框之间的先后关系;按先后关系逐步综合处理框,直到画出整个系统的处理框,直到画出整个系统的PAD图图2.2.4 面向对象的开发方法 面向对象系统采用了自底向上的归纳、自顶向下的分解的方法,它通过对对象模型的建立,能够真正建立基于用户的需求,而且系统的可维护性大大改善。当前业界关于面向对象建模的标准是UML.2.2.5、原型化方法 产生原型化方法的原因很多,主要随着我们系统开发经验的
15、增多,我们也发现并非所有的需求都能够预先定义而且反复修改是不可避免的。当然能够采用原型化方法是因为开发工具的快速发展,比如用VB,DELPHI等工具我们可以迅速的开发出一个可以让用户看的见、摸的着的系统框架,这样,对于计算机不是很熟悉的用户就可以根据这个样板提出自己的需求。2.2.6 可视化开发方法 可视化开发并不能单独的作为一种开发方法,更加贴切的说可以认为它是一种辅助工具,比如:S-Design,PowerDesigner,PowerBuilder,VB,DELPHI,C+Builder等。再见!2.3 软件开发模型 2.3.1 2.3.1 瀑布模型瀑布模型 将软件生命周期划分为制定计划、
16、需求将软件生命周期划分为制定计划、需求分析、软件设计、程序编写、软件测试和运分析、软件设计、程序编写、软件测试和运行维护等六个基本活动,并且规定了它们自行维护等六个基本活动,并且规定了它们自上而下、相互衔接的固定次序,如同瀑布流上而下、相互衔接的固定次序,如同瀑布流水,逐级下落。水,逐级下落。2.3.2 螺旋模型 螺旋模型沿着螺线进行若干次迭代,图螺旋模型沿着螺线进行若干次迭代,图2-52-5中的四个象限代表了以中的四个象限代表了以下活动下活动.螺旋模型沿着螺线旋转,每个螺旋推进的过程都是渐进的实现螺旋模型沿着螺线旋转,每个螺旋推进的过程都是渐进的实现过程,整个过程的实现,按照过程,整个过程的
17、实现,按照”制定计划、风险分析、实施工程和客户制定计划、风险分析、实施工程和客户评估评估”四个步骤循环实施。四个步骤循环实施。(1 1)制定计划:确定软件目标,选定实施方案,弄清项目开发的)制定计划:确定软件目标,选定实施方案,弄清项目开发的限制条件。定义资源、进度及其他相关项目信息所需要的任务,以调整限制条件。定义资源、进度及其他相关项目信息所需要的任务,以调整项目的目标和改善系统实施的效率。项目的目标和改善系统实施的效率。(2 2)风险分析:分析评估所选方案,考虑如何识别和消除风险。风险分析:分析评估所选方案,考虑如何识别和消除风险。从风险角度分析方案的开发策略,努力排除各种潜在的风险,有
18、时需要从风险角度分析方案的开发策略,努力排除各种潜在的风险,有时需要通过建造原型来完成。如果某些风险不能排除,该方案立即终止,否则通过建造原型来完成。如果某些风险不能排除,该方案立即终止,否则启动下一个开发步骤。基于上述目标,评估技术及管理的风险,以决定启动下一个开发步骤。基于上述目标,评估技术及管理的风险,以决定如何实施项目。如何实施项目。(3 3)实施工程:实施软件开发和验证。包括系统需求分析、概要实施工程:实施软件开发和验证。包括系统需求分析、概要设计、详细设计、编程、单元测试、系统测试和验证测试等项目具体实设计、详细设计、编程、单元测试、系统测试和验证测试等项目具体实施的各种任务。施的
19、各种任务。(4(4)客户评估:评价开发工作,提出修正建议,制定下一步计划。客户评估:评价开发工作,提出修正建议,制定下一步计划。螺旋模型的缺点是:螺旋模型的缺点是:(1)(1)它可能难以使用户它可能难以使用户相信演化方法是可控的;相信演化方法是可控的;(2 2)瀑布模型要求在软件开发的初期就完全确定软)瀑布模型要求在软件开发的初期就完全确定软件的需求,这在很多情况下往往是无法实现的。螺旋模件的需求,这在很多情况下往往是无法实现的。螺旋模型加入了瀑布模型所忽略的风险分析,从而弥补了瀑布型加入了瀑布模型所忽略的风险分析,从而弥补了瀑布模型的不足。模型的不足。螺旋模型也有一定的限制条件,这些限制条件
20、是:螺旋模型也有一定的限制条件,这些限制条件是:1 1)螺旋模型强调风险分析,但要求许多客户接受和)螺旋模型强调风险分析,但要求许多客户接受和相信这种分析,并做出相关反应是不容易的,因此,这相信这种分析,并做出相关反应是不容易的,因此,这种模型往往适应于内部的大规模软件开发。种模型往往适应于内部的大规模软件开发。2 2)如果执行风险分析将大大影响项目的利润,那如果执行风险分析将大大影响项目的利润,那么进行风险分析毫无意义,因此,螺旋模型只适合于大么进行风险分析毫无意义,因此,螺旋模型只适合于大规模软件项目。规模软件项目。3 3)软件开发人员应该擅长寻找可能的风险,准确软件开发人员应该擅长寻找可
21、能的风险,准确地分析风险,否则将会带来更大的风险。地分析风险,否则将会带来更大的风险。2.3.3 增量模型 增量模型和瀑布模型之间的本质区别是:瀑增量模型和瀑布模型之间的本质区别是:瀑布模型属于整体开发模型,它规定在开始下一个布模型属于整体开发模型,它规定在开始下一个阶段的工作之前,必须完成前一阶段的所有细节。阶段的工作之前,必须完成前一阶段的所有细节。而增量模型属于非整体开发模型,它推迟某些而增量模型属于非整体开发模型,它推迟某些阶段或所有阶段中的细节,从而较早的产生工作阶段或所有阶段中的细节,从而较早的产生工作软件。软件。增量模型是在项目的开发过程中以一系列的增增量模型是在项目的开发过程中
22、以一系列的增量方式开发系统。量方式开发系统。增量方式包括增量开发和增量提交。增量方式包括增量开发和增量提交。增量模型也存在以下缺陷:(1)由于各个构件是逐渐并入已有的软件体系结构中的,所以加入构件必须不破坏已构造好的系统部分,这需要软件具备开放式的体系结构。(2)在开发过程中,需求的变化是不可避免的。增量模型的灵活性可以使其适应这种变化的能力大大优于瀑布模型和快速原型模型,但也很容易退化为边做边改模型,从而是软件过程的控制失去整体性。2.3.4 喷泉模型 该模型表明软件刻画活动需要多次重复。例如,在编码之前,(实践之后),再次进行分析和设计,其间添加有关功能,使系统得以演化。同时,该模型还表明
23、活动之间没有明显的间隙,例如在分析和设计之间没有明显的界限。2.3.5 RAD模型RADRAD模型包含如下几个开发阶段模型包含如下几个开发阶段 (1)(1)业务建模:业务活动中的信息流被模型化。通过回答以业务建模:业务活动中的信息流被模型化。通过回答以下问题来实现:什么信息驱动业务流程?生成什么信息?谁生成下问题来实现:什么信息驱动业务流程?生成什么信息?谁生成该信息?该信息流往何处?谁处理它?该信息?该信息流往何处?谁处理它?(2)(2)数据建模:业务建模阶段定义的一部分信息流被细化,数据建模:业务建模阶段定义的一部分信息流被细化,形成一系列支持该业务所需的数据对象。标识出每个对象的属性,形
24、成一系列支持该业务所需的数据对象。标识出每个对象的属性,并定义这些对象间的关系。并定义这些对象间的关系。(3)(3)处理建模:数据建模阶段定义的数据对象变换成要完成处理建模:数据建模阶段定义的数据对象变换成要完成一个业务功能所需的信息流。创建处理描述以便增加、修改、删一个业务功能所需的信息流。创建处理描述以便增加、修改、删除或获取某个数据对象。除或获取某个数据对象。(4)(4)应用生成:应用生成:RADRAD过程不是采用传统的第三代程序设计语过程不是采用传统的第三代程序设计语言来创建软件,而是使用言来创建软件,而是使用4GL4GL技术或软件自动化生成辅助工具,技术或软件自动化生成辅助工具,复用
25、已有的程序构件复用已有的程序构件(如果可能的话)或是创建可复用的构件如果可能的话)或是创建可复用的构件(如如果需要的话果需要的话)。(5)(5)测试及反复:因为测试及反复:因为RADRAD过程强调复用,许多程序构件已过程强调复用,许多程序构件已经是测试过的,这减少了测试时间。但新构件必须测试,所有接经是测试过的,这减少了测试时间。但新构件必须测试,所有接口也必须测到。口也必须测到。RADRAD模型还有一种改进型(见图模型还有一种改进型(见图 2-92-9),将),将”编码编码”从从V V字型的顶点移字型的顶点移到左侧,和单元测试对应,从而构成水平的对应关系。到左侧,和单元测试对应,从而构成水平
26、的对应关系。(1 1)从水平对应关系看)从水平对应关系看 左边是设计和分析,右边是验证和测试。右边是对左边结果的检验,左边是设计和分析,右边是验证和测试。右边是对左边结果的检验,即对设计和分析的结果进行测试,以确认是否满足用户的需求。即对设计和分析的结果进行测试,以确认是否满足用户的需求。(2)(2)从图从图形看形看 RADRAD模型避免了瀑布模型所带来的误区模型避免了瀑布模型所带来的误区软件测试是在代码完成之软件测试是在代码完成之后进行。后进行。RADRAD模型说明软件测试的工作很早就可以开始了,项目一启动,模型说明软件测试的工作很早就可以开始了,项目一启动,软件测试的工作也就启动了。软件测
27、试的工作也就启动了。(3 3)从垂直方向看)从垂直方向看 水平虚线上部表明,其需求分析、功能设计和验收测试等主要工作水平虚线上部表明,其需求分析、功能设计和验收测试等主要工作是面向用户,要和用户进行充分的沟通和交流,或者是和用户一起完成。是面向用户,要和用户进行充分的沟通和交流,或者是和用户一起完成。水平虚线下部的大部分工作,相对来说,都是技术工作,在开发组织内水平虚线下部的大部分工作,相对来说,都是技术工作,在开发组织内部进行,由工程师完成。部进行,由工程师完成。图 2-9 RAD 改进型 2.3.6 迭代式模型 迭代模型是RUP(统一软件开发过程)推荐的周期模型。在RUP中,迭代被定义为:
28、迭代包括产生产品发布(稳定、可执行的产品版本)的全部开发活动和要使用该发布必需的所有其他外围元素。所以,在某种程度上,迭代开发是一次完整地重复所有工作流程的过程:需求工作流程、分析设计工作流程、实施工作流程和测试工作流程。迭代过程具有以下优点:1)降低了在一个增量上的开支风险。如果开发人员重复某个迭代,那么损失只是这一个有问题的迭代的花费。2)降低了产品进入市场的风险。通过在开发早期就确定风险,可以尽早来解决这个风险,而不至于在开发后期匆匆忙忙。3)加快了整个开发工作的进度。因为开发人员清楚问题的焦点所在,他们的工作会更有效率。4)容易适应需求的变化。2.4 快速原型开发 软件原型化方法是指,
29、在获得一组基本需求说明后,经过快速分析构造出一个小型的软件系统(原型系统),满足用户的基本要求。用户试用该原型系统,从中得到感受和启发,并对该原型系统做出反映和评价,然后开发者根据用户的意见对原型加以改进。随着不断地实验、纠错、使用、评价和修改,不断获得新的原型版本。如此反复,逐步减少分析和通信中的误解,弥补不足,进一步确定各种需求细节,适应需求的变更,从而提高最终产品的质量。2.4.2软件原型的分类 1.废弃型 也称为快速建立需求规格原型RSP法。先构造一个功能简单而且质量要求不高的模型系统,针对这个模型系统反复进行分析修改,从而形成较好设计思想。2.追加型 也称为快速建立渐进原型RCP法。
30、采用循环渐进的开发方式,对系统模型作连续精化,即先构造一个功能简单而且质量要求不高的模型系统,作为最终系统的核心,将系统需要具备的性质逐步添加上去,通过不断地扩充修改,逐步追加新的要求,直至所有性质全部满足,此时的原型模型也就是最终的产品。2.4.3.原型软件的周期 1原型分析 原型分析是指在分析者和用户的紧密配合下,快速确定软件系统的基本要求。根据原型所要体现的特性(或总体结构、处理功能,模拟性能、界面形式等),描述基本需求规格说明,以满足开发原型的需要。当在分析阶段使用原型化方法时,必须从系统结构、逻辑结构、用户特征、应用约束、项目管理和项目环境等多方面来考虑,以决定是否采用原型化方法。2
31、原型构造 在原型分析的基础上,根据基本需求规格说明,忽略细节,只考虑主要特性,快速构造一个可运行的系统。为此需要强有力的软件工具的支持。3原型运行与评价 原型运行与评价阶段是软件开发人员与用户频繁通讯、发现问题、消除误解的重要阶段。其目的是验证原型的正确程度,进而开发新的并修改原有的需求。4原型修正 对于原型系统,一定要根据修改意见进行修正。如果原型运行的结果没能满足需求规格说明中的需求,那么就反映出对需求规格说明存在着不一致的理解或实现方案不够合理。若因为严重的理解错误而使正常操作的原型与用户要求相违背时,就有可能产出废品,因此应当立即放弃。5判定原型完成 如果原型经过修正或和改进,获得了参
32、与者的一致认可,那么原型开发的迭代过程可以结束。为此,应判断有关应用的实质是否已经掌握,迭代周期是否可以结束等。判定的结果有两个不同的转向:一个是继续迭代验证;另一个是进行详细说明,比如将需求转化为报表,给出统计数字等。对于那些不能通过模型进行说明的成分,如果必要,须提供说明,并利用屏幕等进行讨论和确定。6判定原型效果 考察用户新加入的需求信息和细部说明信息,看其对模型效果有何影响?是否会影响模块的有效性?如果使模型效果受到影响,甚至导致模型实效,则要进行修正和改进。7整理原型和提供文档 整理原型的目的是为进一步开发提供依据。原型的初期需求模型是一个自动的文档。2.4.4 快速原型的优点 1、
33、增进了软件开发人员和用户对系统需求的理解,便于将用户模糊的功能需求明确化。2、为用户提供了一种强有力的学习手段。3、易于确定系统的性能,是理解和确认软件需求规格说明的良好工具。4、按照快速建立渐进原型(RCP)法建立的原型即为最终的产品。2.5 常用开发模型比较分析(1)瀑布模型不满足客户的需求。(2)快速原型模型关注满足客户需求,可能导致系统设计差、效率低,难于维护。原型模型的优点是使用户能够感受到实际的系统,使开发者能够快速地构造出系统的框架。(3)增量模型开发早期反馈及时,易于维护需要开放式体系结构,可能会设计差、效率低。(4)螺旋模型风险驱动风险分析人员需要有经验且经过充分训练。(5)
34、渐增式模型实质就是分段的线性模型。再见!第3章 可行性研究与项目计划 3.1 可行性研究可行性研究 3.1.1 可行性研究的任务可行性研究的任务(1)经济可行性研究)经济可行性研究。(2)社会可行性研究)社会可行性研究。(3)工作量的估计)工作量的估计。(4)技术性研究技术性研究。(5)国内外同类产品的水平比较国内外同类产品的水平比较。(6)风险性研究风险性研究。(7)法律性研究法律性研究。(8)市场前景的研究。市场前景的研究。3.1.2 可行性研究的步骤 1 1确定项目规模和目标确定项目规模和目标 可行性研究分析人员找到项目干系人中的关键人员,可行性研究分析人员找到项目干系人中的关键人员,了
35、解如下几方面的内容:(了解如下几方面的内容:(1 1)项目的规模有多大;()项目的规模有多大;(2 2)项)项目目标是什么;目目标是什么;(3)(3)目前系统的信息来源于何处;目前系统的信息来源于何处;(4)(4)目前目前系统的优点和缺点;系统的优点和缺点;(5)(5)目前系统与国内外同类产品的比较,目前系统与国内外同类产品的比较,优势和劣势分别是什么。优势和劣势分别是什么。2 2 建立新系统的高层逻辑模型。建立新系统的高层逻辑模型。从现有的物理系统出发,从现有的物理系统出发,从而导出系统的高层逻辑。从而导出系统的高层逻辑。方法是用数据流图来描述逻辑模型,然后对导出的逻辑模型方法是用数据流图来
36、描述逻辑模型,然后对导出的逻辑模型进行研究,进行研究,最后根据开发的目标得到新系统的逻辑模型。最后根据开发的目标得到新系统的逻辑模型。3 3找出多种方案。找出多种方案。分析员从新系统的逻辑模型出发,导出几种高层次的物分析员从新系统的逻辑模型出发,导出几种高层次的物理解决方案供选择。理解决方案供选择。4 4写出写出可行性研究报告可行性研究报告。5 5进行审查。进行审查。1引言引言 2项目组织项目组织 3 参考资料参考资料 4 术语术语 5.可行性研究的前提可行性研究的前提 6条件、假定和限制条件、假定和限制 7产品方案产品方案 8 销售重点销售重点3.2 可行性分析报告书写规范 9对现有系统的分
37、析对现有系统的分析 10所建议的系统在技术上的可行性分析所建议的系统在技术上的可行性分析 11 可选择的其他系统方案可选择的其他系统方案 12 市场分析市场分析 13 技术可行性评价技术可行性评价 14 投资及效益分析投资及效益分析 15社会和法律因素方面的可行性社会和法律因素方面的可行性 16结论结论 3.3 项目立项 3.4.1 项目工作计划项目工作计划 项目工作计划具体包括以下几项内容:项目工作计划具体包括以下几项内容:(1)项目概况)项目概况 ;(2)项目进度)项目进度 ;(3)人员构成)人员构成 ;(4)项目组联系方式)项目组联系方式 ;(5)费用支出)费用支出;(6)客户资料)客户
38、资料。3.4.2 硬件资源规划 1服务器。2网络设备。3.开发机。4测试机。5运行机。3.4.3 软件资源规划 1 1开发平台开发平台 2 2第三方支持软件第三方支持软件 3.3.项目管理工具项目管理工具 4 4 开发工具开发工具 软件开发时用到的解决工作效率问题的工具,它们是:软件开发时用到的解决工作效率问题的工具,它们是:项目设计工具:项目设计工具:如如RATIONAL,PROJECT2000RATIONAL,PROJECT2000等;等;软件设计绘图工具:软件设计绘图工具:如如VISIOVISIO等;等;测试工具:测试工具:C+TEST,McabeC+TEST,Mcabe,Rationa
39、l ClearCaseRational ClearCase,LoadRunnerLoadRunner等等等等 BUG BUG 管理工具:管理工具:BMS BMS 等。等。服务器上传软件服务器上传软件FTPFTP软件;软件;软件配置软件:软件配置软件:CVS,VSS,ROSE CVS,VSS,ROSE 等。等。再见!第4章 软件需求分析 4.1 软件需求分析的目标和任务软件需求分析的目标和任务 4.1.1需求分析的目标需求分析的目标 需求分析要回答的问题是需求分析要回答的问题是“系统做什么系统做什么”。软件需求分析是把软件计划期间建立的软件可行软件需求分析是把软件计划期间建立的软件可行性分析求精
40、和细化,分析各种可能的解法,并且分性分析求精和细化,分析各种可能的解法,并且分配给各个软件元素。它位于软件开发的前期,是软配给各个软件元素。它位于软件开发的前期,是软件生命周期中重要的一步,也是最关键的一步。件生命周期中重要的一步,也是最关键的一步。软件需求分析的基本任务是确定系统必须完成软件需求分析的基本任务是确定系统必须完成什么工作,也就是对目标系统提出完整、准确、清什么工作,也就是对目标系统提出完整、准确、清晰、具体的要求。晰、具体的要求。4.1.2 需求分析的任务 (1 1)确定系统的综合要求;)确定系统的综合要求;(2 2)分析系统的数据和信息要求;)分析系统的数据和信息要求;(3
41、3)模型分析)模型分析-导出目标系统的逻辑模型导出目标系统的逻辑模型(4 4)修正系统开发计划;)修正系统开发计划;(5 5)开发原型系统。)开发原型系统。4.2 软件需求分析的过程问题识别编制需求分析文档分析与综合综合评审需求变更管理(1 1)功能需求)功能需求(2 2)环境需求)环境需求 (3 3)性能需求)性能需求 (4 4)可靠性需求)可靠性需求(5 5)安全保密要求)安全保密要求 (6 6)用户界面需求)用户界面需求 (7 7)资源使用需求)资源使用需求 (8 8)软件成本消耗与开发进度需求)软件成本消耗与开发进度需求 4.2.1 问题识别 获取需求的形式和沟通类型:获取需求的形式和
42、沟通类型:建立分析所需要的通信途径,以保证能顺利地对问题建立分析所需要的通信途径,以保证能顺利地对问题进行分析。交流的方式可以是会议、电话、电子邮件、进行分析。交流的方式可以是会议、电话、电子邮件、小组讨论、模拟演示等不同形式。需要注意的是,每一小组讨论、模拟演示等不同形式。需要注意的是,每一次交流一定要有记录,对于交流的结果还可以进行分类,次交流一定要有记录,对于交流的结果还可以进行分类,便于后续的分析活动。便于后续的分析活动。4.2.2分析与综合 系统分析员需要从信息流和信息结构出发,系统分析员需要从信息流和信息结构出发,逐步细化所有的软件功能,找出系统各元素之间逐步细化所有的软件功能,找
43、出系统各元素之间的联系、接口特性和设计上的约束,分析它们是的联系、接口特性和设计上的约束,分析它们是否满足功能要求,是否合理。依据功能需求、性否满足功能要求,是否合理。依据功能需求、性能需求、运行环境需求等,去除其不合理的部分,能需求、运行环境需求等,去除其不合理的部分,增加其需要的部分。最终综合成系统的解决方案,增加其需要的部分。最终综合成系统的解决方案,给出目标系统的详细逻辑模型。给出目标系统的详细逻辑模型。4.2.3编制需求分析文档 (1)软件需求规格说明书)软件需求规格说明书。(2)数据要求说明书)数据要求说明书。(3)初步的用户手册)初步的用户手册。(4)修改、完善与确定软件开发实施
44、计划。)修改、完善与确定软件开发实施计划。4.2.4、综合评审 (1 1)设计方案正确性、先进性、可行性和经济性;)设计方案正确性、先进性、可行性和经济性;(2 2)系统组成、系统要求及接口协调的合理性;)系统组成、系统要求及接口协调的合理性;(3 3)系统与各子系统间技术接口的协调性;)系统与各子系统间技术接口的协调性;(4 4)采用设计准则、规范和标准的合理性;)采用设计准则、规范和标准的合理性;(5 5)系统可靠性、维修性、安全性要)系统可靠性、维修性、安全性要 求是否合理;求是否合理;(6 6)关键技术的落实解决情况;)关键技术的落实解决情况;(7 7)编制的质量计划是否可行。)编制的
45、质量计划是否可行。4.2.5 需求变更管理(1 1)不要轻易答应用户进行修改;)不要轻易答应用户进行修改;(2 2)即使可能修改,也要用户方书面写出)即使可能修改,也要用户方书面写出变更申请变更申请书书,在项目组讨论确定之后进行变更;,在项目组讨论确定之后进行变更;影响分析。在用户向项目组递交影响分析。在用户向项目组递交变更申请书变更申请书后,后,项目组要进行影响分析和评价,评价的结果可能是项目组要进行影响分析和评价,评价的结果可能是“批批准准”,也可能,也可能“驳回驳回”变更申请书变更申请书的变更。的变更。重计划。如果批准变更,有可能对项目的计划进度或重计划。如果批准变更,有可能对项目的计划
46、进度或人员等进行相应变更,所以要进行重新计划。人员等进行相应变更,所以要进行重新计划。变更执行。下面的步骤就是执行变更计划了。变更执行。下面的步骤就是执行变更计划了。再见!4.3 数据流图 数据流图(简称数据流图(简称DFD)是描述系统中数据变换)是描述系统中数据变换的图形工具。的图形工具。数据流图从数据传递和处理的角度,以图形的数据流图从数据传递和处理的角度,以图形的方式刻画数据流从输入到输出的传输变换过程。方式刻画数据流从输入到输出的传输变换过程。图中没有任何具体的物理元素,它仅仅描绘数据图中没有任何具体的物理元素,它仅仅描绘数据在系统中流动和被处理的情况。在系统中流动和被处理的情况。设计
47、数据流图时只需考虑系统必须完成的基本设计数据流图时只需考虑系统必须完成的基本逻辑功能,而不必考虑如何实现这些功能。因此,逻辑功能,而不必考虑如何实现这些功能。因此,它也是进行软件设计的一个很好的出发点。它也是进行软件设计的一个很好的出发点。数据流图的画法 数据流图有四种成分:源点或终点、处理、数据流图有四种成分:源点或终点、处理、数据存储和数据流。数据存储和数据流。基本思想:基本思想:自顶向下,由外向里,逐步分解自顶向下,由外向里,逐步分解 。找出外部实体的输出数据流和输入数据流;找出外部实体的输出数据流和输入数据流;从外部实体的输出数据流出发,逐步画出一系从外部实体的输出数据流出发,逐步画出
48、一系列逻辑处理,直到找出外部实体所需的输入数据列逻辑处理,直到找出外部实体所需的输入数据流,形成数据流的封闭;流,形成数据流的封闭;重复上面的步骤,细化各部分逻辑处理,画出重复上面的步骤,细化各部分逻辑处理,画出第二层或更下一级的数据流图。第二层或更下一级的数据流图。绘制 数据流图的步骤(1 1)确定所开发的系统的外部项(外部实体),即系统的数据来源)确定所开发的系统的外部项(外部实体),即系统的数据来源和去处。和去处。(2 2)确定整个系统的输出数据流和输入数据流,把系统作为一个加)确定整个系统的输出数据流和输入数据流,把系统作为一个加工环节,画出关联图。工环节,画出关联图。(3 3)确定系
49、统的主要信息处理功能,按此将整个系统分解成几个加)确定系统的主要信息处理功能,按此将整个系统分解成几个加工环节(子系统)确定每个加工的输出与输入数据流以及与这些加工工环节(子系统)确定每个加工的输出与输入数据流以及与这些加工有关的数据存储。有关的数据存储。(4 4)根据自顶向下,逐层分解的原则,对上层图中全部或部分加工)根据自顶向下,逐层分解的原则,对上层图中全部或部分加工环节进行分解。环节进行分解。(5 5)重复步骤()重复步骤(4 4),直到逐层分解结束。),直到逐层分解结束。(6 6)对图进行检查和合理布局,主要检查分解是否恰当、彻底,)对图进行检查和合理布局,主要检查分解是否恰当、彻底
50、,DFDDFD中各层是否有遗漏、重复、冲突之处,各层中各层是否有遗漏、重复、冲突之处,各层DFDDFD及同层及同层DFDDFD之间关系是之间关系是否争取及命名、编号是否确切、合理等,对错误与不当之处进行修改。否争取及命名、编号是否确切、合理等,对错误与不当之处进行修改。(7 7)和用户进行交流,在用户完全理解数据图的内容的基础上征求)和用户进行交流,在用户完全理解数据图的内容的基础上征求用户的意见。用户的意见。数据流图的实例数据流图有关的说明 1.1.处理到处理,实体到处理通常应标明数据流,处理到处理,实体到处理通常应标明数据流,处理到数据存储可省去数据流。处理到数据存储可省去数据流。2.2.