第1章初识软件工程/内容介绍1.1软件与软件危机1.2软件工程的由来1.3软件的开发方法1.4软件生存周期1.5了解软件开发模型1.6习题/1.1软件与软件危机1.1.1怎样理解软件1.1.2软件的特点1.1.3产生软件危机的原因/1.1.1怎样理解软件随着计算机技术的发展,对软件在不同阶段有不同的认识。计算机发展的初期,硬件的设计和生产是主要问题,那时的所谓软件就是程序,甚至是机器指令程序,它们处于从属的地位。随后社会对计算机提出了更高的要求,软件在计算机系统中的比重越来越大,这时软件的含义就成了文档加程序。现在对软件的正确理解应该是,软件是计算机系统中与硬件相互依存的部分,它包括程序及其相关文档。程序是计算机程序所需的阐述性资料。/1.1.2软件的特点软件包括三个方面:①一个或多个计算机程序,这些程序执行时能够提供期望的功能性能;②一个或多个数据结构,这些数据结构使得程序能够完全操纵信息;③一个或多个文档,这些文档描述了程序的分析、设计、实现和维护的细节及使用说明。/1.1.2软件的特点软件不同于硬件的特征:1.软件的质量是“开发”出来的,不是“制造”出来的2.软件可能会被“废弃”,但不会被“用坏”3.过去的软件大多是“定制”的,而不是“装配”的/1.1.3产生软件危机的原因出现软件危机的原因:1.软件维护费用急剧上升,直接威胁计算机应用的扩大。2.软件生产技术进步缓慢,是加剧这一软件危机的重要原因。/1.2软件工程的由来1.2.1软件工程的产生和发展1.2.2软件工程的定义浅谈1.2.3理解软件工程的作用1.2.4软件工程研究的内容/1.2.1软件工程的产生和发展为了摆脱软件危机造成的困境,北大西洋公约组织(NATO)的科学委员会于1968年在联邦德国召开的有关研讨会上,首先提出了“软件工程”(SoftwareEngineering)的概念,其主要思路是把人类长期以来从事各种工程项目所积累起来的行之有效的原理、概念、技术和方法,特别是人类从事计算机硬件研究和开发的经验教训,应用到软件的开发和维护中。/1.2.1软件工程的产生和发展软件工程是随着计算机系统的发展而逐步形成的计算机科学领域中的一门学科。软件工程的发展可分为4个时期。1.20世纪40年代中期到60年代中期这个时期计算机硬件从电子管电子计算机发展到晶体管电子计算机,价格昂贵,运算速度低,存储量小。软件通常是规模较小的程序,软件的设计开发者和使用者往往是同一个人。软件设计通常只注意如何节省存储单元、提高运算速度,除了程序清单之外,没有其他任何文档资料。/1.2.1软件工程的产生和发展这个时期计算机硬件发展到集成电路计算机,运算速度和内存容量都相应提高了。出现了“软件作坊”,许多用户不再自己开发软件,而是去“软件作坊”购买软件。1968年北大西洋公约组织(NATO)的计算机科学家在联邦德国召开国际会议,正式提出了“软件工程”(SoftwareEngineering)的术语。从此一门新兴的工程学科诞生了。当时“软件工程’’还处于学术研究阶段,但已对软件开发产生了巨大影响。2.20世纪60年代中期到70年代中期/1.2.1软件工程的产生和发展这个时期硬件发展到大规模集成电路计算机,计算机硬件的功能和质量都不断提高。计算机应用不断地扩大,软件开发生产率提高的速度远远跟不上计算机应用迅速普及深入的趋势,软件产品供不应求,软件危机日益严重,为了对付不断增长的“软件危机”,软件工程学把软件作为一种产品批量生产。3.20世纪70年代中期到80年代/1.2.1软件工程的产生和发展计算机系统发展的第四代不再是单台的计算机和计算机系统,而是计算机软件和硬件的综合效果。由复杂操作系统控制的强大桌面机、广域网和局域网,与先进的应用软件相互配合,计算机体系结构从集中的主机环境转变为分布式的客户机服务器环境。软件开发的技术如下:面向对象技术;专家系统和人工智能软件;人工神经网络软件;并行计算、网络计算机、虚拟现实技术、多媒体技术和现代通信技术。4.20世纪80年代以后/1.2.2软件工程的定义关于软件工程的定义,目前尚无统一、一致的定义,下面给出几个有代表性的定义。1.FritzBauer在NATO会议上给出的定义软件工程是建立和使用一套合理的工程原则,以便获得经济的软件,这种软件是可靠的,可以在实际机器上高效地运行。2.IEEE在软件工程术语汇编中的定义软件工程是:①将系统化的、严格约束的、可量化的方法应用于软件的开发、运行和维护,即将工程化应用于软件;②在①中所述方法的研究。/1.2.2软件工程的定义3.《计算机科学技术百科全书》中的定义软件工程是应用计算机科学、数学及管理科学等原理,开发软件的工程。软件工程借鉴传统工程的原则、方法,以提高质量、降低成本为目的。其中,计算机科学、数学用于构造模型与算法,工程科学用于制定规范、设计范型(paradigm)、评估成本及确定权衡,管理科学用于计划、资源、质量、成本等管理。/1.2.3理解软件工程的作用从历史上讲,软件工程的作用,是为了克服上个世纪60年代出现的软件危机(SoftwareCrisis),这种危机表现为软件开发的成本大、进度慢、维护难和质量得不到保障。从当前来讲,软件工程的作用,就是告诉人们怎样去开发软件和管理软件。具体地讲,它表现在与软件开发和管理有关的人员和过程上。/1.2.3理解软件工程的作用从软件项目团队来讲,软件工程的作用在于:在规定的时间内,按照规定的成本,完成预期质量目标(软件的功能、性能和接口达到需求报告标准)的软件。从软件发展进程来讲,软件工程的作用在于:克服软件危机,控制软件进度,节约开发成本,提高软件质量。从软件企业本身来讲,软件工程的作用在于:持续地规范软件开发过程和软件管理过程,不断地优化软件组织的个人素质和集体素质,从而逐渐增强软件企业的市场竞争实力。/1.2.4软件工程研究的内容软件工程研究的主要内容是软件开发技术和软件管理两方面。在软件开发技术中,主要研究软件开发方法、软件开发过程、软件开发工具和环境。在软件开发管理中,主要是研究软件管理学、软件经济学、软件心理学等。/1.3软件的开发方法1.3.1面向过程的方法1.3.2面向数据的方法1.3.3面向对象的方法/1.3.1面向过程的方法面向过程的方法包括面向过程需求分析、面向过程设计、面向过程编程、面向过程测试、面向过程维护、面向过程管理。面向过程的方法又称结构化方法,习惯上叫做结构化分析、结构化设计、结构化编程、结构化测试、结构化维护。面向过程的方法的特点是:程序的执行过程不由用户控制,完全由程序控制。面向过程的方法的优点是简单实用,缺点是维护困难。面向过程的方法,在军事上的实时跟踪监控系统中有很好的应用。/1.3.2面向数据的方法面向数据的方法,也称为面向元数据(Metadata)的方法。元数据是关于数据的数据,组织数据的数据。面向数据方法的要点是:1.数据(Data)位于企业信息系统的中心。信息系统就是对数据的输入、处理、传输、查询和输出。2.只要企业的业务方向和内容不变,企业的元数据就是稳定的,由元数据构成的数据模型(DataModel)也是稳定的。/1.3.2面向数据的方法3.对元数据的处理方法是可变的。用不变的元数据支持可变的处理方法,即以不变应万变,这就是企业信息系统工程的基本原理。4.企业信息系统的核心是数据模型。数据模型包括概念数据模型CDM(ConceptualDataModel)和物理数据模型PDM(PhysicsDataModel)。数据模型的表示形式是E-R图,E-R图要用CASE工具设计。例如,PowerDesigner,OracleDesigner或ERwin,它们不但具有正向设计功能,而且具有逆向分析功能,这样才能实现快速原型法。5.信息系统的实现(编码)方法主要是面向对象,其次才是面向数据和面向过程。6.用户自始至终参与信息系统的分析、设计、实现与维护。/1.3.2面向数据的方法面向数据方法的优点是通俗易懂,特别适合信息系统中数据层(数据库服务器)上的设计与实现,缺点是实现窗口界面较困难。面向数据的方法,与关系数据库管理系统紧密地捆绑在一起,只要面向对象数据库不能完全替代关系数据库,这种方法就不会终结。面向数据的方法在电子商务中应用有:网站后台数据库服务器上的数据处理和数据传输,其软件都是利用面向数据的方法设计与实现的。/1.3.3面向对象的方法面向对象方法起源于面向对象编程语言。面向对象方法包括分析、设计和实现活动。它是一种把面向对象的思想运用于软件开发过程,指导开发活动的系统方法,建立在“对象”概念(对象、类和继承)基础上的方法学基于对象概念,以对象为中心,以类和继承为构造机制来认识、理解、刻画客观世界和设计、构建相应的软件系统。/1.3.3面向对象的方法面向对象方法的应用,目前有两种方式:(1)在分析、设计、实现活动中完全采用面向对象的技术;(2)传统的功能分解方法与面向对象方法结合使用。即功能分析、面向对象的设计和实现,以及面向对象分析和设计、实现用过程式语言。面向对象分析的任务就是通过分析问题域建立系统的概念模型,并用相应的符号系统表示。/1.3.3面向对象的方法面向对象设计是在面向对象分析的基础上进行系统设计,包括交互过程和用户接口、任务管理、全局资源协调并确定边界、各个类的存储和数据格式。面向对象实现就是用面向对象程序设计语言来实现面向对象设计,因为该类语言支持对象、运行多态性和继承,因此比较容易,如果使用非面向对象程序设计语言,则需要特别注意和规定保留程序的面向对象式的程序结构。/1.4软件生存周期软件生存周期是指软件产品或软件系统从产生、投入使用到被淘汰的全过程。软件生存周期大致可以分为6个阶段:计算机系统工程、需求分析、设计、编码、测试、运行和维护。/1.4软件生存周期软件生存周期是指软件产品或软件系统从产生、投入使用到被淘汰的全过程。软件生存周期大致可以分为6个阶段。1.计算机系统工程2.需求分析3.设计4.编码5.测试6.运行和维护/1.5软件开发模型1.5.1瀑布模型1.5.2快速原型模型1.5.3渐增模型1.5.4螺旋模型1.5.5快速应用开发模型/1.5软件开发模型根据软件生产工程化的需要,生存周期的划分也有所不同,从而形成了不同软件生存周期模型(SWlifecyclemodel),或称软件开发模型。软件开发模型可定义为:它是软件开发全部过程、活动和任务的结构框架。需要注意的是:开发模型仅对开发、运作、维护过程有意义/1.5.1瀑布模型瀑布模型遵循软件生存期的划分,明确规定每个阶段的任务,各个阶段的工作顺序展开恰如奔流不息拾级而下的瀑布。问题定义可行性研究需求分析概要设计详细设计编码软件测试运行维护计划时期开发时期运行维护时期瀑布模型把软件生存周期分为计划、开发、运行3个时期。这3个时期又可细分为若干个阶段:计划时期可分为问题定义、可行性研究两个阶段,开发时期分为需求分析、概要设计、详细设计、程序设计、软件测试等阶段,运行时期则边运行边维护。/1.5.1瀑布模型瀑布模型软件开发有以下几个特点。1.软件生存周期的顺序性2.尽可能推迟软件的编码3.保证质量/1.5.2快速原型模型所谓快速原型是快速建立起来的可以在计算机上运行的程序,它所能完成的功能往往是最终产品能完成的功能的一个子集(展示了目标系统的关键功能)。听取用户意见,需求分析快速构造原型用户运行测试原型实现最终产品修改原型满意不满意快速原型模型的第一步是建造一个快速原型,实现客户或未来的用户与系统的交互,用户或客户对原型进行评价,进一步细化待开发软件的需求。通过逐步调整原型使其满足客户的要求,开发人员可以确定客户的真正需求是什么;第二步则在第一步的基础上开发客户满意的软件产品。/1.5.2快速原型模型快速原型模型的主要优点:不带反馈环的,这正是这种过程模型软件产品的开发基本上是线性顺序进行的。能做到基本上线性