810 likes | 922 Views
现代软件工程. 计算机信息工程学院 2004 年 9 月. 授课教师:李德生 答疑时间:周三下午 答疑地点:计算机应用教研室 E_mail: Lids_cs@126.com. 第一章 软件工程概述. §1.1 软件工程的基本概念、特点和分类 1.1.1 软件的概念、特征 计算机软件是程序、数据及相关文档的集合。. Software=Programming + Documents Programming = Data Structure + algorithm. §1.1 软件工程的基本概念、特点和分类. 软件的特征: P1 。.
E N D
现代软件工程 计算机信息工程学院 2004年9月
授课教师:李德生 答疑时间:周三下午 答疑地点:计算机应用教研室 E_mail: Lids_cs@126.com
第一章 软件工程概述 §1.1 软件工程的基本概念、特点和分类 1.1.1 软件的概念、特征 计算机软件是程序、数据及相关文档的集合。 Software=Programming + Documents Programming = Data Structure + algorithm
§1.1 软件工程的基本概念、特点和分类 软件的特征:P1。
§1.1 软件工程的基本概念、特点和分类 1.1.2 软件的分类:系统软件、支撑软件、应用软件。 软件规模: 类别 参加人员数 研制期限 产品规模(源程序行数) 微型 1 1~4周 0.5k 小型 1 1~6月 1k~2k 中型 2~5 1~2年 5k~50k 大型 5~20 2~3年 50k~100k 甚大型 100~1000 4~5年 1M(=1000k) 极大型 2000~5000 5~10年 1M~10M
§1.2 软件危机与软件工程 1.2.1 软件的发展 1946年,第一台计算机诞生,通过编写机器码指令的方式来编写程序,满足了人们计算方面的需要。 之后,计算机硬件以空前的速度飞速发展。由电子管计算机时代→晶体管计算机时代→集成电路计算机时代, 按照摩尔法则(微处理器的性能每18个月翻番)使计算机的性能不断提高。同时硬件技术的突破,为软件技术的发展提供了空间,软件技术也得到了相应的发展,由最初的机器码编程→汇编语言→高级语言。关系数据库理论的发展也促进了数据库应用系统的发展。 软件技术上的这一系列发展的结果使得计算机的应用领域由最初的科学计算发展到军事、经济、科学、文化等各个领域。计算机应用系统由简单到复杂,由小型到大型,到了60年代末期,从事软件开发的人员发现,他们使用过去一直使用的方法来开发大型复杂的应用系统遇到了问题。过去,编制程序完全是一种技巧,主要依赖于程序员的素质,程序是程序员智慧的结晶,每个程序员编程无章法,随意性大,开发模式完全是手工小作坊式的。由此,60年代末,对大型系统的开发呈现出“软件危机”。
例:Windows95有1000万行代码 Windows2000有5000万行代码 Exchange2000和 Windows2000开发人员结构
自20世纪40年代中出现了世界上第一台计算机以后,就有了程序的概念。其后经历了几十年的发展,计算机软件经历了四个发展阶段:自20世纪40年代中出现了世界上第一台计算机以后,就有了程序的概念。其后经历了几十年的发展,计算机软件经历了四个发展阶段: • ·程序设计阶段,约为50至60年代 • ·程序系统阶段,约为60至70年代 • ·软件工程阶段,约为70年代以后 • 面向对象软件工程阶段,约为80年代以后
Evolution of software 早期第二阶段 第三阶段 第四阶段 面向批处理多用户分布式系统强大的桌面系统 有限的分布实时 嵌入“智能”面向对象技术 自定义软件数据库低成本硬件专家系统 软件产品消费者的影响人工神经网络 并行计算 网络计算机 1950 1960 1970 1980 1990 2000
§1.2 软件危机与软件工程 1.2.2 软件危机的主要表现 1.对软件开发成本和进度的估计常常很不准确。(下页图) 软件开发很难按预定计划实现,投入了资金,能否出结果,出怎样的结果,事先难以预料。 2.用户对“已完成”的软件系统不满意的现象经常发生。 3.软件产品的质量往往不可靠。软件可靠性和质量保证的定量概念刚刚出现不久。 1962年6月,美国飞向金星的第一个空间探测号(水手1号),因其飞舱中的计算机导航程序之一的一个语句的语义出错,总是偏离航线无法取得成功。1965年~1970年,美国范登堡基地因程序有错误造成发射火箭多次失败。
yet, Success Hasnt Come Easily 53% 16% 31% Successfully Challenged Canceled
4.软件常常是不可维护的。通常软件维护的费用占总费用的55%-70%。4.软件常常是不可维护的。通常软件维护的费用占总费用的55%-70%。 错误具有累积和放大效应。 在后期发现的错误改正的成本和难度将是巨大的(比早期进行修正所付出的代价高2-3个数量级),甚至是不可能改正的。
改正一个问题需付出的代价 2000 5.0 改正一个问题估计的工作量 改正一个问题的估计费用 1000 2.5 200 0.5 (美元) 20 0.05 (人天) 需 求 分 析 结构设计 编码 详细设计 集成测试 系统测试 现场
5.软件通常没有适当的文档资料,给软件开发和维护带来极大困难。5.软件通常没有适当的文档资料,给软件开发和维护带来极大困难。 文档的作用: 管理人员:评价软件开发进度。 开发人员:通讯工具。 维护人员:维护的依据。 6.软件成本在计算机系统总成本中所占的比例逐年上升。(见下页图) 7.软件开发生产率提高的速度远远跟不上计算机应用迅速普及深入的趋势。
处在十字路口的中国软件产业 • 主权大国必须建立基于自主技术的、 完整的软件产业体系。 软件本国提供率:中国1/3左右,美国97% • “印度模式”还是“中国模式” • 软件人才结构不合理,缺乏中高级软 件人才。软件人员缺乏软件工程化的概念。
1.2.3 软件工程 1968年由NATO (北大西洋公约组织)在德国Garmish召开的学术会议上,Feitz Bauer首先提出了“软件工程”概念。
P.Wegner 和B.Boehm认为软件工程可定义为: 科学知识在设计和构造计算机程序,以及开发、运作和维护这些程序所要求的有关文档编制中的实际应用。
软件工程的定义 • Fritz Bauer在NATO会议上给出的定义: “软件工程是为了经济地获得可靠的和能在实际机器上高效运行的软件而确立和使用的健全的工程原理(方法)。”
软件工程的定义 • IEEE【IEE83】给出的软件工程定义: • “软件工程是开发、运行、维护和修复软件的系统方法。”
软件工程的定义 • IEEE【IEE93】给出了一个更加综合的定义: “将系统化的、规范的、可度量的方法应用于软件的开发、运行和维护的过程,即将工程化应用于软件中。”
软件工程的定义 软件工程是指导软件开发和维护的工程类学科,它以计算机科学理论及其他相关学科的理论为指导,采用工程化的概念、原理、技术和方法进行软件的开发和维护,把经过时间证明正确的管理措施和当前能够得到的最好的技术方法结合起来,以较少的代价获取高质量的软件
软件工程是应用计算机科学、数学及管理科学等原理,借鉴传统工程的原则、方法来创建软件,从而达到提高质量、降低成本的目的.其中计算机科学和数学用于构造模型、分析算法,工程科学用于制定规范、明确风范(paradigm)、评估成本、确定权衡,管理科学用于进度、资源、质量、成本等的管理.软件工程是应用计算机科学、数学及管理科学等原理,借鉴传统工程的原则、方法来创建软件,从而达到提高质量、降低成本的目的.其中计算机科学和数学用于构造模型、分析算法,工程科学用于制定规范、明确风范(paradigm)、评估成本、确定权衡,管理科学用于进度、资源、质量、成本等的管理.
1.2.4 软件工程的研究对象与基本原理 研究对象: 软件工程主要研究与软件开发和维护有关的四个方面的内容:过程与模型、方法和技术、工具和环境、标准和规范。软件工程管理则贯穿于这四个方面。 1.所有软件开发和维护都是由一系列过程所构成,它将其他三个方面结合起来。以合理及时地进行软件开发和维护。软件生存周期模型则将软件工程过程有机的结合起来,提供一个结构框架,明确主要活动和任务,忽略次要的细节,以利于开发维护人员理解并适应不同的项目。过程强调的是具体的活动和任务等,模型则突出表现过程的有机结合。
2.软件开发和维护方法体现了软件开发和维护人员看待系统的立场和观点,即方法论意义上的方法。2.软件开发和维护方法体现了软件开发和维护人员看待系统的立场和观点,即方法论意义上的方法。 例如,结构化方法认为系统是由一些结构化的功能相互联系、相互作用而构成,面向对象的方法则认为系统是由一些对象的相互联系、相互作用而构成。技术则是方法的具体实现,有若干步骤构成,突出“如何做”,有时也不加区别的称为技术方法。
3.工具为软件开发和维护的方法、技术提供了自动或半自动的软件支持,以提高软件生产效率。3.工具为软件开发和维护的方法、技术提供了自动或半自动的软件支持,以提高软件生产效率。 将各种工具结合起来,连同有关的软硬件便形成软件开发和维护环境,其目的是使软件工具支持整个软件生存周期。如北大的青鸟系统等。
4.作为工程而言,标准化、规范化可以使各种工作有章可循,进而提高生产效率和产品质量。4.作为工程而言,标准化、规范化可以使各种工作有章可循,进而提高生产效率和产品质量。 软件工程标准主要有五个层次:国际标准、国家标准、行业标准、企业规范和项目规范。
软件工程是一门交叉学科 软件工程的主要研究内容 • 软件开发技术:软件开发方法学 软件开发过程 软件工具和软件工程环境 • 软件工程管理:软件管理学 软件经济学 软件心理学 软件工程所包含的内容不是一成不变的, 随着人们对软件系统的研制开发和生产的理解而不断变化。
软件工程的层次结构: 任何工程化方法都必须围绕高质量这一核心。软件工程的四个研究对象构成了以软件质量为核心的层次结构。
软件工程 — 一种层次化技术 工具和环境层 方法和技术层 过程和模型层 标准和规范层 质量核心层 Software engineering layers
目标 软件工程框架 性 性 性 用 确 算 组 织 过 程 可 正 合 支 持 过 程 基本过程 选取适宜的开发模型 采用合适的设计方法 提供高质量的工程支持 程 过 重视软件工程的管理 原则
软件工程知识结构 2001年5月ISO/IEC JTC 1(ISO和IEC的第一联合技术委员会)发布了《 SWEBOK指南V0.95(试用版)》 (Guide to the Software Engineering Body of Knowledge,简称SWEBOK) SWEBOK把软件工程学科的主体知识分为10个知识领域。
软件工程知识结构 • 软件需求 • 软件设计 • 软件构造 • 软件测试 • 软件维护 • 软件配置管理 • 软件工程管理 • 软件工程过程 • 软件工程工具和方法 • 软件质量
软件工程的基本原理: 著名软件工程专家Boehm于1983年提出了软件工程的七条基本原理: 1.用分段的生存周期计划严格管理。 2.坚持进行阶段评审。 3.实施严格的产品控制。 4.采用现代程序设计技术。 5.结果应能清楚地审查。 6.开发小组的成员应该少而精。 7.承认不断改进工程实践的必要性。
§1.3 软件开发方法 1.3.1 结构化方法 结构化方法基于软件工程生存周期的概念之上。目前,已经形成了完整的SA-SD-SP方法。 总的指导思想:自顶向下、逐步求精、单入口、单出口。基本原则:抽象和功能分解。结构化方法围绕处理“功能”的实现过程来构造软件系统。适于需求可以预先确定的系统开发。
1.3.2 面向对象方法 面向对象方法有如下要点: 1.世界由Object构成。复杂对象由简单对象组成。 2.把对象归为Class,每个类都定义了一组数据(属性)和方法。 3.按照子类(派生类)和父类(基类)的关系,可以把若干个类组成一个层次结构的系统。在这个系统中,子类可以继承(Inheritance)父类的数据和方法。 4.对象之间只能通过传递消息进行通信。
Object-Oriented=Objects+ Classes + Inheritance + Communication with Message 面向对象的方法现已形成一整套的开发方法,由Object-Oriented Analysis、Object-Oriented Design、Object-Oriented Programming组成。
1.3.3 形式化方法 形式化方法生成的模型比结构化方法或面向对象方法得到的模型更完整、一致且无二义性。 主要包括: 形式化分析 形式化设计 翻译
“软件工程”课程与其它软件专业课的区别 (1) 立足于系统的整体。 (2) 讲授系统分析、系统设计、 测试及维护的理论和方法。 (3) 构筑一个软件系统,实践 软件开发全过程。
“软件工程”课程教学与实践的目标 • 转变对软件的认识: 上升 程序 系统 • 转变思维定式: 上升 程序员 系统工程师 (系统分析员) • 工程化训练
系统分析员的地位 程序员 用户 分析员
“一个好的工业,应有一套良好的标准来配套”“一个好的工业,应有一套良好的标准来配套” 软件的工业化生产过程应具备的特点: • 明确的工作步骤 • 详细具体的规范化文档 • 明确的质量评价标准
软件产品的标准化 软件开发过程的标准化
软件工程技术的两个明显特点: • 强调规范化 • 强调文档化
§1.4 软件生命周期 • 1.4.1 软件生命周期 (Software Life Cycle) • 软件产品或软件系统从项目需求定义开始,到开发成功后投入使用,在使用过程中不断增补修订,直到停止使用,这一期间的各种活动过程。 • 通常分三个阶段:定义阶段、开发阶段、维护阶段。维护阶段又分为纠错、适应、增强、预防。
1.4.2 软件生存期的阶段划分 (1)可行性研究与计划 (2)需求分析 (3)总体设计 上游 (4)详细设计 (5)实现 (6)集成测试 (7)确认测试 下游 (8)使用和维护 (根据国标《计算机软件开发规范》)
1.4.3 软件生命周期模型 软件生命周期模型是从软件项目需求定义直至软件使用后废弃为止,针对系统开发、运行和维护所实施的全部过程、活动和任务的结构框架。它能直观表达软件开发全过程,明确规定要完成的主要活动、任务和开发策略。 软件生命周期模型也常称为: 软件过程模型 软件开发模型 软件工程范型
1. 瀑布模型 Waterfall Model (线形顺序模型) 1970年W.Royce提出的最早出现的软件开发模型。 瀑布模型将软件生存周期各活动规定为依线性顺序联接的若干阶段的模型。它包括可行性分析、项目开发计划、需求分析、概要设计、详细设计、编码、测试和维护。它规定了由前至后、相互衔接的固定次序,如同瀑布流水,逐级下落。 瀑布模型的表示下图所示。该模型说明整个软件开发过程是按图中6个阶段进行的。每个阶段的任务完成之后,产生相应的文档,文档要进行评审,若经过确认,表明该阶段工作完成,并进入下一阶段的工作(向下箭头所表示),否则则要返回到上一阶段去重新进行工作,甚至更前一项的活动。每个阶段均以上一阶段的文档作为开发的基础。
瀑布模型 Waterfall Model(线形顺序模型) 可行性研究与计划 定义 阶段 需求分析 设计 开 发 阶 段 编码 测试 维护阶段 运行维护