10.1软件生存周期
软件生存周期包括:1.可行性分析与项目开发计划、2.需求分析、3.概要设计、4.详细设计、5.编码和单元 测试、6.综合测试、7.维护阶段。
10.1.1可行性分析与项目开发计划:主要任务是确定软件的开发目标及可行性。该阶段应该给出问题定义、可行性分析和项目开发计划。
10.1.2需求分析:需求分析阶段的任务不是具体地解决问题,而是准确地确定软件系统必须做什么,确定软件系统 的功能、性能、数据和界面等要求,从而确定系统的逻辑模型。
10.1.3概要设计 (宏观上):在本阶段,开发人员需要将确定的功能需求转换成相应的体系结构。概要设计就是设计软件的结 构,明确软件有哪些模块组成,模块的层次以及功能。与此同时,还要设计应用系统的总体数据结 构和数据库结构。
10.1.4详细设计 (微观):主要任务就是对每个模块完成的功能进行描述,不是编写程序,而是设计出程序的详细规格说明, 使程序员可以根据它们写出实际的程序代码。
10.1.5编码和单元测试 :就是把每个模块的结构转换成计算机可接受的程序代码,即写成某种特定程序设计语言表示的源 程序清单,并仔细测试编写出每一个模块。
10.1.6综合测试: 综合测试阶段的关键任务是通过各种类型的测试(及相应的调试)使软件达到预定的要求。最基 本的测试是集成测试和验收测试。
10.1.7维护: 维护阶段是软件生存期中时间最长的阶段。软件一旦交付正式投入运行后便进入软件维护阶段。 该阶段的关键任务是通过各种必要的维护活动使系统持久地满足用户的需要。每一项维护活动都应 该准确地记录下来,作为正式的文档资料加以保存。
10.2软件生存周期模型
1、瀑布模型
瀑布模型是将软件生存周期各个活动规定为依线性顺序连接的若 干阶段的模型。它规定了由前至后、相互衔接的固定次序,如同 瀑布流水,逐级下落。瀑布模型假设,一个待开发的系统需求是 完整的、简明的、一致的,而且可以先于设计和实现完成之前产生。
优点:容易理解,管理成本低;强调开发的阶段性早期计划及需求调查和产品测试。
缺点:客户必须能够完整、正确和清晰地表达他们的需要;在开始的两个或三个阶段中,很难评估 真正的进度状态;当接近项目结束时,出现了大量的集成和测试工作;直到项目结束之前,都不能 演示系统的能力。
在瀑布模型中,需求或设计中的错误往往只有到了项目后期才能够被发现,对于项目风险的控 制能力较弱,从而导致项目常常延期完成,开发费用超预算。
2、增量模型(分批次,模块化)
增量模型融合了瀑布模型的基本成分和原型实现的迭代特征,它假设可以将需求分段为一系列 增量产品,每一增量可以分别地开发。该模型采用随着日程时间的进展而交错的线性序列,每一个 线性序列产生软件的一个可发布的“增量” 。增量模型强调每一个增量均发布一个可操作的产品。
优点:第一个可交付版本所需要的成本和时间很少;开发由增量表示的小系统所承担的风险不大; 由于很快发布了第一个版本,因此可以减少用户需求的变更;运行增量投资,即在项目开始时,可 以仅对一个或两个增量投资。
缺点:如果没有对用户的变更要求进行规划,那么产生的初始增量可能会造成后来增量的不稳定; 如果需求不像早期思考的那样稳定和完整,那么一些增量就可能需要重新开发,重新发布;管理发 生的成本、进度和配置的复杂性,可能会超出组织的能力。
3、演化模型(针对明确要求)
主要针对事先不能完整定义需求的软件开发,是在快速开发一个原型的基础上,根据用户在使 用原型的过程中提出的意见和建议对原型进行改进,获得原型的新版本。重复这一过程,最终可得 到令用户满意的软件产品。
优点:任何功能一经开发就能进入测试,以便验证是否符合产品的需求,可以帮助引导出高质 量的产品要求。
缺点:如果不加控制地让用户接触开发中尚未稳定的功能,可能对开发人员及用户都会产生负 面影响。
4、螺旋模型
将瀑布模型和演化模型结合起来,加入了两种模型均忽略的风险分析,弥补了两种模型的不足。 螺旋模型将开发过程分为几个螺旋周期,每个螺旋周期大致和瀑布模型相符合。
(1)制订计划。确定软件的目标,选定实施方案,明确项目开发 的限制条件。
(2)风险分析。分析所选的方案,识别风险,消除风险。
(3)实施工程。实施软件开发,验证阶段产品。
(4)用户评估。评价开发工作,提出修正建议,建立下一个周期 的开发计划。
螺旋模型强调风险分析,使得开发人员和用户对每个演化层出现 的风险有所了解,继而做出应有的反应。因此特别适用于庞大、复杂 并且具有高风险的系统。
5、喷泉模型(面向对象)
喷泉模型是一种以用户需求为动力,以对象作为驱动的模型,适合于面向对象的开发方法。 它克服了瀑布模型不支持软件重用和多项开发活动集成的局限性。 喷泉模型使开发过程具有迭代性和无间隙性。 该模型的各个阶段没有明显的界限,开发人员可以同步进行。
优点:可以提高软件项目的开发效率,节省开发时间
不足:由于喷泉模型在各个开发阶段是重叠的,在开发过程中需要大量的 开发人员,不利于项目的管理。此外这种模型要求严格管理文档,使得审核 的难度加大。
10.3典型的软件开发方法
1、结构化开发方法: 是一种传统的信息系统开发方法,由结构化分析、结构化设计和结构化程序设计构成,它是一 种面向数据流的开发方法。其精髓是自顶向下、逐层分解和模块化设计,它的基本原则是功能的分 解与抽象。 结构化方法的开发过程一般是先把系统功能视为一个大的模块,再根据系统分析与设计的要求 对其进行进一步的模块分解或组合。 结构化方法特别适合于数据处理领域的问题,但是不适合解决规模较大的、比较复杂的项目, 且难以适应需求的变化。
优点:能更有效地确认用户需求
2、原型化开发方法 :根据用户初步需求,利用系统开发工具,快速地建立一个系统模型展示给用户,在此基础上与 用户交流,最终实现用户需求的信息系统快速开发的方法。 原型法的优点主要在于能更有效地确认用户需求。
优点:原型化方法比较适合于用户需求不清、业务理论不确定、需求经常变化的情况。当系统规模不 是很大也不太复杂时,采用该方法是比较好的。 紫依软考 典型的软件开发方法
3、面向对象开发方法: 面向对象开发方法的基本出发点是尽可能按照人类认识世界的方法和思维方法来分析和解决问 题。客观世界是由许多具体的事物、事件、概念和规则组成的,这些均可被看成对象,面向对象方 法正是以对象作为最基本的元素,它也是分析问题、解决问题的核心。 使用面向对象的方法构造的系统具有更好的复用性。面向对象的方法使系统的描述及信息模型的 表示与客观实体相对应,符合人们的思维习惯,因此可以缩短开发周期。
优点:有更好的复用性,符合人们的思维习惯,可以缩短开发周期。
4、敏捷方法 :敏捷开发的总体目标是通过“尽可能早地、持续地对有价值的软件的交付”使客户满意。通过 在软件开发过程中加入灵活性,敏捷方法可以使用户能够在开发周期的后期增加或改变需求。
10.4软件项目管理
1、成本估算
2、风险分析
3、进度管理 进度安排的常用图形描述方法有Gantt图(甘特图)和项目计划评审技术(PERT)图。 (1)Gantt图 Gantt图能清晰地描述每个任务从何时开始,到何时结束,任务的进展情况以及各个任务之间的并 行性。但是其缺点是不能清晰地反映出各任务之间的依赖关系,难以确定整个项目的关键所在,也 不能反映计划中有潜力的部分。
(2)PERT图 :PERT图不仅给出了每个任务的开始时间、结束时间和完成该任务所需的时间,还给出了任务之间 的关系,即哪些任务完成后才能开始另外一些任务,以及如期完成整个工程的关键路径。图中的松 弛时间则反映了完成某些任务时可以推迟其开始时间或延长其完成所需的时间。但是,PERT图不能 反映任务之间的并行关系。
4、人员管理 程序设计小组的组织形式可以有多种,如主程序员组、无主程序员组和层次式程序员组等。
(1)主程序员组。主程序员组由一名主程序员、一名后备程序员、一名资料员和若干名程序员组成。 这种组织形式便于集中领导,步调统一,容易按规范办事,但不利于发挥个人的积极性。
(2)无主程序员组。无主程序员组中的成员之间相互平等,工作目标和决策都由全体成员民主讨论, 根据需要也可以轮流坐庄。这种组民主气氛比较足,依赖个人的成分少,有利于发挥每个人的积极 性。但这种组中交流量大,往往职责不明确,出了问题谁也不负责,而且不利于与外界的联系。
有一个沟通路径共有多少条: