1、1,软件的认识,2,软件无处不在,3,如果没有软件?,电脑,手机,相机将会是一堆废铜烂铁,4,软件如此重要,那么,你对软件了解多少?,5,一、软件的概念与特点,软件的概念1. 软件(Software)是计算机系统中与硬件相互依存的另一部分,它是包括程序、数据及其相关文档的完整集合。软件=程序+文档+数据,6,2(1)抽象性软件是一种逻辑实体,而不是物理实体。 (2)没有明显的制造过程。 (3)在软件的运行和使用期间,没有机械磨损与老化问题。 (4)软件开发和运行依赖于计算机系统。 (5)软件开发至今尚未完全摆脱手工工艺的开发方式。 (6)复杂性。 (7)高成本。 (8)软件工作涉及各种社会因素
2、,软件特点,7,系统软件:,应用软件:,操作系统软件(Windows、Unix、DOS、Linux等),语言编译程序(CFree、pascal语言编译器等),数据库管理系统(SQLServer 2000、Access等),软 件 识 别,文字处理软件、office办公软件、专用的财务软件、人事管理软件、计算机辅助软件(AutoCAD)、绘图软件(PS)、学校学生成绩管理软件。,8,软件分类,一般来讲软件被划分为系统软件、应用软件,其中系统软件包括操作系统和支撑软件(包括微软发布的嵌入式系统,即硬件级的软件,使电脑及其它设备运算速度更快更节能),9,系统软件,系统软件为计算机使用提供最基本的功能
3、,可分为操作系统和支撑软件,其中操作系统是最基本的软件 系统软件是负责管理计算机系统中各种独立的硬件,使得它们可以协调工作。系统软件使得计算机使用者和其他软件将计算机当作一个整体而不需要顾及到底层每个硬件是如何工作的。,10,1操作系统是一管理计算机硬件与软件资源的程序,同时也是计算机系统的内核与基石。操作系统身负诸如管理与配置内存、决定系统资源供需的优先次序、控制输入与输出设备、操作网络与管理文件系统等基本事务。操作系统也提供一个让使用者与系统交互的操作接口。 2支撑软件是支撑各种软件的开发与维护的软件,又称为软件开发环境(SDE)。它主要包括环境数据库、各种接口软件和工具组。著名的软件开发
4、环境有IBM公司的Web Sphere,微软公司的等。 包括一系列基本的工具(比如编译器,数据库管理,存储器格式化,文件系统管理,用户身份验证,驱动管理,网络连接等方面的工具)。,11,应用软件,但是系统软件并不针对某一特定应用领域。而应用软件则相反,不同的应用软件根据用户和所服务的领域提供不同的功能。 应用软件是为了某种特定的用途而被开发的软件。它可以是一个特定的程序,比如一个图像浏览器。也可以是一组功能联系紧密,可以互相协作的程序的集合,比如微软的Office软件。也可以是一个由众多独立程序组成的庞大的软件系统,比如数据库管理系统。,12,软件工程,一、什么是软件工程? 1软件工程是指导计
5、算机软件开发和维护的工程学科,采用工程的概念、原理、技术和方法来开发和维护软件,把经过时间考验而证明正确的管理技术和当前最好的技术方法结合起来,就是软件工程。,13,软件工程的本质特征,1 软件工程关注于大型程序的构造 2 软件工程的中心课题是控制复杂性 3 软件经常变化 4 开发软件的效率非常重要 5 和谐地合作是开发软件的关键 6 软件必须有效地支持它的用户 7 在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人创造产品,14,软件工程师,一般指从事软件开发职业的人。软件工程师10余年来一直占据高薪职业排行榜的前列,作为高科技行业的代表,技术含量很高。职位的争夺也异常激烈。软
6、件开发是一个系统的过程,需要经过市场需求分析、软件代码编写、软件测试、软件维护等程序。软件开发工程师在整个过程中扮演着非常重要的角色,主要从事根据需求开发项目软件工作。,15,开发流程,软件开发是根据用户要求建造出软件系统或者系统中的软件部分的过程。软件开发是一项包括需求捕捉,需求分析,设计,实现和测试的系统工程。软件一般是用某种程序设计语言来实现的。通常采用软件开发工具可以进行开发。,16,软件开发流程(Software development process)软件设计思路和方法的一般过程,包括设计软件的功能和实现的算法和方法、软件的总体结构设计和模块设计、编程和调试、程序联调和测试以及编写
7、、提交程序。,17,1 相关系统分析员和用户初步了解需求,然后列出要开发的系统的大功能模块,每个大功能模块有哪些小功能模块,对于有些需求比较明确相关的界面时,在这一步里面可以初步定义好少量的界面。 2 系统分析员深入了解和分析需求,根据自己的经验和需求做出一份文档系统的功能需求文档。这次的文档会清楚例用系统大致的大功能模块,大功能模块有哪些小功能模块,并且还例出相关的界面和界面功能。 3 系统分析员和用户再次确认需求。,18,4 系统分析员根据确认的需求文档所例用的界面和功能需求,用迭代的方式对每个界面或功能做系统的概要设计。 5 系统分析员把写好的概要设计文档给程序员,程序员根据所例出的功能
8、一个一个的编写。 6 测试编写好的系统。交给用户使用,用户使用后一个一个的确认每个功能,然后验收。,19,软件工程专业就业方向,1 可视化编程 2 WEB应用程序设计 3 软件测试 4 数据库管理 5 图形图像制作 6 网络构建技术 7 网络系统管理 8 多媒体制作 9 计算机办公应用,20,21,22,23,1.4软件过程,软件过程是为了获得高质量的软件需要完成 的一系列任务的框架,规定了完成各项任务 的工作步骤。瀑布模型快速原型模型增量模型螺旋模型,24,螺旋模型,风险驱动的螺旋模型适用于内部开发的大型 软件项目。 它可以理解为在每个阶段之间都增加了风险 分析的快速原型模型,25,瀑布模型
9、,问题定义,特点:1) 阶段间具有顺序性和依赖性2) 推迟实现的观点3) 质量保证的观点。,可行性研究,需求分析,总体设计,详细设计,编码与单元测试,综合测试,软件维护,软件定义时期,软件开发时期,软件维护时期,26,快速原型法,快速原型法是一种新型的软件开发方法,它使用交互的,快速建立起来的原型取代了形式的、僵硬的大量的规格说明,用户通过在计算机上实际运行和试用原型系统而向开发者提供真实的反馈意见。,27,快速原型模型,28,增量模型,这种模型把软件产品作为一系列的增量构件 来设计、编码、集成和测试。,29,需求计划,风险分析,风险分析,风险分析,原型,1,原型,2,原型,3,可运,行原型,
10、风险分析:,评价方案,识别风险,消除风险,累计成本,指定计划:,决定目标,方案限制,提交线,评审,生存期,计划,开发计划,组装测试,客户评价,软件,需求,需求,确认,设计确认验证,软件产品,设计,实现,验收,测试,编码,组装,测试,单元,测试,实施工程:,开发、验证,形成产品,30,本章小结,一、计算机软件工程学概述软件开发的错误观念软件危机软件工程 二、软件工程的基本原理和方法软件工程方法学生命周期方法学、面向对象的方法学 三、软件的生命周期软件定义、软件开发、软件维护 四、软件过程模型 瀑布模型、快速原型模型、增量模型、螺旋模型,31,第一章 软件工程学概述,1.1 软件危机 1.2 软件
11、工程 1.3 软件生命周期 1.4 软件过程,32,二、什么是软件危机,软件危机是指在计算机软件的开发和维护过 程中新遇到的一系统列严重问题,主要包括 下列两个方面的问题: 如何开发软件,以满足对软件的日益增长的需求; 如何维护不断增多的已有软件。,33,软件危机的具体表现: 1对软件开发成本和进度估计不足。 2用户对已完成的软件系统不满足。 3软件产品的质量无法保证。 4软件不可维护。 5没用与软件配套的完整的文档资料。 6软件成本逐年上升。 7软件开发跟不上计算机应用的发展。,34,三、产生软件危机的原因,1软件本身的特点:软件是计算机系统中的逻辑实体而不是物理实体,软件生产与硬件不同,在
12、它的开发过程中没有明显的制造过程。软件是通过人们的智力活动,把知识与技术转化成信息的一种产品。在软件的运行过程中,没有“用坏”的问题。软件维护意味着修正原来的设计,较为困难。,35,2软件专业人员对软件开发和维护存在糊涂观念,在实践过程中采用了错误的方法和技术: (1)忽视软件需求分析的重要性; (2)轻视软件维护。统计表明:软件维护费用占总费用的55%70%,36,四、解决软件危机的途径,1组织管理措施:组织良好、管理严密,使各类人员协同配合,共同完成软件开发的工程项目。 2使用开发软件成功的技术和方法,更好地使用软件工具,建立一个良好的软件工程支撑环境。,37,软件工程方法学,软件工程方法
13、学三要素:方法、工具和过程1 传统方法学(生命周期方法学) 软件生命周期:一个软件定义、开发、使用 和维护,直到最终被废弃,要经历的漫长的 时期,称为软件的生命周期。这种方法学把软件生命周期的全过程依次划 分为若干个阶段,然后顺序地完成每个阶段 的任务。,38,2 面向对象方法学这种方法学把数据和行为看成同等重要,它是一种以数据为主线,把数据和对数据的操作紧密结合起来的方法 主要概念:对象类继承消息,39,1.3软件生命周期,软件生命周期由软件定义、软件开发和软件维护三个时期组成,每个时期又可划分若干个阶段。 软件工程采用的生命周期方法学就是从时间角度对软件开发和维护的复杂性进行分解,把软件生
14、存的漫长周期依次划分为若干个阶段,每个阶段都有独立的任务,然后逐步完成每个阶段的任务。,40,软件工程的基本原理,1 用分阶段的生命周期计划严格管理 2 坚持进行阶段评审 3 实行严格的产品控制 4 采用现代程序设计技术 5结果应能清楚地审查 6 开发小组的人员应该少而精 7 承认不断改进软件工程实践的必要性,41,划分软件生存周期的阶段时应当递循的基本原则:使各阶段的任务之间尽可能相互独立,同一个阶段各项任务的性质尽可能相同,从而降低每个阶段任务的复杂程序,简化不同阶段之间的联系,有利于软件开发工程的组织管理。,42,问题定义,可行性研究,需求分析,总体设计,详细设计,编码与单元测试,综合测
15、试,软件维护,要解决的问题是什么?,问题性质、工程目标和规模的报告,分析员:实际用户+负责人,是否有解决办法?,分析员,高层逻辑模型,准确和具体的工程规模和目标,成本/效益分析等可行性报告,为了解决的问题,目标系统必须做什么?准确确定系统的功能,系统的逻辑模型 (数据流图+数据字典+简要算法),如何解决这些问题,模块划分软件结构,如何具体地实现系统:每个模块的流程图 (程序的详细规格说明),通过各种类型的测试,使软件达到预定的要求,写出正确的容易理解和容易维护的程序模块,通过各种必要的维护活动使系统持久地满足用户的需要,43,软件生命周期基本阶段,(1)软件定义时期:总目标的确定,可行性,采用策略,系统功能,所需资源与成本,工程进度表,也称为系统分析时期,分为所定义,可行性研究和需求分析。 (2)开发时期:具体设计和实现前面所定义的软件。分为:总体设计,详细设计,编码和单元测试,综合测试。 (3)维护时期:使软件尽量地满足用户需要,纠错,适应新环境,满足新需求,