软件工程开发.ppt
第6章,软件工程技术基础,2,第6章目标,掌握软件工程的基本原则了解软件开发的基本过程可行性论证需求分析概要设计详细设计软件编码软件测试软件维护了解软件开发中的系统分析与设计方法了解软件开发管理技术,焦油坑中挣扎的巨兽,4,软件危机,随着软件规模增大,复杂程度越来越高,软件的开发和维护过程中出现了一系列严重问题从20世纪60年代末开始出现“软件危机”,其主要表现对软件开发成本以及进度的估计常常很不准确 用户对已完成的软件系统不满意的现象经常发生 软件产品的质量往往难以保证 软件常常是不可维护的 软件通常没有适当的文档资料 软件成本在计算机系统总成本中所占的比例逐年上升 软件开发生产率提高的速度,远远比不上计算机应用技术的迅速普及,国外软件危机的实例,1963年美国飞往火星的火箭爆炸,造成1000万美元的损失。原因是FORTRAN程序:DO 5 I=1,3 误写为:DO 5 I=1.31967年苏联“联盟一号”载人宇宙飞船在返航时,由于软件忽略一个小数点,在进入大气层时因打不开降落伞而烧毁。1991 年2月25日美军位于沙特阿拉伯宰赫兰的军营被一枚成功突防的“飞毛腿”击中,死伤28人,国内软件故障实例,7,软件工程,软件工程是为了解决“软件危机”而提出来的“软件工程”其核心思想是采用工程的概念、原理、技术与方法对软件进行计划、开发和维护,按预期的进度和经费完成软件开发任务。所谓软件工程,就是研究大规模程序设计的方法、工具和管理的一门工程科学,8,“工程化”的基本原则,分解将复杂的、难操作的事物分解为较简单的、易处理的事物,然后一一加以解决计划统筹安排要解决问题的时间、费用等等,严格按计划组织工程实施规范工程实施过程中,严格按照各种规范、技术文件进行,9,软件工程的基本原则,划分软件生命期在时间上进行分解,将软件开发过程分解为一系列的分阶段的任务进行计划评审和一般工程项目一样,软件开发要严格按计划管理,坚持进行阶段评审编制软件文档在软件工程每一阶段都要编制完整、精确的文档,可行性研究与开发计划,需求分析,概要设计详细设计,开发/编码,维护阶段的测试,运行维护,软件工程按软件开发活动步骤应制定的计划项目实施总计划软件配置管理计划软件质量保证计划测试计划安全保密计划系统安装计划运行和维护管理计划必须严格按照计划执行必要的计划修改,必须经过严格的审批手续,文档具有非常重要的作用,10,软件开发基本都需要经历软件开发过程中的几个步骤但这几个步骤具体如何实施,根据具体项目不同,也有所区别制作具体软件时,开发步骤的具体实施方法称为软开发过程模型,软件开发过程模型,软件开发过程模型,瀑布模型,螺旋模型,软件开发过程模型,软件开发,可行性研究与计划,需求分析,设计,开发,评估/测试,维护,建造房屋,构想,分析,设计,构造,评估,维护,软件开发生命周期,一个软件从提出开发要求到抛弃不用的整个过程,被定义为软件的生存周期。采用生存周期方法就是从时间角度对软件开发和维护等复杂问题进行分解,将软件的生存周期划分为若干个阶段,采用各个击破的策略降低了整个软件开发的难度。,需求分析,所谓需求是指软件系统必须满足的所有功能、性能和限制等用户要求。通常包括功能要求、性能要求、可靠性要求、安全保密要求以及开发费用、开发周期、可使用的资源等方面的限制。需求说明书主要有三个作用作为用户和软件开发人员双方对开发的软件系统共同理解的成果;作为开发人员进行设计和编程的根据;作为软件开发完成后验收的依据。,需求分析阶段,需求分析,需求分析阶段的工作的4个方面 需求获取 需求获取是在同用户的交流过程中不断收集、积累用户的各种信息,并且通过认真理解用户的各项要求,澄清那些模糊的需求,排除不合理的,从而较全面地提炼系统的功能性与非功能性需求。需求分析 对获取的需求进行分析和整理,最终给出适合目标系统的解决方案和目标系统的逻辑模型。,需求分析,编写需求规格说明书需求规格说明书作为需求分析的阶段成果,可以为用户、分析人员和设计人员之间的交流提供方便,可以直接支持目标软件系统的确认,又可以作为控制软件开发进程的依据。需求评审 对需求分析阶段的工作进行复审,验证需求文档的一致性、可行性、完整性和有效性。,结构化分析方法,结构化分析方法的实质是着眼于数据流,自顶向下,逐层分解,建立系统的处理流程,以数据流图和数据字典为主要工具,建立系统的逻辑模型。,结构化分析方法,结构化分析的步骤如下:(1)通过对用户的调查,以软件的需求为线索,获得当前系统的具体模型;(2)去掉具体模型中非本质因素,抽象出当前系统的逻辑模型;(3)根据计算机的特点分析当前系统与目标系统的差别,建立目标系统的逻辑模型;(4)完善目标系统并补充细节,写出目标系统的软件需求规格说明;(5)评审直到确认完全符合用户对软件的需求。,面向对象的分析方法,面向对象的分析方法(OOA,Object Oriented Analysis method)OOA的任务是采用面向对象方法,把对问题论域和系统的认识理解,正确地抽象为规范的对象(包括类、继承层次)和消息传递联系。,软件设计,软件设计是软件工程的重要阶段,是一个把软件需求转换为软件表示的过程。软件设计的基本目标是用比较抽象概括的方式确定目标系统如何完成预定的任务,即软件设计是确定系统的物理模型。,软件设计,软件设计的重要性和地位概括为以下几点:(1)软件开发阶段(设计、编码、测试)占据软件项目开发总成本绝大部分,是在软件开发中形成质量的关键环节;(2)软件设计是开发阶段最重要的步骤,是将需求准确地转化为完整的软件产品或系统的唯一途径;(3)软件设计做出的决策,最终影响软件实现的成败;(4)设计是软件工程和软件维护的基础。,软件设计遵循软件工程的基本目标和原则,(1)抽象抽象是一种思维工具,就是把事物本质的共同特性提取出来而不考虑其他细节。(2)模块化模块是指把一个待开发的软件分解成若干小的简单的部分。(3)信息隐蔽信息隐蔽是指在一个模块内包含的信息(过程或数据),对于不需要这些信息的其他模块来说是不能访问的。,软件设计,(4)模块独立性模块独立性是指每个模块只完成系统要求的独立的子功能,并且与其他模块的联系最少且接口简单。内聚性是一个模块内部各个元素间彼此结合的紧密程度的质量。耦合性是模块间互相连接的紧密程度的度量。,软件编码,编码是设计的自然结果,即把软件设计的结果译成用某种程序设计语言书写的程序。编写程序时需要注意的方面(1)程序内部文档(2)语句构造(3)输入输出(4)效率,软件编码工作,开发阶段,对在原型创建阶段构建的用户界面进行最后的修改,构建数据库,通过添加代码使其具备功能,软件测试,软件测试是在软件投入运行前根据软件需求分析规格说明对软件编码进行查错和纠错。找错的活动称测试,纠错的活动称调试。可以说,软件测试是为了发现错误而执行程序的过程。,软件测试,软件测试的目的 测试是一个为了寻找错误而运行程序的过程 一个好的测试用例是指很可能找到迄今为止尚未发现的错误的用例 一个成功的测试是指揭示了迄今为止尚未发现的错误的测试 注意:测试的目的是得到一个无错的程序吗?,软件测试,静态测试是指被测试程序不在机器上运行,而是采用人工检测和计算机辅助静态分析的手段对程序进行检测。动态测试指基于计算机的测试,通过运行程序发现错误。一般意义上的测试大多是指动态测试。,软件测试,黑盒测试方法(1)等价类划分法(2)边界值分析法(3)错误推测法(4)因果图,软件测试,白盒测试是在程序内部进行,主要完成软件内部操作的验证。该方法把测试对象看作一个透明的盒子,测试人员须了解程序的内部结构和处理过程,以检查处理过程的细节为基础,对程序中尽可能多的逻辑路径进行测试,检验内部控制结构和数据结构是否有错,实际的运行状态与预期的状态是否一致。,常用软件开发模型,软件开发模型(Software Development Model)又称软件生存期模型或软件过程模型(Software Process Model),是软件开发实际过程的抽象与概括,是对软件开发过程各阶段之间关系的描述和表示。,瀑布模型是最早被提出和使用的软件开发模型。由于这个模型描述了软件生命的一些基本过程活动,所以它称为软件生命周期模型。,原型进化模型,原型进化模型的思路是:先开发一个原型软件系统交付用户使用,然后根据用户的使用意见和新的需求,对原型系统不断改进,推出新的软件版本,直到推出满足用户需求的最终软件版本。在这一模型中,软件定义、开发和软件验证是交替进行的,而不是像瀑布模型那样各个阶段是相互独立的。,螺旋模型,图书基本信息管理项目计划,图书基本信息管理项目 图书基本信息的存储、插入、删除和修改是其信息管理的主要内容,采用合理的存储方式会有利于其他处理操作的执行,对每种管理操作则应采用科学的算法,以期节省时间和内存资源。图书信息管理可采用线性结构的处理方式,主要进行插入、删除、查找和排序。线性结构在计算机中有两种存储形式:顺序存储和链式存储。,分析要点1 图书基本信息管理项目,是为学校图书馆开发的一个借书管理信息系统,学校的图书馆原来是采用手工的方式进行借书管理。2 图书管理系统的功能并不复杂,主要集中在接还书处理上。3 需要对项目开发时间的明确约定。,需求分析阶段任务,软件设计阶段任务,软件编码任务,软件测试阶段任务,42,第6章总结,掌握软件工程的基本原则了解软件开发的基本过程可行性论证需求分析概要设计详细设计软件编码软件测试软件维护了解软件开发中的系统分析与设计方法了解软件开发管理技术,