1、第一章 软件工程概述,1.1 软件工程概述,本章目标,了解软件的概念和特点了解软件的发展及软件危机了解软件工程及其原理掌握软件工程的过程掌握软件生存期,1.1 软件工程概述,本节主要内容: 软件的概念软件的特点软件的发展软件危机的产生及解决途径软件工程的发展和原理软件工程的过程软件生存期,程序员的信念,软件开发过程中的坎坎坷坷,仿佛只是人脸的凹凸不平,用 热水毛巾一把就可抹平。让我们高举程序主义、软件工程思想的伟大旗帜,紧密团结在以 Microsoft 为核心的软件公司周围,沿着比尔 盖茨的生财之道,不分白天黑夜地编程,把建 设有中国特色的软件产业的伟大事业全面推向 21 世纪。,1.1.1软
2、件的概念与特点,软件(Software):是计算机系统中与硬件相互依存的另一部分,它是包括程序、数据及其相关文档的完整集合。程序是按事先设计的功能和性能要求执行的指令序列;数据是使程序能正常操纵信息的数据结构;文档是与程序开发、维护和使用有关的图文材料。,1.1.1软件的概念与特点,软件的特点 :1软件是一种逻辑实体,不是具体的物理实体。2软件的生产与硬件不同,在它的开发过程中没有明显的制造过程。3在软件的运行和使用期间,没有硬件那样的机械磨损、老化问题。,1.1.1软件的概念与特点,图1.1.1 按使用特性分类,硬件失效率,软件失效率,1.1.1软件的概念与特点,4软件的开发和运行常常受到计
3、算机系统的限制,对计算机系统有着不同程度的依赖性。5软件的开发至今尚未完全摆脱手工艺的开发方式。6软件本身是复杂的。,1.1.1软件的概念与特点,7软件成本相当昂贵。 8相当多的软件工作涉及到社会因素。,1.1.2 软件的发展与软件危机,计算机软件经历了三个发展阶段:程序设计阶段,约为20世纪50至60年代程序系统阶段,约为20世纪60至70年代软件工程阶段,约为20世纪70年代以后,1.1.2 软件的发展与软件危机,计算机软件几十年来最根本的变化体现在 :人们改变了对软件的看法。软件的需求是软件发展的动力。软件工作的范围从只考虑程序的编写扩展到涉及整个软件生存期。,1.1.2 软件的发展与软
4、件危机,在软件技术发展的第二阶段的问题归结: 由于缺乏软件开发的经验和软件开发数据的积累,使得开发工作的计划很难制定。 作为软件设计依据的需求,在开发的初期阶段提得不够明确,或是未能得到确切的表达。 开发过程没有统一的、公认的方法论和规范指导,参加的人员各行其是。 未能在测试阶段充分做好检测工作,提交用户的软件质量差,在运行中暴露出大量的问题。,1.1.2 软件的发展与软件危机,软件危机就是在计算机软件的开发和维护过程中所遇到的一系列严重问题。 如果把各个阶段使用的软件工具有机地集合成一个整体,支持软件开发的全过程,则称为软件工程支撑环境。 软件工程正是从管理和技术两方面研究如何更好地开发和维
5、护计算机软件的一门新兴学科。,1.1.3 软件工程的产生及其原理,北大西洋公约组织(NATO)的科学委员会于1968年在联邦德国召开的有关研讨会上,首次提出了“软件工程”(Software Engineering)的概念,1.1.3 软件工程的产生及其原理,软件工程是指导软件开发和维护的工程类学科,它以计算机科学理论及其相关学科的理论为指导,采用工程化的概念、原理、技术和方法进行软件的开发和维护,把经过时间证明正确的管理措施和当前能够得到的最好的技术方法结合起来,以较少的代价获取高质量的软件。,1.1.3 软件工程的产生及其原理,软件工程专家B.W.Boehm提出了软件工程的七条基本原理: 用
6、分阶段的生存周期计划严格管理; 坚持进行阶段评审; 实施严格的产品控制; 采用现代程序设计技术; 结果应能清楚地审查; 开发小组的成员应该少而精; 承认不断改进软件工程实践的必要性。,1.1.4 软件工程过程,软件工程过程(Software Engineering Process)是为获得软件产品,在软件工具支持下由软件人员完成的一系列软件过程活动。,1.1.4 软件工程过程,软件过程过程通常包含四种基本的过程活动: 软件规格说明(P-plan):规定软件的功能及其运行的限制; 软件开发(D-do):产生满足规格说明的软件; 软件确认(C-chech):确认软件能够完成客户提出的要求; 软件演
7、进(A-action):为满足客户的变更要求,软件必须在使用的过程中演进。,1.1.4 软件工程过程,软件工程过程具有如下的特性: 可理解性。 可见性。 可支持性。 可接受性。 可靠性。 健壮性。 可维护性。 速度。,1.1.5 软件生存期,软件生存期的六个步骤,即制定计划、需求分析、设计、程序编码、测试及运行维护。, 制定计划(planning),确定要开发软件系统的总目标,给出它的功能、性能、可靠性以及接口等方面的要求;由分析员和用户合作。, 需求分析和定义,需求分析和定义(requirement analysis and definition)对待开发软件提出的需求进行分析并给出详细的定
8、义。软件人员和用户共同讨论决定。, 软件设计(software design),设计是软件工程的技术核心。在设计阶段,设计人员把已确定了的各项需求转换成一个相应的体系结构。概要设计详细设计, 程序编写(coding,programming),把软件设计转换成计算机可以接受的程序代码,即写成以某一种特定程序设计语言表示的“源程序清单”。这一步工作称为编码。, 软件测试(testing),测试是保证软件质量的重要手段,其主要方式是在设计测试用例的基础上检验软件的各个组成部分。单元测试,查找各模块在功能和结构上存在的问题并加以纠正;其次是进行组装此时,将已测试过的模块按一定顺序组装起来;最后按规定的
9、各项需求,逐项进行确认测试,决定已开发的软件是否合格,能否交付用户使用。, 运行/维护(running/maintenance),已交付的软件投入正式使用,便进入运行阶段。这一阶段可能持续若干年甚至几十年。软件在运行中可能由于多方面的原因,需要对它进行修改。,1.1.6 常用的软件生存期模型,软件生存期模型是从软件项目需求定义直至软件经使用后废弃为止,跨越整个生存期的系统开发、运作和维护所实施的全部过程、活动和任务的结构框架。软件生存期模型:瀑布模型、快速原型化模型、快速应用开发模型、渐增模型和螺旋模型等。,1瀑布模型(Waterfall Model),2快速原型化模型(Rapid Prototyping Model),3快速应用开发模型,4渐增模型(Incremental Model),5螺旋模型(Spiral Model),小结,软件是计算机系统中与硬件相互依存的另一部分,它是包括程序、数据及其相关文档的完整集合。 软件的发展经历了程序设计、程序系统和软件工程三个阶段。软件过程过程包含四种基本的过程活动:软件规格说明、软件开发、软件确认、软件演进。7软件生存期包括六个步骤,即制定计划、需求分析、设计、程序编码、测试及运行维护。,