第一章软件工程概述
《软件工程》教学教案
《软件工程》教学教案一、第一章:软件工程概述1. 教学目标了解软件工程的定义、目的和重要性,掌握软件开发的基本过程和原则。
2. 教学内容软件工程的定义和重要性;软件开发的基本过程;软件工程的原则和方法。
3. 教学方法采用讲授法,结合案例分析,让学生了解和掌握软件工程的基本概念和原则。
4. 教学资源教材、课件、案例分析。
5. 教学评价通过课堂提问和案例分析,评估学生对软件工程的理解和应用能力。
二、第二章:软件需求分析1. 教学目标掌握软件需求分析的基本概念、方法和过程,能够运用需求分析工具进行需求收集和分析。
2. 教学内容软件需求分析的基本概念;需求分析的方法和过程;需求分析工具的使用。
3. 教学方法采用讲授法和实例分析,让学生了解和掌握需求分析的方法和过程。
4. 教学资源教材、课件、实例分析。
5. 教学评价通过课堂提问和实例分析,评估学生对需求分析的理解和应用能力。
三、第三章:软件设计1. 教学目标掌握软件设计的基本概念、方法和过程,能够运用设计工具进行软件架构和详细设计。
2. 教学内容软件设计的基本概念;设计方法和过程;设计工具的使用。
3. 教学方法采用讲授法和实例分析,让学生了解和掌握软件设计的方法和过程。
4. 教学资源教材、课件、实例分析。
5. 教学评价通过课堂提问和实例分析,评估学生对软件设计的理解和应用能力。
四、第四章:软件实现1. 教学目标掌握软件实现的基本概念、方法和过程,能够运用编程语言进行软件编码和测试。
2. 教学内容软件实现的基本概念;实现方法和过程;编程语言和测试工具的使用。
3. 教学方法采用讲授法和编程实践,让学生了解和掌握软件实现的方法和过程。
4. 教学资源教材、课件、编程环境和测试工具。
5. 教学评价通过编程实践和测试结果,评估学生对软件实现的理解和应用能力。
五、第五章:软件维护1. 教学目标掌握软件维护的基本概念、方法和过程,能够进行软件维护和优化。
2. 教学内容软件维护的基本概念;维护方法和过程;软件优化技巧。
软件工程概述
3.克服危机的途径
1968年秋季,NATO(北约)的科技委员会召集了 近50名一流的编程人员、计算机科学家和工业界巨头, 讨论和制定摆脱“软件危机”的对策。由于认识到软 件的设计、实现、维护和传统的工程规则有相同的基 础,在那次会议上首次提出了“软件工程” (software engineering)这个概念。
计算机科学与工程学院
2018/7/2
27
软件工程方法:为软件开发提供“如何做”的技术。 它包括了项目计划、需求分析、系统设计、程序实现、 测试与维护等一系列的任务。 软件工程工具:为过程和方法提供自动的或半自动的 支持。这些软件工具被集成起来,建立起一个支持软 件开发的系统,称之为计算机辅助软件工程(CASE, Computer Aided Software Engineering)。CASE集成 了软件、硬件和一个存放开发过程信息的软件工程数 据库,形成了一个软件工程环境。
2018/7/2
计算机科学与工程学院
20
2.危机的原因
①用户对软件需求的描述不精确,可能有遗漏、有二 义性、有错误,甚至在软件开发过程中,用户还提出 修改软件功能、界面、支撑环境等方面的要求。 ②软件开发人员对用户需求的理解与用户的本来愿望 有差异,这种差异必然导致开发出来的软件产品与用 户要求不一致。 ③大型软件项目需要组织一定的人力共同完成,多数 管理人员缺乏开发大型软件系统的经验,而多数软件 开发人员又缺乏管理方面的经验。各类人员的信息交 流不及时、不准确、有时还会产生误解。
2018/7/2
计算机科学与工程学院
8
故 障 率
生命 初期 "磨损"后
故 障 率
实际曲线 修改
软件工程基础知识概述
软件工程基础知识概述第一章:软件工程的定义和发展历程软件工程是一门涉及软件开发以及管理的综合学科。
它的出现是为了解决软件开发中遇到的问题和挑战。
在职业领域中,软件工程师使用科学的方法来开发、维护和管理软件。
第二章:软件开发生命周期软件开发生命周期是指软件的构建和维护过程中的各个阶段。
常见的软件开发生命周期模型包括瀑布模型、迭代模型和敏捷开发等。
瀑布模型是最早被提出并广泛应用的一种软件开发流程模型,包括需求分析、系统设计、编码、测试和维护等阶段。
第三章:软件需求分析软件需求分析是软件开发过程中的第一步,它的目的是通过调查和研究用户需求,明确软件产品需要具备的功能和性能要求。
需求分析包括需求获取、需求分析和需求规格说明等步骤,通过使用工具和技术,如面谈、问卷和原型设计等,来获取和分析用户需求。
第四章:软件设计软件设计是软件开发过程中的重要一环,它的目标是将需求转化为可实现的软件系统。
软件设计可以从结构设计、数据设计和接口设计等多个层面进行,通过使用工具和技术,如UML、设计模式和构件式设计等,来实现模块化、可复用和高内聚低耦合的设计。
第五章:软件编码软件编码是将设计好的软件系统转化为计算机可执行的程序代码的过程。
软件编码需要使用一种编程语言,如Java、C++和Python等,通过准确理解设计要求,编写高质量、易于理解和可维护的代码。
第六章:软件测试软件测试是保证软件质量的重要手段。
它的目标是发现和修复软件中的缺陷和错误。
常见的软件测试方法包括单元测试、集成测试和系统测试等。
为了提高测试效率和测试覆盖率,软件工程师可以使用自动化测试工具和技术,如JUnit和Selenium等。
第七章:软件项目管理软件项目管理是指在软件开发过程中对项目进行规划、组织、指导和控制的活动。
它涉及到项目范围、进度、成本和质量等方面的管理。
为了提高软件项目管理的效果,可以采用项目管理方法和工具,如WBS、PERT和甘特图等。
软件工程导论第六版课后习题答案完整版
软件工程导论第六版课后习题答案完整版首先,感谢您对软件工程导论课后习题答案的需求。
以下是软件工程导论第六版课后习题的完整答案。
第一章:软件工程概述1.1 问题1. 什么是软件工程?答:软件工程是一种应用工程原理、方法和工具来开发和维护高质量软件的学科。
1.2 问题1. 什么是软件?答:软件是一系列按照特定顺序组织的计算机数据和指令。
第二章:软件过程模型2.1 问题1. 软件过程模型有哪些类型?答:常见的软件过程模型包括瀑布模型、迭代模型、螺旋模型和敏捷开发模型等。
2.2 问题1. 瀑布模型的特点是什么?答:瀑布模型是一种线性顺序模型,以阶段划分为基础,每个阶段的任务在进入下一个阶段前必须完成。
第三章:需求分析与规格说明3.1 问题1. 软件需求描述包括哪些方面的内容?答:软件需求描述需要包括功能性需求、非功能性需求、用户需求和系统需求等。
3.2 问题1. 什么是需求跟踪?答:需求跟踪是指在软件开发过程中,通过建立需求和软件项目中其他相关工件之间的关联,确保需求的准确实现和变更的有效管理。
第四章:软件设计4.1 问题1. 软件设计的目标是什么?答:软件设计的目标是通过确定软件的整体结构和组成部分,确保软件满足需求并具有良好的可维护性和可重用性。
第五章:软件测试与维护5.1 问题1. 什么是软件测试?答:软件测试是一种评估和改进软件质量的过程,目的是发现错误并提高软件的可靠性和可用性。
5.2 问题1. 什么是软件维护?答:软件维护是指在软件交付后的整个生命周期中对软件进行修改和改进,以满足用户需求和修复错误。
第六章:软件配置管理6.1 问题1. 软件配置管理的目标是什么?答:软件配置管理的目标是确保软件在开发和维护过程中的可控性和可追踪性,以及保持软件配置的稳定性和一致性。
6.2 问题1. 软件版本控制是什么?答:软件版本控制是指对软件的不同版本进行管理,包括版本的创建、检出、合并和更新等操作。
至此,我们完成了软件工程导论第六版课后习题的完整答案。
第1章软件工程概述
第1章软件工程概述软件工程的研究领域包括软件的开发方法、软件周期以及软件工程的实践等。
软件危机与软件工程的起源1. 计算机系统的发展历程20 世纪 60 年代中期以前,是计算机系统发展的早期:软件为每个具体应用而专门编写的。
软件实质为规模较小的程序,编写容易,没有系统化的方法,对软件开发工作更没有进行任何管理。
编写者和使用者为同一个(或同一组)人。
软件设计只是一个模糊的过程,除了程序清单之外,没有其他文档资料。
20 世纪 60 年代中期到 70 年代中期,是计算机发展的第二代:硬件发展:多道程序、多用户系统引入了人机交互的新概念,使硬件和软件的配合上了一个新层次。
实时系统能够从多个信息源收集、分析和转换数据,使得进程控制能以毫秒而不是分钟来进行。
在线存储技术的进步导致了第一代数据库管理系统的出现。
软件发展:软件个体化特性。
软件数量极具膨胀。
在程序运行时发生的错误必须设法改正。
用户有了新的需求时必须相应的修改程序。
硬件或操作系统更新时,通常需要修改程序以适应新的环境。
软件维护工作,以令人吃惊的比例耗费资源,许多程序的个体化特性使得它们最终成为不可维护的。
2. 软件定义:软件是由一个完整的配置组成:程序:能够完成预定功能和性能的可执行的指令序列。
数据:是使程序能够适当地处理信息的数据结构。
文档:是开发、使用和维护程序所需要的图文资料。
1983 年 IEEE 对软件的定义:计算机程序、方法、规则、相关的文档资料、运行程序时所必须的数据。
特点:1) 软件是一种逻辑实体,而不是具体的物理实体。
2) 软件的生产与硬件不同。
在软件开发过程中没有明显的制造过程。
3) 在软件的运行和使用期间,没有硬件那样的机械磨损,老化问题。
4) 软件成本相当高。
3. 软件危机介绍软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。
软件危机包含两方面问题:如何开发软件,以满足对软件日益增长的需求;如何维护,数量不断膨胀的已有软件。
第1章-软件工程学概述1-1
• 软件用后不磨损
• 随着时间的推移,应用程序
的某些部分可能会变得不再 相关(例如,需求改变时), 而需要修改
• 但是,没有备件的概念
1.1、软件的定义
硬件和软件故障率曲线
由于副作用造成 故障率的提高 原来的软件已经面目全非了!
故障率
磨损后
生命初期
修改
硬件的故障率曲线 实际曲线
软件故障率的理想曲线
1.2、软件危机
软件危机案例
3 . 软件产品的质量靠不住 [案例]:
ARIANE 5 火箭 1996 年6 月,耗资70 亿美元,发射
本章内容
1.1、软件的定义 1.2、软件危机 1.3、软件工程 1.4、软件生存期 1.5、软件过程
1.2、软件危机
软件危机
Crisis!
“软件危机”(Software crisis) 的出现是由于软件的规模越来越大,复杂 度不断增加,软件需求量增大。而软件开 发过程是一种高密集度的脑力劳动,软件 开发的模式及技术不能适应软件发展的需 要。致使大量质量低劣的软件涌向市场, 有的花费大量人力财力,而在开发过程中 就夭折。
时间
1.1、软件的定义
硬件和软件故障率曲线的比较
软件不会用坏(wear out).
软件会退化( deteriorate)!
1.1、软件的定义
软件的特点-7
要求
软件产品不允许误差
软件产品的高质量取决于好的设计( High quality is achieved through) 依赖于人(Depend on people) 需要对产品进行构造(Require the construction of a “product”)
第1章软件工程学概述
(3)软件经常变化 (4)开发软件的效率非常重要 (5.) 和谐地合作是开发软件的关键 (6.) 软件必须有效地支持它的用户 开发软件的目的就是支持用户的工作,满足 用户对软件的需求 (7. )在软件工程领域中通常由具有一种文 化背景的人替具有另一种文化背景的人创 造产品
37
软件工程的研究内容
软件是计算机系统中与硬件(hardware)相互依存 的另一部分,与硬件合为一体完成系统功能。 软件定义包括如下几点: (1)功能和性能的指令集(即程序); (2)程序能正常操纵信息的数据结构(即相关数 据); (3)与程序开发维护和使用有关的各种图文数据 (即说明文档)。
16
软件=程序+数据+相关文档
软件的发展主要经历了以下3个发展阶段:
第一阶段(20世纪50年代初期至20世纪60年 代中期) 特点:(1)称为程序设计阶段 (2)软件生产以个体化为主 (3)编写程序的工具只有低级语言 (4)软件规模小,几乎没有系统化的 标准可循
11
(5)软件由软件使用者自己开发和编写,适 合个人应用 (6)没有“软件”概念,对于程序有关的文 档的重要性认识不足,开发主要围绕硬件 进行 (7)工程规模小,使用工具单一,开发者之 间没有明确分工 第二阶段(20世纪60年代中期至70年代末期) 称程序系统阶段
7
ENIAC诞生于二战时期,最初是作为辅助炮兵计 算炮弹轨迹的工具,在盟军登陆西欧前一年开始 制造,但直到1945年停火时还没完成。在冷战初 期军方就发现了ENIAC的大量用途,它的17468 根真空管被用来测试氢弹的早期设计的可行性。 这台计算机每秒能执行5000条指令,在当时的情 况下它的运算速度比电动式计算机快1000倍。当 然,现在iPhone 6每秒能响应250亿条指令。
太原理工大学软件工程-第一章软件工程概述
4.第四代软件工程
90年代起,基于构件的开发方法取得了重要的进展,软件系统的开发可通过使用 现存的可复用构件组装完成,而无需从头构造,从而达到提高效率和质量、降低 成本的目的,称为构件工程。
1.2软件危机
1.2.1软件危机及其表现
软件危机的定义:软件危机是指在计算机软件的 开发和维护过程中所遇到的一系列严重问题及矛 盾。
3.软件工程时代: 70年代至今
20世纪60-70年代是计算机系统发展的第三阶段.为了克 服软件危机,1968年北大西洋公约组织的专家们在联邦 德国召开国际会议,在这次会上正式提出并使用了“软 件工程”这个名词。这阶段主要采用“工程化的生产方 式”。
软件过程提出至今,它的发展已经经历了4个阶段:
1.第一代软件工程(20世纪60年代到70年代)
3.第三代软件工程
随着规模的不断增大,开发人员的增多,开发时间相应持续增长,加上软件是知 识密集型的逻辑思维产品,这些都增加了软件工程的管理难度,人们在软件开发的 实践中认识到:提高软件生产率、保证软件质量的关键是“软件过程“的控制和管 理,提出了对软件项目管理的计划、组织、成本估算、质量保证、软件配置等技术 和策略,逐步形成了软件过程工程。
1.1.2软件 的发展
自从第一台计算机诞生以来,就开始了软件的生产,到目前为 止,软件发展经历了三个阶段:
1.程序设计时代:20世纪50-60年代,采用“个体生产方 式”,人们认为软件就是程序,没有相关的文档资料。
2.程序系统时代 :20世纪60-70年代是计算机系统发展 的第二阶段,出现了“软件作坊”,软件质量低下, 可靠性差,可维护性差,却价格昂贵,供不应求。在 该阶段的后期,于是出现了“软件危机”。
软件工程第1章 软件工程综述
4. 按服务对象划分:通用软件、定制软件。
软件发展历程
1. 程序设计时代(20世纪50年代):软件发展早 期, 计算机主要用于科学或工程计算,软件则是 为某种特定型号的计算机而专门配置的程序。
2. 程序系统时代(20世纪60年代):由于软件需 求不断增长, “软件作坊”在这个时期出现了, 伴随着“软件作坊”还产生出了具有一定通用性 的软件产品。
软件工程基本原则
围绕工程设计、工程支持以及工程管理已提出了 以下四条基本原则:1、选取适宜的开发模型;2、 采用合适的设计方法;3、提供高质量的工程支 撑;4、重视软件工程的管理。
美国著名软件工程专家勃姆(B.W.Boehm)经过总结, 提出了以下7条软件工程的基本原理,即:(1) 采用分阶段的生命周期计划严格管理,(2)坚 持进行阶段评审,(3)实行严格的产品控制; (4)采用现代程序设计的技术;(5)结果应能 够清楚地审查;(6)开发队伍应该少而精;(7) 承认不断改进软件工程实践的必要性。
对象彼此间仅能通过发送消息互相联系。
面向对象方法学基本原则
尽量模拟人类习惯的思维方式,使开发软件的 方法与过程尽可能接近人类认识世界、解决问 题的方法与过程,从而使描述问题的问题空间 (也称为问题域)与实现解法的解空间(也称为求解 域)在结构上尽可能一致。
面向对象方法学
优点: 降低了软件产品的复杂性,提高了软件的可
采用生命周期方法学可以大大提高软件开发的成功率,软 件开发的生产率也能明显提高。
目前,传统方法学仍然是人们在开发软件时使用得十分广 泛的软件工程方法学。
5. 主流工程方法学
面向对象方法学则是目前的主流方法学,包括面 向对象分析(OOA)、面向对象设计(OOD)与 面向对象实现(OOA),可对整个软件生命周期 提供方法学支持。其以实体为基本元素,如:类 体、对象,并可使程序系统基于现实实体构建, 更加接近现实环境。
第一章软件工程概述
第一章软件工程概述第一章软件工程概述1.1软件危机1.1.1软件危机的介绍1)软件危机在计算机软件的开发和维护过程中所遇到的一系列严重问题。
软件危机的两个主要问题:如何开发软件,以满足对软件日益增长的需求;如何维护数量不断膨胀的已有软件。
软件危机的典型表现:(2)用户对“已完成的”软件系统不满意的现象经常发生。
(3)软件产品的质量往往靠不住。
(4)软件常常是不可维护的。
(5)软件通常没有适当的文档资料。
(6)软件成本在计算机系统总成本中所占的比例逐年上升。
(7)软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入趋势。
1.1.2产生软件危机的原因软件本身特点:缺乏可见性,在运行之前往往难以衡量,质量也难以评价不会因为长期使用而用坏,软件维护通常意味着修正或修改原来的设计,较难维护。
规模庞大,需分工合作,如何保证每个人的工作合在一起是极端复杂的问题。
软件开发与维护的方法不正确产生软件危机的原因可归结为两个重要的方面:软件生产本身存在的复杂性;软件开发所使用的方法和技术。
软件生命周期:一个软件从定义、开发、使用和维护直到最早被废弃。
软件产品必须由一个完整的配置组成(程序、文档、数据)1.1.3消除软件危机的途径正确认识计算机软件认识到软件开发是一个协同配合、共同完成的工程项目并吸取经验。
推广使用已总结的开发软件成功的技术和方法开发使用更好的软件工具1.2软件工程的介绍软件工程是指导计算机软件开发和维护的一门工程学科。
采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地、高效的开发出高质量的软件并有效地维护它,这就是软件工程。
软件工程关注于大型程序的构造软件工程的中心课题是控制复杂性软件经常变化开发软件的效率非常重要和谐地合作是开发软件的关键软件必须有效地支持它的用户在软件工程领域中通常由具有一种文化背景的人替具有另一种文化背景的人创造产品。
《软件工程电子教案》课件
《软件工程电子教案》PPT课件第一章:软件工程概述1.1 软件工程的定义解释软件工程的含义和目的强调软件工程的重要性1.2 软件开发生命周期介绍软件开发生命周期的基本阶段讨论每个阶段的关键活动和任务1.3 软件工程原则介绍软件工程的基本原则解释每个原则的重要性和应用第二章:需求分析2.1 需求分析的重要性强调需求分析在软件工程中的作用解释需求分析的目标和结果2.2 需求收集和分析方法介绍需求收集和分析的主要方法讨论每种方法的优缺点和适用场景2.3 需求规格说明书解释需求规格说明书的结构和内容强调需求规格说明书的重要性和维护第三章:软件设计和架构3.1 软件设计的重要性强调软件设计在软件工程中的作用解释设计的目标和结果3.2 软件架构设计介绍软件架构设计的基本概念和方法讨论架构设计的重要性和评估3.3 详细设计解释详细设计的过程和工具强调详细设计的重要性和与实现的关联第四章:软件实现和编码4.1 编码的重要性强调编码在软件工程中的作用解释编码的目标和结果4.2 编程语言和工具介绍常用的编程语言和开发工具讨论每种语言和工具的适用场景和特点4.3 编码规范和最佳实践解释编码规范和最佳实践的作用强调遵循规范和最佳实践的重要性第五章:软件测试和验证5.1 软件测试的重要性强调软件测试在软件工程中的作用解释测试的目标和结果5.2 测试方法和策略介绍常用的软件测试方法和策略讨论每种方法和策略的适用场景和优缺点5.3 测试用例和测试覆盖率解释测试用例的设计和编写强调测试覆盖率的重要性和评估方法第六章:软件维护和演化6.1 软件维护的概念解释软件维护的定义和目的强调软件维护的重要性6.2 维护活动和维护过程介绍软件维护的主要活动和过程讨论每个活动的关键任务和挑战6.3 软件演化模型介绍软件演化的一些常见模型讨论每种模型的适用场景和特点第七章:软件项目管理7.1 软件项目管理的重要性强调软件项目管理在软件工程中的作用解释项目管理的目标和结果7.2 项目管理工具和技术介绍常用的软件项目管理工具和技术讨论每种工具和技术的适用场景和优缺点7.3 项目计划和进度控制解释项目计划的概念和过程强调进度控制的重要性和方法第八章:软件质量保证8.1 软件质量的概念解释软件质量的定义和重要性强调软件质量保证的作用8.2 质量标准和质量模型介绍常用的软件质量标准和模型讨论每种标准和模型的适用场景和特点8.3 质量保证过程和活动解释质量保证的过程和主要活动强调质量保证的重要性和实施方法第九章:软件工程伦理和法律问题9.1 软件工程伦理问题讨论软件工程中的伦理问题,如知识产权、隐私等强调软件工程师的伦理责任和行为准则9.2 软件工程法律问题介绍软件工程中涉及的法律问题,如版权、合同等讨论法律问题对软件工程的影响和应对策略9.3 合规性和标准化解释软件工程的合规性和标准化的概念强调合规性和标准化的作用和实施方法第十章:软件工程前沿技术10.1 软件工程新技术介绍软件工程中的一些前沿技术,如、云计算等讨论每种技术的应用场景和前景10.2 技术趋势和挑战讨论软件工程中的技术趋势和面临的挑战强调应对技术趋势和挑战的方法和策略10.3 未来软件工程的发展展望未来软件工程的发展方向和趋势强调软件工程师在未来的角色和责任重点和难点解析重点环节一:软件工程的定义和目的重点关注软件工程的定义和目的,理解软件工程的核心目标和原则。
第1章 软件工程概述
因而软件成本相当昂贵;
(6)相当多的软件开发涉及到社会因素。
2017/10/26 第4页 软件工程
3、软件的分类:
(1)按功能分类 a、系统软件:支持计算机系统各个部件、相关的软件
和数据协调、高效地工作的软件。如:OS、DBMS、
DRIVER、COMMUNICATION-SYSTEM。 b、支撑软件:协助用户开发软件的工具性软件,文本 编辑软件。如:PSL/PSA(问题描述语言、问题描述分析 器)、图形软件包、预编译程序、静态分析程序。
是批处理还是人机交互,信息存储是采用文件系统还是数据库?),方案的级
别有:低、中、高等级,每种方案都用系统流程图或其它工具加以描述。推荐 一种方案。最后确定一种方案。 (4)完成的任务:可能的解法(每种解法的系统流程图和成本效益分析),推 荐的系统结构(层次图或结构图)。 总体设计结束的标志是提交总体设计说明书、数据库或数据结构说明书和 集成测试计划等文件。
软件工程
2017/10/26
第1页
软件工程
第一章 软件工程概述
软件 软件危机 软件工程
2017/10/26
第2页
软件工程
1.1 软
1、什么叫软件?
件
(1)广义软件:相对于有形物理实体,把技术条件、管理法
规以及人员素质等无形因素称为软件。 (2)计算机软件:是与计算机硬件相对应的计算机组成部分, 包括程序、数据及其相关文档的完整集合。 Boehm:“软件是程序以及开发、使用和维护程序所需的所有
2017/10/26
第6页
软件工程
(4)按功能软件服务对象分类 a、项目软件:受特定客户委托由一个或多个软件 开发机构在合同的约束下开发出来的软件。 b、产品软件:提供给市场的商品。
软件工程软件第1章
“大”与“小”的分界线并不十分清晰。通常 把一个人在较短时间内写出的程序称为小型程序, 而把多人合作用时半年以上才写出的程序称为大型 程序。传统的程序设计技术和工具是支持小型程序 设计的,不能简单地把这些技术和工具用于开发大 型程序。
事实上,在此处使用术语“程序”并不十分恰当, 现在的软件开发项目通常构造出包含若干个相关程发和维护还有 不少糊涂观念,在实践过程中或多或少地采用了错 误的方法和技术,这可能是使软件问题发展成软件 危机的主要原因。
一个软件从定义、开发、使用和维护,直到最 终被废弃,要经历一个漫长的时期,这就如同一个 人要经过胎儿、儿童、青年、中年和老年,直到最 终死亡的漫长时期一样。通常把软件经历的这个漫 长的时期称为生命周期。软件开发最初的工作应是 问题定义,也就是确定要求解决的问题是什么;然 后要进行可行性研究,决定该问题是否存在一个可 行的解决办法;接下来应该进行需求分析,也就是 深入具体地了解用户的要求,在所要开发的系统 (不妨称之为目标系统)必须做什么这个问题上和用 户取得完全一致的看法。
严重的问题是,在软件开发的不同阶段进行修 改需要付出的代价是很不相同的,在早期引入变动, 涉及的面较少,因而代价也比较低;而在开发的中 期软件配置的许多成分已经完成,引入一个变动要 对所有已完成的配置成分都做相应的修改,不仅工 作量大,而且逻辑上也更复杂,因此付出的代价剧 增;在软件“已经完成”时再引入变动,当然需要 付出更高的代价。根据美国一些软件公司的统计资 料,在后期引入一个变动比在早期引入相同变动所 需付出的代价高2~3个数量级。图1.1定性地描绘 了在不同时期引入一个变动需要付出的代价的变化 趋势。
这7条原理是互相独立的,其中任意6条原理的组合 都不能代替另一条原理,因此,它们是缺一不可的 最小集合,然而这7条原理又是相当完备的,人们 虽然不能用数学方法严格证明它们是一个完备的集 合,但是,可以证明在此之前已经提出的100多条 软件工程原理都可以由这7条原理的任意组合蕴含 或派生。
SE第1课-软件工程概述
是一个软件从用户需求开始,经过分析、开发、测试、运行维护 的一系列相关活动的全周期。
13
1.3 软件工程
软件的生命周期过程
14
1.3 软件工程
软件工程方法学
软件工程是技术与管理的紧密结合,技术是指方法学问题,管 理是指通过计划、组织和控制等活动,合理配置和使用各种资源, 得到满足质量要求的工作产物(运行系统和支持文档)。
结构化的软件过程模型
1 瀑布模型
特点 阶段的顺序性和依赖性 推迟实现的观点 文档驱动的质量保证
存在问题 不适合需求模糊的系统
17
1.3 软件工程
2 快速原型模型
快速原型方法
原型:
是系统的早期版本,是系统的物理模型,只 实现了系统的一些最基本的功能,反映系统的 行为特性,但不一定满足全部需求。
软件工具是一种自动化系统 用于软件生存周期的某一个阶段或某一个环节
25
1.4 软件工程环境
软件工程环境的定义:
是用以支持需求定义、程序生成,以及软件维护等 整个软件生命周期全部活动的,并把方法、规模和计 算机程序集成在一起的整个体系。 又称为软件开发环境,软件支撑环境,自动开发环境
需求:
集成化的系统 通用的系统 可剪裁又可扩充的系统 实用的、经济合算的系统
3) 组成:
面向对象分析(Object-Oriented Analysis, OOA) 面向对象设计(Object-Oriented Design, OOD) 面向对象程序设计(Object-Oriented Programming, OOP)22
1.3 软件工程
OOA:
任务:ห้องสมุดไป่ตู้析问题域,用相应的符号系统建立系统的概念模型; 通常从三个方面建立系统模型:
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3、按服务对象范围划分
(1)项目软件,也称定制软件
1.1.2软件的特点(2)
软件的开发和运行常受到计算机系统的限制, 对计算机系统有着不同程度的依赖性
软件的开发至今尚未完பைடு நூலகம்摆脱手工艺的开发方 式
软件本身是复杂的,相当多的软件工作涉及到社 会因素 实际问题的复杂性 程序逻辑结构的复杂性
软件成本相当昂贵
1.1.3软件与硬件的关系
生命初期
“磨损”后
故障率
故障率
硬件的故障率曲线
副 作 修用 改
软件的故障率曲线
实际曲线
理想曲线 时间
1.1.4软件分类
1、按功能进行划分: – (1)系统软件:能够控制计算机系统各部件
(软硬件)协调、高效地工作和进程处理、 资源共享管理等 操作系统 数据库管理系统 设备驱动程序 通信处理程序等
(2)支撑软件
程序是按事先设计的功能和性能要求执行的指令 序列
数据是使程序能正常操纵信息的数据结构 文档是与程序开发,维护和使用有关的图文材料
1.1.2软件的特点
软件是一种逻辑实体,而不是具体的物理 实体。因而它具有抽象性
在软件的运行和使用期间,没有硬件那样 的机械磨损,老化问题
软件的生产与硬件不同,在它的开发过程 中没有明显的制造过程,软件维护困难
软件工程学教程
cxp2760@ caoxp@
13991212068
课程简介
课程名称: 软件工程 教 材:《Software Engineering 》(英)Ian Sommerville
《软件工程导论》 张海藩 教学方式:授课+项目讨论+上机实习 课时安排:32 + 16 考试类别:闭卷考试 参考教材:
1. 《软件工程——实践者之路》(原名:Software Engineering – A Practitioner’s Approach, Sixth Edition), Roger S. Pressman,清华大学出版社 2006
2. 软件工程学教程 陈 明 科学出版社 3. 软件工程实践者的研究方法 黄柏素等译 机械 4. 软件工程 邓良松等 西安电子科技大学出版社
第1章软件工程概述
1.1 计算机软件概念 1.2 软件的发展 1.3软件危机与软件问题 1.4 软件工程与开发准则 1.5 软件生命周期 1.6 软件开发模型
1.1 计算机软件概念
1.1.1 计算机软件 软件是计算机系统中与硬件相互依存的另一部分, 它是包括程序,数据及其相关文档的完整集合
对于这样规模的软件,采用统一的标准,实 行严格的审查是绝对必要的。由于软件的规 模庞大以及问题的复杂性,往往会在开发的 过程中出现一些事先难于做出估计的不测事 件。
(5)甚大型
100至1000人参加用4到5年时间完成的具 有100万行程序的软件项目。
这种甚大型项目可能会划分成若干个子项 目,每一个子项目都是一个大型软件。子 项目之间具有复杂的接口。
工具软件,它帮助软件开发人员开发自己的软 件产品
– 文本编辑程序 – 文件格式化程序 – 磁盘向磁带向数据传输的程序 – 程序库系统
– 支持需求分析、设计、实现、测试和支持管 理的软件
(3)应用软件
为特定的应用目的而开发的服务性软件 商业数据处理软件 工程与科学计算软件 计算机辅助设计/制造软件 系统仿真软件 智能产品嵌入软件 医疗、制药软件 事务管理、办公自动化软件 计算机辅助教学软件
3、按工作方式划分
– 实时处理软件:指在事件或数据产生时立即进 行处理
– 分时软件:在多个用户在联机情况下同时要求 系统对其进行处理时,系统将处理机时间轮流 分配给各用户,使用户感到系统仅为自己服务
– 交互式软件:可通过各种用户界面实现人机通 信
– 批处理软件:将一组作业或一批数据按要求的 顺序逐个处理,直至全部作业处理完毕
(2)小型
一个人半年之内完成的2千行以内的程序。
例如,数值计算问题或是数据处理问题就 是这种规模的课题。
这种程序通常没有与其它程序的接口。但 需要按一定的标准化技术、正规的资料书 写以及定期的系统审查。只是没有大题目 那样严格。
(3)中型
5个人以内在一年多时间里完成的5千到5万 行的程序。
例如,实时处理系统、远程通信系统、多 任务系统、大型操作系统、大型数据库管 理系统、军事指挥系统通常现有这样的规 模。
很显然,这类问题没有软件工程方法的支 持,它的开发工作是不可想象的。
(6)极大型
2000人到5000人参加,10年内完成的 1000万行以内的程序。
这类软件很少见,往往是军事指挥、弹 道导弹防御系统。
(4)大型
5至10个人在两年多的时间里完成的5万到10 万行的程序。
例如编译程序、小型分时系统、应用软件包、 实时控制系统等很可能是这种软件。
参加工作的软件人员需要按二级管理,例如 划分成若干小组,每组5人以下为好。在任务 完成过程中,人员调整往往不可避免。因此 会出现对新手的培训和逐步熟悉工作的问题。
这种课题开始出现软件人员之间、软件人员 与用户之间的联系、协调的配合关系问题。 因而计划、资料书写以及技术审查需要比较 严格地进行。
这类软件课题比较普遍,许多应用程序和系 统程序就是这样的规模。
在开发中使用系统的软件工程方法是完全必 要的,这对提高软件产品质量和程序人员的 工作效率起着重要的作用。
2、按软件规模进行划分
类别 参加人员数 微型 1 小型 1 中型 2~5 大型 5~20
甚大型 100~1000 极大型 2000~5000
研制期限 源程序行数
1~4周
0.5k
1~6月 1k~2k
1~2年 5k~50k
2~3年 50k~100k
4~5年 1M(=1000k)
5~10年 1M~10M
(1) 微型
只是一个人,在几天之内完成的软件。写出的 程序不到5百行语句,仅供个人专用。
通常这种小题目无需做严格的分析,也不必要 有一套完整的设计、测试资料。不过这并不是 说可以随便地不讲任何方法地做。
事实说明,即使这样小的题目,如果经过一定 的分析、系统设计、结构化编码以及有步骤地 测试,肯定也是非常有益的。