800 likes | 940 Views
《软件工程》. Software Engineering. 葛文庚 15938089663 geng429@126.com. 信息工程学院. 引言. Microsoft 的比尔盖茨在一次展览会的演讲中谈到:假如 GM (美国通用汽车公司,别克、雪佛兰、凯迪拉克)的技术能像计算机技术那样发展,我们现在应该能用 25 美元买到一辆 1 加仑汽油跑 1000 英里的汽车。 ---《 扬子晚报 》.
E N D
《软件工程》 Software Engineering 葛文庚 15938089663 geng429@126.com 信息工程学院
引言 • Microsoft的比尔盖茨在一次展览会的演讲中谈到:假如GM(美国通用汽车公司,别克、雪佛兰、凯迪拉克)的技术能像计算机技术那样发展,我们现在应该能用25美元买到一辆1加仑汽油跑1000英里的汽车。 ---《扬子晚报》
针对比尔盖茨的讲话,GM反唇相讥:如果GM发展的技术像Microsoft的软件那样,我们现在开的汽车会有以下特点: • 你的汽车可能毫无道理的每天抛锚两次 • 每次公路上重新画线时,你都得买辆新车 • 有时候你的车在高速公路上莫名其妙的熄火,你必须accept,然后restart • 有时候你的车在左拐弯时突然shutdown了,无法restart,你必须重新安装(reinstall)发动机 • 当你买了“轿车95”或“轿车NT”后,每次车上只能坐一个人,你要给其他的人再买椅子 • Macintosh牌汽车更可靠、更便宜、更快、也更容易开,但是只能在5%的道路上行驶 • 油量、水温和其它警告灯将由一个“GENERAL CAR FAILURE”的警告灯所代替 • 新座椅要求大家屁股的尺寸相同 • 气囊系统弹出前询问“Are you sure?”,要求你加以确认 • 有时候你的汽车会锁死车门使你无法进入汽车,你得不停的提门把手、拿钥匙捅、晃天线,直到打开车门
我们且不考虑GM的言辞是否过于偏激,但Microsoft公司作为全球最大的计算机软件生产商,拥有一大批优秀的项目经理、软件工程师、程序员,具有丰富的软件开发和项目管理经验,开发出来的软件仍然不能很好的保证质量,这是不争的事实。我们且不考虑GM的言辞是否过于偏激,但Microsoft公司作为全球最大的计算机软件生产商,拥有一大批优秀的项目经理、软件工程师、程序员,具有丰富的软件开发和项目管理经验,开发出来的软件仍然不能很好的保证质量,这是不争的事实。 • 我们几乎每个人在使用Windows操作系统时,都碰到过死机现象 这是为什么呢?
与硬件相比,软件的本质特征是什么? • 为什么硬件的可靠性可以达到很高的程度,而软件却不能做到bug-free? • 什么样的软件可以称作是一个好软件,或者说好软件具有什么样的特点? • 目前存在哪些方法和技术能够有效地提高软件的质量,做出好软件?
软件工程简介 • 软件工程是计算机专业的一门重要的专业基础课,它对于培养学生的软件素质,提高学生的软件开发能力与软件项目管理能力具有重要的意义。 • 1995年,Standish Group针对系统开发成功的研究表明,所有的开发项目中有32%的项目在它们结束之前被中止。此外多于一半的软件项目花费的成本相当于原来预算的2倍。
课程的性质、目的 • 软件工程是软件工程专业的一门核心课程。 • 通过本课程的学习,使学生掌握系统的软件开发理论、技术和方法,使用正确的工程方法开发出成本低、可靠性好并在机器上能高效运行的软件,为今后从事软件开发和维护打下坚实的基础。
学生任务 • 通过本课程的学习,使学生能真正了解软件开发的整个过程。学生要结合实际软件项目,从问题定义开始,经过可行性研究、需求分析、概要设计、详细设计、编码直到最后要对自己开发的软件进行测试,经历一个软件开发的全过程,掌握软件开发的基本技能和方法。
主要内容 • 软件工程的基本概念 • 软件开发过程、活动、方法学 • 软件开发各阶段的任务、技术、方法 • 软件开发的两种方法:传统与面向对象方法 • 软件的测试与维护 • 软件开发的项目管理 • 软件质量保证
教材 本书全面系统地讲述了软件工程的概念、原理和典型的方法学,并通过分析一个实际案例“开放实验室管理系统”,帮助理解软件需求分析与建模以及设计与实现的方法和过程,特别适合用做应用型人才培养的教材。 网络资源:http://it.jit.edu.cn/netclass
参考书 Software Engineering, Ian Sommerville , Pearson Education Asia 《软件工程基础与实用教材》沈文轩等 《软件工程导论》张海藩,清华大学出版社 《软件工程—原理、方法与应用》史济民,高等教育出版社 《软件工程技术概论》朱三元,科学出版社 《实用软件工程》郑人杰,清华出版社 《现代软件工程》(上中册)周之英,科学出版社 《软件工程理论与实践》译文,高教出版社 《现代软件工程》陈松桥,北方交大出版社
学习要求 • 要求学生有刻苦学习,持之以恒的精神。本课程的性质与其说是一门技术性很强的课程,不如说更像一门管理学科的课程,很多规定都是国内外大师的经验总结,不能误认为无用或现在用不上而放弃学习。 • 要求学生能够学以致用,善于将理论与实际结合,才能巩固课内学到的知识,并能融会贯通。
学习建议 • 在正文中介绍了不少软件工程的基本原则和基本方法,在学习时,可以根据你的实践,认真思考一下为什么。不但知其然,而且知其所以然,这样会记得牢一些,不会看过就忘。
考核 • 考试课程 • 总成绩=平时成绩(10%)+实验成绩(30%)+考试成绩(60%)
第一讲 软件工程学概述 • 本章学习目标 1.了解软件的概念 2.了解软件开发的发展历程 3.掌握软件工程的概念、原理和基本内容 4.掌握软件生命周期 5.理解软件过程模型
1 软件 • 软件由计算机程序、数据及文档组成。 • 程序是能够完成预定功能和性能的一组计算机指令 • 数据是程序在执行过程需要输入、处理和输出的内容和结构 • 文档是描述程序的设计和使用的部分
软件的特点 • 抽象性 • 软件生产无明显制造过程 • 无磨损性 • 对计算机硬件依赖性 • 软件的手工开发方式 • 软件本身复杂性 • 软件的高成本(德国的一款专业设计3D的软件:3DMAX(正版)官方售价:2000000元RMB )
软件的分类 • 软件与硬件、数据库、人、过程等共同构成计算机系统。 • 软件种类可以从功能、规模、工作方式、服务对象、实验频度、失效影响六个方面进行划分: • 按功能分类 • 应用软件:管理软件、实时软件、科学计算、数据处理、嵌入式软件等 • 系统软件:操作系统、网络系统、编译器、工具软件等
中国的软件产业 • 主权大国必须建立基于自主技术的、完整的软件产业体系。 • 软件本国提供率:中国1/3左右,美国97%。中国盗版软件比例大 • 软件人才结构不合理,缺乏中高级软 件人才,软件人员缺乏软件工程化的概念。
2软件危机 • 软件危机指的是在计算机软件的开发和维护过程中所遇到的一系列严重问题。 • 软件危机的主要特征 • 软件价格在整个项目投入中的比例不断升高; • 软件开发成本严重超标; • 软件开发周期大大超过规定日期; • 软件质量难于保证; • 软件修改、维护困难; • 失败的根本原因在于:开发人员写出的东西达不到用户要求 (人的问题、技术问题)
产生软件危机的原因 计算机应用发展 个体化软件 开发方法 客 观 因 素 主 观 因 素 软件数量多 规模大,功能复杂 无开发过程指导 无开发过程管理 主客观不相适应 软件成本高、质量低、维护困难 软件危机
软 件 工 程 改正一个问题需付出的代价 5.0 改正一个问题估计的工作量 2000 改正一个问题的估计费用 1000 2.5 0.5 200 20 0.05 需 求 分 析 结构设计 详细设计 编码 集成测试 系统测试 现场 (人天) (美元)
管理措施 • 项目管理 • 配置管理 • 过程管理 • 质量控制 • 技术措施 • 开发过程 • 开发技术与方法 • 开发工具 软件工程学 (软件产品开发工程) 解决办法 用工程化的理论、方法和技术来管理软件开发过程,从管理和技术两方面措施对软件开发进行规范化和理论研究即产生了软件工程学科
3软件工程 • 1968 年德国人 Bauer 在北大西洋公约组织会议上的定义: "建立并使用完善的工程化原则 , 以较经济的手段获得能在实际机器上有效运行的可靠软件的一系列方法"。 • 1983 年 IEEE 的软件工程定义: "软件工程是开发,运行 , 维护和修复软件的系统方法"。 • 1993 年 IEEE 的一个更加综合的定义: "将系统化的,规范的,可度量的方法应用于软件的开发 , 运行和维护的过程,即将工程化应用于软件中"。
软件工程的基本原理 1983年,著名软件工程专家B.W.Boehm提出了七条获得公认的软件工程的基本原理: (1)分阶段的生命周期计划严格管理性。 (2)坚持进行阶段评审。 (3)实行严格的产品控制。 (4)采用现代程序设计技术。 (5)结果应能清楚地审查。 (6)开发小组的人员应少而精。 (7)承认不断改进软件工程实践的必要性。
软件工程框架 • 软件工程框架给出了软件工程三个主要方面。 • 软件工程目标—包括可用性、正确性和合算性,规定了软件工程实践的结果(即软件)应具有的基本性质; • 软件工程过程—包含的基本活动有需求、分析与设计、实现、确认与测试、维护与支持; • 软件工程的四条原则--采用适宜的开发模型,使用恰当的开发方法,提供高质量的工程支持,实施有效的工程管理,从四个方面指导每一项工程的活动,以实现软件工程目标。
目标 性 性 性 组 织 过 程 用 确 算 可 正 合 支 持 过 程 基本过程 选取适宜的开发模型 采用合适的设计方法 原则 提供高质量的工程支持 过程 重视软件工程的管理 软件工程的目标:追求高质量高效率 实现目标的过程:完成产品加工的过程。 进行过程应遵守的原则:行进中的轨道约束。
软件工程的三要素 • R. Pressman在他的《软件工程》教程中指出:软件工程的三个要素是方法、工具、过程。 • 方法是完成软件开发的各项任务的技术方法,回答“如何做”的问题; • 工具是为方法的运用提供自动的或半自动的软件支撑环境; • 过程是为了获得高质量的软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。
软件工程的目标与原则 • 软件工程的主要目标:提高软件的质量和软件生产率。 • 软件工程需要达到的基本目标: • 付出较低的开发成本 • 达到要求的软件功能 • 取得较好的软件性能 • 开发的软件易于移植 • 需要较低的维护费用 • 能按时完成开发,及时交付使用
在软件开发过程中必须遵循的软件工程原则: • 抽象与自顶向下、逐层细化 采用分层抽象的方法,有效控制软件开发的复杂性。 • 模块化 把问题分解为若干较小的较易解决的模块,有助于信息隐蔽和抽象。 • 信息隐蔽和数据封装 将模块中的软件设计决策封装在模块内部,使得模块实现与使用分离,有助于控制修改局部化。
局部化 在一个物理模块内集中逻辑上相互关联的计算机资源,促使聚合具有特定目的的事物。 • 一致性 整个软件系统的模块使用一致的设计策略、编程风格,保持程序内部接口的一致性、软件与硬件接口的一致性、系统规格说明与系统行为的一致性。 • 完备性 软件系统中不丢失任何成分。 • 可验证性 系统分解应当遵循易检查、易测试和易评审的原则,以便保证系统的正确性。
软件工程学 • “软件工程学”是一门交叉学科涉及计算机科学、管理科学、工程学和数学。 • 软件工程则是培养软件工程师。 软件开发方法学 软件工具 软件工程环境 软件开发技术 软件工程学 软件管理学 软件经济学 软件工程管理
1.3 软件工程方法学 软件工程方法学是软件开发的系统化方法,是一套完整的软件开发技术,包括原则、方法、过程和工具,是每一阶段活动、产品、验收的步骤和完成准则。 软件工程方法学应用最广泛的是结构化方法和面向对象方法。 7
结构化方法 结构化方法(SM,Structured Method)是传统的软件开发方法,基本思想是:用系统工程的思想和工程化的方法,按照用户至上的原则,结构化、模块化、自顶向下地对系统进行分析和设计,把一个复杂问题的求解过程分阶段进行,使得每个阶段处理的问题都控制在容易理解的范围内。 7
2. 结构化方法过程 (1)结构化分析(SA,Structured Analysis)。 (2)结构化设计(SD,Structured Design)。 (3)结构化实现(SP,Structured Programming)。 7 3. 结构化方法特点 (1)严格的分阶段计划。 (2)瀑布式开发模式。 (3)严格的技术审查和管理复审。 (4)各阶段采用结构化技术。
面向对象方法 面向对象方法(Object-Oriented Method)是一种把面向对象思想应用于软件开发过程,来指导开发活动的系统方法,简称OO(Object-Oriented)方法,是建立在“对象”概念基础上的方法学。 所谓面向对象就是基于对象概念,以对象为中心,以类和继承为构造机制,认识、理解、刻画客观世界,设计、构建相应的软件系统。 7
2 面向对象方法 面向对象方法模型 7
2. 面向对象方法过程 (1)面向对象分析(OOA,Object-Oriented Analysis)。 (2)面向对象设计(OOD,Object-Oriented Design)。 (3)面向对象的编程(OOP,Object-Oriented Programing)。 (4)面向对象测试(OOT,Object-Oriented Test)。 7 3. 面向对象方法特点 (1)以对象作为基本的软件构件。 (2)软件定义和实现的统一。 (3)重视软件复用。 (4)通过逐步演化来完成软件开发。
敏捷方法 敏捷方法是一种针对用户需求迅速变化的现实情况,采用短周期交付形式和协作开发的轻量级软件开发方式。相对于“非敏捷”,更强调程序员团队与业务专家之间的紧密协作、面对面的沟通、频繁交付新的软件版本、紧凑而自我组织型的团队、适应需求变化的代码编写,也更注重软件开发中人的作用。 7
1. 敏捷方法特点 (1)追求软件交付使用这一终极目标。 (2)强调全面合作和交流。 (3)重视软件开发中人的个性。 (4)强调团队的力量。 (5)灵活采用各种开发和管理方式。 7
2. 敏捷方法原则 (1)最优先的目标是通过尽早交付有价值的软件来满足用户需求。 (2)即使在开发后期,也能适应需求变化,能够驾驭变化,帮助用户取得竞争优势。 (3)频繁交付可使用的软件,时间间隔从几周到几个月,间隔越短越好。 (4)整个开发过程中,业务人员和开发者应该在一起工作。 (5)以积极主动的员工为主体进行软件开发,并且提供适宜环境、满足员工需要、信任员工工作。 (6)开发团队内外最有效率和效果的信息传达方式是面对面交流。 7
2. 敏捷方法原则 (7)可用的软件是进度的主要度量标准。 (8)提倡可持续开发,管理者、开发人员和用户应始终保持稳定的节奏。 (9)简单,尽可能减少工作量至关重要。 (10)强调先进技术和良好设计,以不断提高敏捷性。 (11)最好的架构、需求和设计来源于自我组织的团队。 (12)团队定期总结提高效率的方法,并相应调整团队行为。 7
ISO 9000定义:软件工程过程是把输入转化为输出的一组彼此相关的资源和活动。 从软件开发的观点看,它就是使用适当的资源(包括人员、硬软件工具、时间等),为开发软件进行的一组开发活动,在过程结束时将输入(用户要求)转化为输出(软件产品)。 4软件工程过程与软件生存周期
软件生存周期各阶段的主要任务 • 问题的定义及规划 • 需求分析 • 软件设计 • 程序编码 • 软件测试 • 运行维护
开发策划。主要完成问题定义、可行性论证、制定开发计划和项目申报工作,明确“要解决的问题是什么”。开发策划。主要完成问题定义、可行性论证、制定开发计划和项目申报工作,明确“要解决的问题是什么”。 • 需求分析。需求分析和定义阶段任务不是具体地解决问题,而是确定软件须具备的具体功能、性能等,即“必须做什么”及其他指标要求。 • 概要设计。主要设计软件的结构,结构的组成模块,模块的层次结构、调用关系及功能。并设计总体数据结构等。
(4) 详细设计。对模块功能、性能、可靠性等进行具体技术描述,并转化为过程描述。 • (5) 编写程序。又称编码,将模块的控制结构转换成程序代码。 • (6) 测试。为了保证软件需求和质量,在设计测试用例基础上对软件进行检测 • (7) 运行维护。对交付并投入使用的软件进行各种维护,并记录保存文档。