收藏 分销(赏)

软件工程技术讲座.docx

上传人:xrp****65 文档编号:8788924 上传时间:2025-03-02 格式:DOCX 页数:85 大小:1.19MB
下载 相关 举报
软件工程技术讲座.docx_第1页
第1页 / 共85页
软件工程技术讲座.docx_第2页
第2页 / 共85页
点击查看更多>>
资源描述
软件工程技术讲座 软件教研室 艾孜海尔 编 新疆大学 数学与系统科学学院 目 录 第1章 软件工程概述 1 1.1 软件 1 1.1.1 软件的发展 1 1.1.2 软件定义 2 1.1.3 软件的特点 2 1.1.4 软件的分类 4 1.2 软件工程概念 6 1.2.1 软件危机与软件工程定义 6 1.2.2 软件工程的基本内容与目标 10 1.2.3 软件工程的原则 10 1.3 软件生存周期与软件开发模型 11 1.3.1 软件生存周期 11 1.3.2 软件开发模型 12 第2章 可行性研究 19 2.1 问题定义 19 2.2 可行性研究 19 2.2.1 方法、步骤 19 2.2.2 文档编写 25 第3章 需求分析 28 3.1 需求分析的方法步骤 28 3.2 数据流图的分析与细化 28 3.3 需求规格说明的编写 29 第4章 概要设计 31 4.1 概要设计的任务与步骤 31 4.2 软件设计的概念与原则 31 4.2.1 模块化 31 4.2.2 抽象与逐步求精 31 4.2.3 信息隐蔽和局部化 32 4.2.4 模块独立性 33 4.2.5 结构设计原则 36 4.2.6 概要设计文档 37 第5章 详细设计 39 5.1 详细设计的任务与原则 39 5.2.1 详细设计的任务 39 5.2.2 详细设计的原则 39 5.2 详细设计的方法 39 5.2.1 程序流程图 40 5.2.2 N-S图 41 5.2.3 伪代码 41 5.3 详细设计说明书 41 第6章 编 码 43 6.1 程序设计语言 43 6.1.1 程序设计语言分类 43 6.1.2 程序设计语言的选择 43 6.2 编码风格 44 6.2.1 源程序文档化 44 6.2.2 数据说明 45 6.2.3 语句结构 45 6.2.4 输入/输出(I/O) 45 6.3 程序效率 45 6.3.1 有关程序效率的几条准则 45 6.3.2 算法对效率的影响 45 6.3.3 影响存储器效率的因素 45 6.3.4 影响输入/输出的因素 45 6.4 编程安全 45 6.4.1 冗余程序设计 45 6.4.2 防错程序设计 45 第7章 软件质量与质量保证 45 7.1 软件质量的定义 45 7.2 影响软件质量的因素 45 7.3 软件质量保证策略 45 7.4 软件质量保证活动 45 7.5 软件评审 45 7.5.1 设计质量的评审内容 45 7.5.2 程序质量的评审内容 45 7.6 软件质量保证的标准 45 7.7 软件测试计划与测试分析报告 45 第8章 项目计划与管理 45 8.1 软件项目特点、管理的特殊性及软件管理功能 45 8.1.1 软件项目的特点 45 8.1.2 软件管理的功能 45 8.1.3 确定软件项目的工作范围 45 8.2 确定软件开发所需的资源 45 8.2.1 人力资源 45 8.2.2 硬件 45 8.2.3 软件 45 8.3 人员的计划和组织 45 8.4 成本估计及控制 45 8.4.1 软件开发成本估计方法 45 8.4.2 专家判定技术 45 8.4.3 成本估算模型 45 8.5 进度计划 45 8.5.1 软件工作的特殊性 45 8.5.2 各阶段工作量的分配 45 8.5.3 制定开发进度 45 8.6 软件配置管理 45 8.6.1 基线 45 8.6.2 软件配置项 45 8.6.3 软件配置管理过程 45 8.7 软件管理方案 45 第1章 软件工程概述 1.1 软件 软件是一种产品,同时又是开发和运行产品的载体。作为一种产品,它表达了由计算机硬件体现的计算潜能。不管他是驻留在设备中,还是在主机中,软件是一个信息转换器,能够产生、管理、获取、修改、显示或转换信息。这些信息可以很简单,如一个比特,也可能很复杂,如多媒体信息。作为开发运行产品的载体,软件是计算机工作和信息通信的基础,也是创建和控制其它程序的基础。 信息是21世纪最重要的产品,软件充分地体现了这一点。软件处理数据,使得这些数据更为有用。软件管理商业信息增强了商业竞争力,它不仅提供了通往全球信息网络的途径,而且提供了以各种形式获取信息的手段。 1.1.1 软件的发展 1. 程序设计阶段 在计算机发展早期阶段(20世纪50年代初至60年代中期)为程序设计阶段。在这个阶段,硬件已经通用化,而软件的生产却是个体化的。这时,由于程序规模小,几乎没有什么系统化的方法可遵循。对软件的开发没有任何管理方法,一旦计划推迟了或者成本提高了,程序员才开始弥补。在通用的硬件已经非常普遍的时候,软件却相反,对每一类应用均需要自行再设计,应用范围很有限。软件产品处在初期阶段,大多数软件都是由使用者自己开发。设计往往是人们头脑中的一种模糊想法,而文档就根本存在。 2. 程序系统阶段 计算机系统发展的第二个阶段(60年代中期到70年代末期)为程序系统阶段。多道程序设计和多用户系统引入了人机交互的新概念。交互技术打开了计算机应用的新世界,以及硬件和软件配合的新层次,实时系统和第一代数据库管理系统相继出现。这个阶段还有一个特点就是软件产品的使用“软件作坊”的出现。被开发的软件可以在较宽广的范围中应用。主机和微机上的程序能够有数百甚至上千用户。 在软件的使用中,当发现错误时需要纠正程序源代码;当用户需求发生变化时需要修改;当硬件环境变化时需要适应;这些活动统称为软件维护。在软件维护上所花费的精力和消耗的资源的速度是惊人的。更为严重的是,许多程序的个人化特性使得他们根本不可能维护。“软件危机”——在计算机软件的开发和维护过程中所遇到的一系列严重问题出现了。有人曾把这一阶段软件的开发和维护工作比作“陷进泥潭的牛所进行的挣扎一样”。1968年北大西洋公约组织的计算机科学家在联邦德国召开关机会议,讨论软件危机问题,并正式提出了“软件危机”这个名词。 3. 软件工程阶段 计算机系统发展的第三个阶段始于20世纪70年代中期并经历了近10年,成为软件工程阶段。在这一阶段,以软件的产品化、系列化、工程化、标准化为特征的软件产业发展起来了,打破了软件生产的个体化特征,有了可以遵循的软件工程化的设计原则、方法和标准。在分布式系统中,各台计算机同时执行某些功能,并于其它计算机通信,极大地提高了计算机系统的功能。广域网、局域网、高带宽数字通信以及对“即时”数据访问需求的增加都对软件开发者提出了更高的要求。 4. 第四阶段 计算机系统发展的第四个阶段已经不再着重于单台计算机和计算机程序,而是面向计算机和软件的综合影响。由复杂的操作系统控制的强大的桌面机、广域网络和局域网络,配以先进的软件应用已成为标准。计算机体系结构迅速地从机中的主机环境转变为分布的客户机/服务器环境。世界范围的信息网提供了一个基本结构,信息高速公路和网际空间连通已成为令人关注的热点问题。事实上,Internet可以看作是能够被单个用户访问的软件。计算机发展正朝着社会信息化和软件产业化方向发展,从技术的软件工程阶段过渡到社会信息化的计算机系统。随着第四阶段的进展,一些新技术开始涌现。面向对象技术将在许多领域中迅速取代传统软件开发方法。 表1.1给出了四个阶段典型技术的比较。 表 11 四个阶段典型技术 阶段 第一阶段 第二阶段 第三阶段 第四阶段 典型技术 面向批处理 多用户 分布式系统 强大的桌面系统 有限的分布 实时 嵌入“智能” 面向对象技术 自定义软件 数据库 低成本硬件 专家系统 软件产品 消费者的影响 人工神经网络 并行计算 网络计算机 1.1.2 软件定义 计算机系统通过运行程序来实现各种不同的应用。通常把各种不同功能的程序,包括用户为自己的特定目的编写的程序、检查和诊断机器系统的程序、支持用户应用程序运行的系统程序、管理和控制机器系统资源的程序等称为软件。它是计算机系统中与硬件互相依存的另一部分,与硬件合为一体完成系统功能。软件定义如下: (1) 在运行中能提供所希望的功能和性能的指令集(即程序); (2) 使程序能够正确运行的数据结构; (3) 描述程序研制过程及方法所用的文档。 随着计算机应用的日益普及,软件变得越来越复杂,规模也越来越大,这就使得人与人、人与机器间互相沟通,保证软件开发与维护工作的顺利进行显得特别重要。因此,文档(即各种报告、说明、手册的总称)是不可缺少的。特别是在软件日益成为产品的今天,文档的作用就更加重要。 1.1.3 软件的特点 软件在整个计算机系统中是一个逻辑部件,而硬件是一个物理部件。因此,软件相对硬件而言有许多特点。为了能全面、正确地理解计算机软件及软件工程的重要性,必须了解软件的特点。软件的特点可归纳如下: (1) 软件是一种逻辑实体,而不是具体的物理实体,因为它具有抽象性。这个特点使它与计算机硬件或其他工程对象有着明显的差别。人们可以把它记录在介质上,但却无法看到软件的形态,而必须通过测试、分析、思考、判断去了解它的功能、性能及其它特性。 (2) 软件是通过人们的智力活动,把知识与技术转化成信息的一种产品,是在研制、开发中被创造出来的。一旦某一软件项目研制成功,以后就可以大量地复制同一内容的副本。即其研制成本远远大于其生产成本。软件故障往往是在开发时产生而在测试时没有被发现的问题。所以要保证软件的质量,必须着重于软件开发过程,加强管理。 (3) 在软件的运行和使用期间,没有硬件那样的机械磨损和老化问题。软件维护比硬件维护要复杂得多,与硬件的维修有着本质的差别,参阅图1.1、图1.2、图1.3、图1.1所示的是硬件的故障率随时间变化的曲线;图1.2所示的是在理想状况下软件故障率随时间变化的曲线;图1.3所示的是软件的实际故障率曲线;图1.2所示的是在理想情况下软件故障率随时间变化的曲线;图1.3所示的是软件的实际故障率曲线。 图 11 硬件的故障率队时间变化的曲线 图 12 理想情况下的软件故障率随时间变化的曲线 图 13 软件的实际故障率 (4) 软件的开发和运行经常受到计算机系统的限制,对计算机系统有着不同程度的依赖关系。在软件的开发和运行中必须以硬件提供的条件为基础。为了解除这种依赖,在软件开发中提出了软件移植的问题,并且把软件的可移植性作为衡量软件质量的因素之一。 (5) 传统的手工开发方式使软件开发的效率受到很大的限制。因此,应促进软件技术开展,提出和采用新的开发方法。例如,近年来出现的充分利用现有软件的复用技术、自动生成技术和其他一些有效的软件开发工具或软件开发环境,既方便了软件开发的质量控制,又提高了软件的开发效率。 (6) 软件的开发费用越来越高,成本相当昂贵。软件的研制工作需要投入大量的、复杂的、高强度的脑力劳动需要较高的成本。 (7) 软件的开发是一个复杂的过程,例如,银行管理系统涉及到安全等问题,因而管理是软件开发过程中必不可少的内容。 1.1.4 软件的分类 在工作和学习中,经常接触到各式各样的软件。这些数量众多的软件究竟分为哪些类型,这就要考虑对计算机软件进行分类的依据。但事实上,由于人们与软件的关系各不相同且所关心软件的侧重点也不相同,所以难以给出计算机软件的一个科学的、统一的严格分类标准。但对软件的类型进行必要的划分队与根据不同类型的工程对象采用不同的开发和维护方法是很有价值的,因此有必要从不同角度讨论对计算机软件分类。 1. 基于软件的功能划分 (1) 系统软件:与计算机硬件紧密配合,使计算机各个部分与相关软件及数据协调,高效工作的软件,例如,操作系统、数据库管理系统等。系统软件在工作时频繁地与硬件交往,以便为用户服务,共享系统资源,在这中间伴随着复杂的进程管理和数据结构的处理。系统软件是计算机系统必不可少的一种重要组成部分。 (2) 支撑软件:协调用户开发软件的工具性软件,包括帮助程序人员开发软件产品的工具和帮助管理人员控制开发的进度的工具。可分为: ① 一般类型:包括文本编辑程序、文件格式化程序、程序库系统等。 ② 支持需求分析:包括PSL/PSA问题描述语言、问题描述分析器、关系数据库系统、一致性检查程序等。 ③ 支持设计:包括图形软件包、结构化流程图绘图程序、设计分析程序、程序结构图编辑程序等。 ④ 支持实现:包括编译程序、交叉编译程序、预编译程序、连接编译程序等。 ⑤ 支持测试:包括静态分析程序、符号执行程序、模拟程序、测试覆盖检验程序等。 ⑥ 支持管理:包括进度计划评审方法、绘图程序、标准检验程序和库管理程序等。 (3) 应用软件:在特定领域内开发,为特定目的服务的一类软件。现在几乎所有的国民经济领域都使用了计算机,为这些计算机应用领域服务的应用软件种类繁多。其中商业数据处理软件时所占比例最大的一类,工程与科学计算软件大多属于数值计算问题。应用软件还包括计算机辅助设计/制造(CAD/CAM)、系统仿真、智能产品嵌入软件(如汽车油耗控制、仪表盘数字显示、刹车系统),以及人工智能软件:(如专家系统、模式识别)等。此外,在事物管理、办公自动化,中文信息处理、计算机辅助教学(CAI)等方面的软件业迅速得到发展,产生了惊人的生产效率和巨大的经济效益。 2. 基于软件的工作方式划分 (1)实时处理软件:在事件或数据产生时,立即处理,并及时反馈信号,控制需要监测和控制的过程的软件。主要包括数据采集、分析、输出三部分,其处理事件应严格限定,如果在任何时间超出了这一限制,都将造成事故。 (2)分时软件:允许多个联机用户同时使用计算机,系统把处理机时间轮流分配给各联机用户,使各用户都感到只是自己在使用计算机的软件。 (3)交互式软件:能实现人及通信的软件。这类软件接受用户给出的信息,但在实践上没有严格的限定,这种工作方式给与用户更大的灵活性。 (4)批处理软件:把一组输入作业或一批数据以成批处理的方式一次运行,按顺序逐个处理的软件。 3. 基于软件规模的划分 根据开发软件所需的人力、时间以及完成的源程序行数,可划分为下述六种不同规模的软件。 (1)微型软件:一个人在几天之内完成的、程序不超过500行语句且仅供个人专用的软件。通常这类软件没有必要作严格的分析,也不必要有完整的设计和测试资料。 (2)小型软件:一个人半年之内完成的2000行以内的程序。这种程序通常没有与其他程序的接口。但需要按一定的标准化技术、正规的资料书写以及定期的系统审查,只是没有大题目那样严格。 (3)中型软件:5个人以内在一年多时间里完成的5000到5万行的程序。中型软件的实施过程中开始出现了软件人员之间、软件人员与用户之间的联系、协调的配合关系问题。因而计划、资料书写以及技术审查需要比较严格地进行。在开发中使用系统的软件工程方法是完全必要的。这对提高软件产品质量和程序人员的工作效率起着重要的作用。 (4)大型软件:5至10个人在两年多的时间里完成的5万到10万行的程序。参加工作的软件人员需要按二级管理。在任务完成过程中,人员调整往往不可避免,因此会出阁的审查是绝对必要的。由于软件的规模庞大以及问题复杂性,往往在开发的过程中出现一些实现难于做出估计的不测试事件。 (5)甚大型软件:100至1000人参与,用4到5年时间完成的具有100万行程序的软件项目。这种甚大型项目可能会划分为若干个子项目,每一个子项目都是一个大型软件,各子项目之间具有复杂的接口。例如,实时处理系统、远程通信系统、多任务系统、大型操作系统、大型数据库管理系统通常有这样的规模。很显然,如果这类问题没有软件工程方法的支持,它的开发工作是难以想象的。 (6)极大型软件:2000人到5000人参加,10年内完成的1000万行以内的程序。这类软件很少见,往往是军事指挥、弹道导弹防御系统等。 可以看出,规模大、时间长、很多人参加的软件项目,其开发工作必须要有软件工程的指示作指导。而规模小、时间短、参加人员少的软件项目也应有软件工程概念,遵循一定的开发规范,其基本原则是一样的。 4. 基于软件失效的影响进行划分 工作杂不同领域的软件,为适应其不同的需求,在运行中对可靠性也有不同的要求。如有的软件在工作中出现了故障,造成软件失效,但可能给软件整个系统带来的影响不大,虽然可能带来一些不便,却能勉强工作。但有的软件一旦失效,可能酿成灾难性的后果,其严重损失难以挽回。如控制载人飞行物的软件,如果不能正常工作,可能宜人的生命为代价。 事实上,随着计算机进入国民经济等各个重要领域,其软件的可靠性越来越显得重要。人们一般称这类软件为关键软件,其特点在于: (1)可靠性质量要求高; (2)长于完成重要功能的大系统的处理部件相联; (3)含有的程序可能对人员、公众、设备或设施的安全造成影响。还可能影响到环境的质量和关系到国家的安全和机密。 5. 基于软件服务对象的范围划分 完成软件工程项目后可以有两种情况提供给用户: (1)定制软件:受某个特定客户(或少数客户)的委托,由一个或多个软件开发机构在合同的约束下开发出来的软件。 (2)产品软件:由软件开发机构开发出来直接提供给市场,或是为千百个用户服务的软件。 1.2 软件工程概念 计算机系统已经历了四个不同的发展时期,计算机应用日益普及和深化,计算机软件的数量以惊人的速度急剧增加,而且软件规模也十分庞大。 由于微电子学技术的进步,计算机硬件性能有了很大的提高,而且质量稳步提高。然而,计算机软件成本却不断上升,质量的保证也不尽人意,软件开发的生产率也远远不能满足计算机应用的要求。软件已经成为限制计算机系统进一步发展的关键因素。 1.2.1 软件危机与软件工程定义 1.软件危机 软件危机指的是软件开发和维护过程中遇到的一系列严重问题。 (2)软件危机的表现 软件危机包含下述两方面的问题:如何开发软件,怎样满足对软件的日益增长的需求;如何维护数量不断膨胀的已有软件。具体地说,软件危机主要有下面的一些表现。 ①产品不符合用户的实际需要。因为软件开发人员对用户需求没有深入准确地了解,甚至对所要解决的问题还没有正确认识,就着手编写程序,而且软件开发人员和用户之间的信息交流往往很不充分,导致用户对软件产品不满意的现象发生。 ②软件开发生产率提高的速度远远不能满足客观需要。软件的生产率远远低于硬件生产率和计算机应用的增长,使人们不能充分利用现代计算机硬件提供的巨大潜力。 ③软件产品的质量差。软件可靠性和质量保证的定量概念刚刚出现不久,软件质量保证技术(审查、复审和测试)没有贯穿到软件开发的全过程中,这些都导致软件产品发生质量问题。 ④对软件开发成本和进度的估计常常不准确。实际成本比估计成本有可能偏高,实际进度比预期进度拖延。这种现象降低了软件开发者的信誉。为了赶进度和节约成本所采取的一些权宜之计又往往降低了软件产品的质量,从而不可避免地引起用户的不满。 ⑤软件的可维护性差。很多程序中的错误是难以改正的,实际上不能使这些程序适应硬件环境的改变,也不能根据用户的需要在原有的程序中增加一些新的功能。没能实现软件的可重用,造成重复开发功能类似的软件。 ⑥软件文档资料通常既不完整也不合格。计算机软件不应仅有程序,还应该包括一整套文档资料。这些文档资料应该是在软件开发工程中产生出来的,而且应该和程序代码完全一致。软件开发的管理人员可以用这些文档资料来管理和评价软件开发过程的进展状况;软件开发人员可以利用它们作为通信工具,在软件开发过程中准确地交流信息;对于软件维护人员而言,这些文档资料更是至关重要和必不可少的。因为缺乏必要的文档资料或者文档资料不合格,必然给软件开发和维护带来许多严重的困难和问题。 ⑦软件的价格昂贵,软件成本在计算机系统总成本中所占的比例逐年上升。由于微软电子学技术的进步和生产自动化程度不断提高,导致硬件成本逐年下降,然而软件开发则需要大量人力,使软件成本上升。 以上列举的仅仅是软件危机的一些明显的表现,与软件开发和维护有关的问题远远不止这些。通过对以上软件危机的各种表现的分析,可以看出在软件开发和维护的过程中存在严重问题,这些问题一方面与软件本身的特点有关;另一方面也和软件开发与维护的方法不正确有关。 (2)产生软件危机的原因 ①软件不同于硬件,它是计算机系统中的逻辑部件而不是物理部件。在写出程序代码并在计算机上试运行之前,软件开发过程的进展情况较难衡量。很难检验开发的正确性且软件开发的质量也较难评价。因此,管理和控制软件开发过程相当困难。此外,如果在软件运行过程中发现错误,很可能是在开发时期引入的,但在测试阶段没能检测出来的错误。所以软件维护表明改正或修改原来的设计。这样维护的费用是十分惊人的,导致在客观上软件较难维护。 软件不同于一般程序,它的一个显著特点是规模庞大。如何保证每个人完成的工作和在一起确实能构成一个高质量的大型软件系统,更是一个极端复杂困难的问题,不仅涉及许多技术问题,例如分析方法、设计方法、形式说明方法、版本控制等,更重要的是必须有严格而科学的管理。所以其开发和维护必然相当困难。 ②虽然软件本身独有的特点确实给开发和维护带来一些客观困难,但是人们在开发和实用计算机系统的长期实践中,也确实积累和总结出了许多成功的经验。如果坚持不懈地使用经过实践考验证明是正确的方法,许多困难是完全可以克服的。但是,目前相当多的软件专业人员对软件开发和维护还有不少错误观念,在实践过程中没有采用工程化的方法,这是成生软件危机的主要原因。 ③开发和管理人员只重视开发而轻视问题的定义,使软件产品无法满足用户的需求。对用户要求没有完整准确地认识就匆忙着手编写程序是许多软件开发工程失败的主要原因之一。事实上,只有用户真正了解他们自己的需要,软件开发人员需要做大量深入细致的调查研究工作,反复多次地和用户交流信息,才能真正全面、准确、具体地了解用户的要求。软件开发的基本过程应该是先从软件开发最初的工作问题是否存在一个可行的解决办法;接下来应该进行需求分析,也就是深入具体地了解用户的要求,在索要开发的目标系统功能问题上和永和取得完全一致的看法。经过软件定一阶段的准备工作后才能进入开发时期。 ④软件管理技术不能满足现代软件开发的需要,没有统一的软件质量管理规范。 文档缺乏一致性与完整性,从而导致失去管理的依据。必须认识到程序只是完整的软件产品的一个组成部分。一个软件产品必须由一个完整的配置组成,不应该只重视程序而应特别重视软件配置。其次,在项目管理方面,由于成本估计不正确,资金分配混乱和人员组织不合理以及进度安排无序,使软件技术方法无法实现。 ⑤在软件的开发与维护关系问题上存在错误的概念。在软件投入使用的漫长时期中不仅必须改正发现的每一个潜伏的错误,而且当环境变化时(例如,硬件或系统软件更新)还必须相应地修改软件以适应新的环境,特别是必须经常改进或扩充原来的软件以满足用户不断变化的需要。所有这些改动都属于维护工作,需要花费很大代价。所以做好软件定义时期的工作,是降低软件成本及提高软件质量的关键。如果软件开发人员在定义时期没有正确全面地理解用户需求,直到测试阶段或软件交付使用后才发现软件产品不完全符合用户的需要,这是在修改就已经为时已晚了。另外,在软件开发的不同阶段进行修改需要付出的代价是很不相同的,在早期引入变动,涉及的面较少,因而代价也比较低;而在开发的中期软件配置的许多成分已经完成,引入一个变动要对所有已完成的配置成分都作相应的修改,不仅工作量大,而且逻辑上也更复杂,所以付出的代价剧增;在软件已经完成时再引入变动,当然需要付出更高的代价。因此,把软件维护的概念引入软件开发的各个阶段,有利于日后的维护工作,从而建立起关于软件开发与维护的正确概念是十分重要的。 2.软件工程的定义 首先,采用工程化方法和途径来开发与维护软件。软件开发是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目。必须充分吸取和借鉴人类长期以来从事各种工程项目所积累的行之有效的原理、概念、技术和方法。应该推广使用在实践中总结出来的开发软件的成功技术和方法,并且研究探索更好更有效的技术和方法,尽快消除在计算机系统早期发展阶段形成的一些错误概念和做法。将软件的生成问题在实践上分为若干阶段,以便于分布而有计划地分工合作,在结构上建华若干逻辑模块。把软件作为工程产品来处理,按计划、分析、设计、实现、测试、维护和周期进行生产。 其次,应该开发和使用更好的软件工具。在软件开发的每个阶段都有许多繁琐重复的工作需要做,在适当的软件工具辅助下,开发人员可以把这类工作做的既快又好。如果把各个阶段使用的软件工具及合成一个整体,支持软件开发的全过程,则成为软件工程支撑环境。 最后,采取必要的管理措施。软件产品是把思维、概念、算法、组织、流程、效率、质量等多方面问题融为一体的产品。但它本身是无形的,所以有不同于一般的工程项目的管理。它必须通过人员组织管理、项目计划管理、配置管理等来保证软件按时高质量完成。 总之,为了解决软件危机,既要有技术措施(包括方法和工具),又要有必要的组织管理措施。软件工程正是从管理和技术两方面研究如何更好的开发和维护计算机软件的一门新兴学科。 软件工程是指导计算机软件开发和维护的工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,这就是软件工程。 1968年在联邦德国召开的国际会议上正式提出并使用了“软件工程”这个术语,运用工程学的基本原理和方法来组织和管理软件生产。后来还发展了与软件有关的心理学、生理学和经济学等方面的学科。在这期间,研究软件工程的专家学者们陆续提出了100多条关于软件工程的准则。这100多条软件工程准则可以概括为下述6条基本原则。 (1)用分阶段的生存周期计划严格管理 一个软件从定义到开发、使用和维护,直到最终废弃,要经历一个漫长的时期,通常把软件经历的这个漫长的时期称为生存周期。在软件开发与维护的漫长过程中,需要完成许多不同性质的工作,所以应把软件生存周期划分为若干个阶段,并相应地制定出可行的计划,然后按照这个计划对软件的开发与维护工作进行管理。不同层次的管理人员都必须严格按照计划各尽其职地管理软件开发与维护工作,绝不能受客户或上级人员的影响而擅自背离预定计划。 (2)坚持进行阶段评审 软件的质量保证工作不能等到编码阶段结束之后再进行。其理由是:① 大部分错误是在编码之前造成的,例如,根据统计,设计错误占软件错误的63%,编码错误仅占37%;② 错误发现与改正的越晚,所需支付的代价也越高。因此,在每个阶段都进行严格的评审,以便尽早发现在软件开发过程中所犯的错误,是一条必须遵循的重要原则。 (3)实行严格的产品控制 在软件开发过程中不应随意改变需求,因为改变一项需求需要付出较高的代价。但是,在软件开发过程中改变需求又是难免的。由于外部环境的变化,相应地改变用户需求是一种客观需要,显然不能硬性禁止客户提出改变需求的要求,而只能依靠科学的产品控制技术来顺应这种要求。也就是说,当改变需求时,为了保持软件个个配置成分的一致性,必须实行严格的产品控制,其中主要是实行基准配置管理。所谓基准配置又称为基线配置,它们是经过阶段评审后的软件配置成分(各个阶段产生的文档或程序代码)。基准配置管理也称为变动控制。一切有关修改软件的建议,特别是涉及到对基准配置的修改建议,都必须按照严格的规程进行评审,获得批准以后才能实施修改,绝对不能随意修改。 (4)采用现代程序设计技术 从提出软件工程的概念开始,人们一直把主要精力用于研究各种新的程序设计技术。20世纪60年代末提出的结构化程序设计,已经成为绝大多数人公认的先进的程序设计技术。以后又进一步发展出各种结构分析与结构设计技术。实践表明,采用先进的技术既可提高软件开发的效率,又可提高软件维护的效率。 (5)应能清楚地审查结果 软件产品是逻辑产品。软件开发人员(或开发小组)的工作进展情况可见性差,难以准确度量,从而使得软件产品的开发过程比一般产品的开发过程更难于评价和管理。为了提高软件开发过程的可见性,更好地进行管理,应该根据软件开发项目的总目标及完成期限,规定开发组织的责任和产品标准,从而使得所得到的结果能够清楚地被审查。 (6)合理安排软件开发小组的人员 软件开发小组的人员合理安排的原则是人员应该少而精,即小组成员的素质应该好,而人数不应过多。高素质的人员会大大提高软件的开发效率,且明显减少软件中的错误。此外,随着开发小组人员数目的增加,因交流问题和讨论情况而造成的通信开销也急剧增加,所以要保证软件开发小组人员少而精。 最后要强调的是必须不断灵活地改进软件工程实践。要按照软件工程的基本原理实现软件的工程化生产,只遵循上述这6条基本原理是不够的。因为,这样并不能保证软件开发的过程跟上时代的前进和技术的进步,因此必须不断灵活地改进软件工程实践。按照这个要求,就要积极主动地采用新的软件技术,而且要注意不断总结经验。例如:收集出错类型和问题报告等数据,这些数据不仅可以用来评价软件技术的效果,而且也可以用来指明必须着重开发的软件工具和应该优先研究的技术。 1.2.2 软件工程的基本内容与目标 1.软件工程的基本内容 从内容上划分软件工程学科分为理论、结构、方法、工具、环境、管理、规范等。理论与结构是软件开发的技术基础,包括程序正确性证明理论、软件可靠性理论、软件成本估算模型、软件开发模型、模块划分原理等。软件开发技术包括软件开发方法学、软件工具和软件开发环境。良好的软件工具可促进方法的研究,而先进的软件开发方法能改进工具。软件工具的继承构成软件开发环境。管理技术是实现开发质量的保证。软件工程管理包括软件开发管理和软件经济管理。软件开发管理包括人员分配、制定计划、确定标准与配置。软件经济管理的主要内容有成本估算和质量评价。 2.软件工程学研究的基本目标 (1)定义良好的方法学。即面向计划并开发维护整个软件生存周期的方法学。 (2)确定的软件成分。记录软件生存周期每一步的软件文件资料,按步骤显示轨迹。 (3)可预测的结果。在生存周期中,每隔一定时间进行复审。 软件工程学的最终目的,是以较少投资获得易维护、易理解、可靠、高效率的软件产品。软件工程学是研究软件结构、软件设计与维护方法、软件工具与环境、软件工程标准与规范、软件开发技术与管理技术的相关理论。 1.2.3 软件工程的原则 为了开发出低成本高质量的软件产品,软件工程学应遵循以下基本原则。 1.分解 分解是人类分析解决复杂问题的重要手段和基本原则,其基本思想是从实践上或是从规模上将一个复杂抽象的问题分成若干个较小的、相对独立的、容易求解的子问题,然后分别求解。软件瀑布模型,结构化分析方法,结构化设计方法,Jackson方法,模块化设计都运用了分解的原则。 2.抽象和信息隐蔽 尽量将可变因素隐藏在一个模块内,将怎样做的细节隐藏在下层,而将做什么抽象到上一层做简化,从而保证模块的独立性。这就是软件设计独立性要遵守的基本原则。模块化和局部性的设计过程使用了抽象和信息隐蔽的原则。 3.一致性 研究软件工程方法的目的之一,就是要使开发过程标准化,是软件产品设计有共同遵循的原则。要求软件文件格式一致,工作流程一致,且软件开发过程要标准化、统一化。 4.确定性 软件开发过程要用确定的形式表达需求,表达的软件功能应该是可预测的。用可测试性、易维护性、易理解性、高效率的指标来具体度量软件质量。 组织实施软件工程项目,从技术和管理上采取了多项措施后,项目的成功主要要达到的目标有:开发成本较低,软件的功能能够达到用户要求并具有较好的性能,软件具有良好的可移植性,易于维护且维护费用较低,软件的开发工作能按时完成并及时交付使用。 1.3 软件生存周期与软件开发模型 软件工程采用的生存周期方法是从实践角度对软件的开发与维护这个复杂问题进行分解,将软件生存漫长的时间分为若干阶段,每个阶段都有其相对独立的任务,然后逐步完成各个阶段的任务。 1.3.1 软件生存周期 软件生存周期是从提出软件产品开始,直到该软件产品被淘汰的全过程。研究软件生存周期是为了更科学地、有效地组织和管理软件的生产,从而使软件产品更可靠、更经济。采用软件生存周期划分软件的工程化开发,就是将软件开发分阶段依次进行。前一个阶段任务的完成是后一个阶段的前提和基础,而后一个阶段通常是将前一个阶段提出的方案进一步具体化。每一个阶段的开始与结束都严格的标准。前一个阶段结束的标准就是与其相邻的后一个阶段结束的标准。每一个阶段结束之前都要接受严格的技术和管理评审。不能通过评审时,就要重复前一阶段的工作直至通过上述评审后才能结束。采用软件生存周期的划分方法,使每一阶段的任务相对独立,有利于简化整个问题且便于不同人员分工协作。严格而科学的评审制度保证了软件的质量,提高了软件的可维护性,从而大大提高了软件开发的成功率和生产率。 软件生存周期一般分为以下阶段: (1) 问题定义; (2) 可行性研究; (3) 需求分析; (4) 概要设计; (5) 详细设计; (6) 编码; (7) 测试; (8) 运行与维护 在软件的研制和开发过程中:①要了解和分析用户的问题,以及经济、技术和时间等方面的可行性。②将用户的需求规范化、形式化。编写成需求说明书及初步的系统用户手册,提交评审。③将软件需求设计为软件过程描述,即设计人员将以确定的各项需求转化成一个相应的体系结构。结构的每一组成部分都是意义明确的模块,每个模块都与某些需求相对应。然后对每个模块的具体任务进行具体的描述。④编写代码,就是把过程描述遍编为机器可执行的代码。⑤测试,即发现错误,进行改正。⑥维护,包括故障的排除以及为适应使用环境的变化和用户对软件提出新的要求所作的修改。 软件生存期也可以分为三个大的阶段:计划阶段、开发阶段和维护阶段。 1.计划阶段 这里又可分两步:软件计划和需求分析。第一步,因为软件是计算机系统中的一个子系统,这样不但要从确定的软件子系统出发,确定工作域,即确定软件总的目标、功能等,开发这样的软件系统需要哪些资源(人力和设备),作出成本估算;而且还要求做出可行性分析,即在现有资源与技术的条件下能否实现这样的目标;最后要提出进度安排,并写出软件计划文档。上述问题都要进行管理评审。第二步,在管理评审通过以后,要确定系统定义和有效性标准(软件验收标准),写出软件需求说明书。还要开发一个初步用户手册,这里要进行技术评审。技术评审通过以后,再进行一次对软件计划的评审,因为这时对问题有了进一步的了解。而计划制定时,数据较少,且经验不足,所以对制定的计划需要进行多次修改,以尽量满足各种要求,然后再进入到开发阶段。 2.开发阶段 开发阶段要经过三个步骤:设计、编码和测试。首先对软件进行结构设计,定义接口,建立数据结构,规定标记。接着对每个模块进行过程设计、编码和单元测试。最后进行组合测试和有效性测试,对每一个测试用例和结果都要进行评审。 3.维护阶段 首先要做的工作是配置评审,检查软件文档和代码是否齐全,两者是否一致,是否可以维护等。下面要确定维护组织和职责,并定义表明系统错误和修改报告的格式。维护分为改正性维护、完善性维护和适应性维护等。维护内容广泛,有人把维护看成是第二次开发。要适应环境的变化,就要扩充和改进,但不是建立新系统。维护的内容应该通知用户,要得到用户的认可。然后则可进入修改,修改不只是代码修改,必须要有齐全的修改计划,详细过程以及测试等文档。 1.3.2 软件开发模型 为了反映软件生存周期内各
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服