软件工程概论
一章节软件工程概论
一.软件生存周期的概念 1.在软件项目开发过程中一般要面临如下的问题: (1) 提出问题? (2) 有无解决问题的办法? (3) 达到的标准? (4) 问题如何解决? (5) 解决问题的具体方法? (6) 如何实现? (7) 产品的检验? (8) 产品的使用和维护等。 2.软件生存周期:从软件定义、开发、使用、维护到淘汰的全过 程。
确和正确的要求往往是不实际的。
7
1.4 软件开发的方法和技术(2)
二.渐增型 1.渐增型方法是从问题的部分需求出发,先建立一个不完全的系 统,通过测试运行该系统取得经验和信息反馈,加深对软件需 求的理解,进一步使系统扩充和完善。如此反复,直至软件人 员和用户对所设计完成的软件系统满意为止。 2.在渐增型开发下的软件是随软件开发的过程而逐渐形成的。 3.渐增型开发方法适合于知识型软件的开发,设计系统时对用户 需求的认识开始不是很清楚的,需要在开发过程中不断认识、 不断获得新的知识去丰富和完善系统。多数研究性质的试验软 件,一般采用此方法。 开发过程图解如下所示:
具” 等。
五.软件工程环境 方法与工具的结合,加上配套的软、硬件支持称为软件工程 环境。
它能支持开发者按照软件工程的方法,全面完成生存周期中的各项任 务。
如UNIX环境、Ada环境以及各种工作站。 六.软件工程管理
1.按照进度及预算完成软件计划,实现预期的经济和社会效益。 17 2.软件管理可以借助计算机来实现。
开发阶段流程图
定义软件结构 与数据结构, 确定模块功能、 调用关系接口
评审
修改
接受
确定每个 模块算法
编写程序
修改 静态检查
通过 单元测试, 集成测试, 验收测试。
源程序 清单
软件工程概论知识点汇总
软件工程概论知识点汇总软件工程概论知识点汇总第一章软件工程概述1. 软件工程定义及概念2. 软件工程的历史发展3. 软件开发生命周期模型a. 瀑布模型b. 迭代模型c. 增量模型d. 螺旋模型e. 敏捷开发模型第二章需求分析与管理1. 需求工程的基本概念2. 需求获取与分析方法3. 需求规格说明书4. 需求变更与配置管理第三章软件设计与架构1. 结构化设计方法2. 面向对象设计方法3. 设计模式及应用4. 软件架构设计与选择第四章软件编码与测试1. 编码规范与风格2. 测试方法与策略3. 单元测试与集成测试4. 软件质量保证与评估第五章软件项目管理1. 软件项目组织与人力资源管理2. 软件项目计划与进度管理3. 风险管理与配置管理4. 软件项目质量管理第六章软件维护与演化1. 软件维护的类型与阶段2. 软件维护的过程与方法3. 软件重构与演化第七章软件工程的理论与方法1. 软件需求建模方法2. 软件设计原则与方法3. 软件度量与评估方法4. 软件工程的形式化方法第八章软件工程的伦理与职业道德1. 软件工程的伦理问题2. 软件工程师的职业道德要求3. 软件工程师的专业素养与发展本文档涉及附件:________本文所涉及的法律名词及注释:________1.著作权法:________保护软件的著作权,禁止未经授权的复制、修改、发布等行为。
2.商标法:________保护软件的商标权,禁止他人未经授权使用相同或相似的商标。
3.专利法:________保护软件的发明专利权,禁止他人未经授权使用相同或相似的发明。
4.合同法:________规定软件开发过程中的合同签订与履行等事项。
软件工程概论
软件工程概论软件工程是一个涉及软件开发、维护和管理的学科,它强调系统化的方法和标准化的过程,旨在提高软件的质量和效率。
本文将介绍软件工程的基本概念、重要原则和发展趋势,以及软件工程师的职责和技能要求。
一、软件工程的概念与意义软件工程是一门应用科学,它研究如何以系统化、规范化和可重复的方式开发和维护软件。
与传统的工程学科一样,软件工程通过运用各种工程原则和方法,使软件开发生命周期中的每个阶段都能得到有效管理和控制。
软件工程的意义在于提高软件质量和效率,减少开发成本和时间投入,同时满足用户需求,并保证软件的可靠性和安全性。
二、软件工程的原则与方法1. 需求分析:软件工程过程的第一步是准确理解和规范用户需求。
通过与用户的交流和分析,软件工程师能够明确软件的功能和特性,为后续开发阶段提供有力的指导。
2. 设计与建模:设计是软件工程的核心环节,它包括系统架构设计、模块设计和数据库设计等。
通过合理的设计和建模,软件工程师能够确保软件的可扩展性、灵活性和可维护性。
3. 编码与测试:编码是将设计的结果转化为可执行的程序代码,测试则是验证程序的正确性和稳定性。
软件工程师应该遵循规范的编程实践和测试方法,确保代码的质量和可靠性。
4. 配置管理:配置管理是软件工程中的重要过程,它涉及到对软件配置项的标识、控制和变更管理等。
通过配置管理,软件工程师能够管理软件的版本、变更和发布,确保软件的可追溯性和一致性。
5. 迭代与持续改进:软件工程是一个不断迭代和改进的过程。
软件工程师应该通过持续的监控和评估,发现软件开发过程中存在的问题和改进的空间,并及时调整和优化。
三、软件工程的发展趋势1. 敏捷开发:敏捷开发是一种反传统的软件开发方法,强调团队合作、迭代开发和快速反馈。
相比传统的瀑布模型,敏捷开发更加注重灵活性和快速交付,适应了快速变化的市场需求。
2. 云计算与大数据:随着云计算和大数据技术的发展,软件工程也面临着新的挑战和机遇。
软件工程概论PPT课件
集成测试
总结词
集成测试是在单元测试的基础上,将多个模块或组件组合在一起进行测试,以验证它们之间的集成是否正常工作。
详细描述
在软件开发过程中,当多个模块或组件完成单元测试后,需要进行集成测试来验证它们之间的交互和集成是否正 常。集成测试的目的是发现模块之间的接口问题和集成后的性能问题,以确保软件的整体功能和性能达到要求。
编码
选择编程语言
根据项目需求和团队技术能力,选择适合的 编程语言进行编码。
编码规范
制定编码规范,确保代码的可读性、可维护 性和可扩展性。
编码实现
按照设计文档和编码规范,编写代码实现各 个模块的功能。
代码审查
对编写的代码进行审查,确保其符合规范和 设计要求,并进行必要的重构和优化。
测试
单元测试
对每个模块进行单元测试,确保其功能正常、符合设计要求。
界面风格与一致性
界面设计应保持一致的风格,以提高用户对软件系统的认知和熟悉 度。
模块设计与划分
模块设计与划分概述
模块设计与划分是指将软件系统划分为一系列相互独立、可复用 的模块。
模块化设计的好处
模块化设计可以提高软件系统的可维护性、可扩展性和可重用性。
模块间的通信与协作
模块间的通信和协作是模块化设计的关键,应确保模块间的松耦 合和低耦合。
05 软件测试工程
单元测试
总结词
单元测试是对软件中的最小可测试单元进行检查和验证,通常以函数或方法为 单位进行测试。
详细描述
单元测试是软件开发过程中的一种测试方法,旨在验证软件的最小单元是否符 合设计要求和功能规范。它通常在编码阶段同步进行,以确保代码的正确性和 可靠性。单元测试的方法包括白盒测试和黑盒测试。
软件工程概论
§3.软件生命周期 3.软件生命周期
可行性研究
• 关键问题:“该问题有行得通的解决办法吗?” 关键问题: 该问题有行得通的解决办法吗? • 简化的系统分析、设计 简化的系统分析、 • 导出系统的高层逻辑模型(数据流图) 导出系统的高层逻辑模型(数据流图) • 目标、规模更具体 目标、 • 主要任务:成本/效益分析 主要任务:成本 效益分析 • 形成可行性研究报告,提交管理部门审查 形成可行性研究报告,
总体设计
详细设计
怎样具体地实 现这个系统? 现这个系统?
§3.软件生命周期 3.软件生命周期
阶段
编码和 单元测试
主要问题
正确的程序模块
结束标准
源程序清单 单元测试方案、 单元测试方案、结果 综合测试方案、结果 综合测试方案、 集成测试 验收测试 完整一致的软件配置
综合测试
符合要求的软件
§3.软件生命周期 3.软件生命周期
§3.软件生命周期 3.软件生命周期
开发过程中的准则(principles):
用分阶段的生命周期计划严格管理
♣项目概要计划 ♣里程碑计划 ♣ 产品控制计划 ♣ 验证计划
坚持进行阶段评审
♣项目控制计划 ♣ 运行维护计划
实行严格的产品控制——基准配置管理 基准配置管理 实行严格的产品控制
(Baseline configuration management)
技术+ 技术+管理
必须意识到: 软件” 不等于编程, 必须意识到 : “ 软件 ” 不等于编程 , 它有自己的生命周期 它有自己的生命周期 (life cycle)。大型软件 。 系统的开发与其它工程项目如建造桥梁、 系统的开发与其它工程项目如建造桥梁 、 制造飞机、轮船等的开发是同理的。 制造飞机、轮船等的开发是同理的。
软件工程概论
软件工程概论软件工程概论随着信息技术的不断发展,软件在我们的生活中扮演着越来越重要的角色。
同时,软件行业也成为了当今世界最具活力的产业之一,具有无限的发展前景。
为了能够更好的利用信息技术及其应用,软件工程应运而生。
软件工程是一门关于软件开发及其维护的学科,旨在建立一组标准化的方法,规范软件的生产过程,以确保软件的质量、可靠性、有效性和安全性。
本文将介绍软件工程的概念、软件生命周期、流程模型、软件开发方法以及软件工程中的人员角色。
一、软件工程的概念软件工程是一种系统化、规范化、可量化的软件开发方法。
它是应用工程的思想、方法、技术和经验,以满足用户需求为核心,从软件的开发到维护全过程的管理学科。
软件工程的主要任务是:掌握软件开发中必要的知识、方法和技能,理解软件开发中的困难和问题并寻求合理的解决方案。
软件工程要求软件开发人员从纯技术的视角上,向管理、计划和控制等方面发展,以满足软件市场日益增长的需求。
二、软件生命周期软件生命周期指软件开发从提出需求到废止使用的整个过程。
它包括五个基本阶段:计划阶段、需求分析阶段、设计阶段、编码阶段和测试阶段。
其中,计划阶段包括项目开始前的准备活动,需求分析阶段主要是明确用户对软件的需求,设计阶段则是将需求转化为软件模型,编码阶段是根据设计方案编写程序代码,测试阶段则是对软件进行系统测试以确保质量。
三、流程模型为了更好的管理和控制软件开发过程,人们提出了软件开发流程模型。
软件开发的游程模型是指软件建设过程中不断实施的各个阶段和活动的组合,基本上可以分为瀑布模型、原型模型、迭代模型、螺旋模型、敏捷模型等。
(1)瀑布模型瀑布模型是一种经典的、线性的软件开发流程模型。
它是按照顺序完成各个阶段的,即只有当上一个阶段完成后才能进入下一个阶段。
这种模型的优点是开发流程清晰明确,整个过程非常可控,但是也有缺点,即在后期发现问题,需要回到前一个阶段进行修改,费用和时间成本较高。
(2)原型模型原型模型的主要特点是在软件开发的初期,开发人员会根据用户的需求和建议,开发出一个草图性质的产品原型。
软件工程概论
功能性语言 functional language
功能性语言用来书写软件功能规约(functional specification)
软件功能规约是软件功能的严格而完整的陈述。 通常它只刻画软件系统“做什么”的外部功能, 而不涉及系统“如何做”的内部算法。
典型的功能性语言有广谱语言、Z语言。
• 软件生存周期大体可分为如下几个活动:计算机系统 工程、需求分析、设计、编码、测试、运行和维护
36/151
• 计算机系统工程
➢ 计算机系统包括计算机硬件、软件、使用计算机 系统的人、数据库、文档、规程等系统元素。
➢ 计算机系统工程的任务:
❖确定待开发软件的总体要求和范围,以及它与其它计 算机系统元素之间的关系
➢ 硬件向巨型机和微型机二个方向发展,出现了计算机网络, 软件方面提出了软件工程,出现了“计算机辅助软件工程” (CASE)
➢ 计算机的应用领域渗透到各个业务领域,出现了嵌入式应用, 其特点是受制于它所嵌入的宿主系统
➢ 开发方式逐步由个体合作方式转向工程方式 ➢ 软件工程方面的研究主要包括软件开发模型、软件开发方法
• 按用户要求分:过程式语言和非过程式语言 过程式语言(procedural language)是通过指明一列可
执行的运算及运算次序来描述计算过程的程序设计语言。 如FORTRAN、COBOL、C等。
非过程式语言(nonprocedural language )是不显式 指明处理过程细节的程序设计语言。在这种语言中尽量引 进各种抽象度较高的非过程性描述手段,以期做到在程序 中增加“做什么”的描述成分,减少“如何做”的细节描 述。如第四代语言(4GL)、函数式语言、逻辑式语言。
需求定义语言 功能性语言 设计性语言 实现性语言(即程序设计语言) 文档语言
软件工程概论
第13章软件重用技术13.1 典型问题分析和解答【例1】实施软件重用的目的是要使软件开发工作进行得( A )。
软件重用的实际效益除了( B )之外,在企业的经营管理方面也渴望达到理想的效益。
新的应用软件开发技术和工具是以( C )作为关键,重用大粒度的( D ),为的是快速开发应用软件。
这些新技术包括微软的( E )、( F )、(G ),SUN公司的Java,OMG公司的CORBA、IDL等。
供选择的答案:A. ①更简捷②更方便③更快、更好、更省④更丰富B. ①重用率②功能扩充③效率④空间利用率C, D. ①软件②固件③构件④属性⑤对象⑥事物⑦数据⑧代码E G. ①office ②Visual Basic ③Active X ④Photoshop⑤OLE ⑥Fortran ⑦COBOL ⑧Delphi答案:A. ③, B. ①, C. ③, D. ⑤, E. ②, F. ③, G. ⑤。
其中,E、F、G的答案顺序可互换。
分析:实施软件重用的目的是要使软件开发工作进行得是更快、更好、更省。
“更快”是指在市场竞争环境中,软件开发工作能满足市场上时间方面的要求(即在提供软件产品的时间方面能赛过竞争对手);“更好”是指开发出来的软件在未来的运行中失效可能性小;“更省”是指在开发和维护期间所花费的开销少。
日美一些大公司的资料表明,软件重用率最高可望达到90 %,而且软件重用使得企业在及时满足市场、软件质量、软件开发和维护费用等方面都得到显著的改进。
除了重用率之外,在企业的经营管理方面也可望达到理想的效益。
例如,上市时间可缩短2 5倍;软件产品的缺陷密度可减少5 10倍;软件产品的维护费用可减少5 10倍;软件开发总费用可减少15% 75%,其中,75%是针对长期项目,包括开发可重用构件及支持重用的负担。
新的应用软件开发技术和工具是以“构件”作为关键,重用大粒度的“对象”,为的是快速开发应用软件。
这些新技术包括微软的Visual Basic、Active X、OLE(对象链接与嵌入),SUN公司的Java,OMG公司的CORBA(公用对象请求代理程序体系结构)、IDL(接口定义语言)等。
软件工程概论
软件演化策略与方法
组件化演化
将软件拆分为独立可复用的组件进行演 化。
VS
服务化演化
将软件功能以服务的形式提供,实现灵活 组合和扩展。
软件演化策略与方法
重构
改进软件内部结构而不改变其外部行为。
代码优化
提高代码质量和性能。
软件演化策略与方法
模块化设计
将软件划分为独立的功能模块,便于维护和 扩展。
自动化测试
04
自动化测试工具介绍
Selenium
用于Web应用的自动化测试工具,支 持多种浏览器和操作系统。
JUnit
用于Java程序的单元测试工具,可以 与其他测试框架集成使用。
Appium
用于移动应用的自动化测试工具,支 持iOS和Android平台。
TestNG
一个功能强大的Java测试框架,支持 多种测试类型(如单元测试、集成测 试、端到端测试等)。
手工测试与自动化测试
手工测试是由测试人员手动执行测试用例;自动化测试则是使用自 动化工具来执行测试用例。
黑盒测试技术
等价类划分
将输入数据划分为若干个等价类,每个等价类中的数据在 程序中的处理方式是相同的,从而减少测试用例的数量。
边界值分析
针对输入或输出的边界条件进行测试,因为边界条件往往 是容易出现错误的地方。
软件质量不达标,存在缺陷和错误。
软件危机表现 软件开发成本超出预算。 软件维护困难,难以适应需求变化。
软件工程目标与方法
软件工程目标 实现软件的工业化生产,提高软件生产率。 降低软件开发和维护成本,提高软件质量。
软件工程目标与方法
提高软件开发过程的可见性和可控性。
软件工程方法
瀑布模型:按照需求分析、设计、编码、测试和维护的顺序逐步进行软件开发,每个阶段都有明确的输 入和输出。
软件工程软件工程概论
• 工具是为运用方法而提供的自动的或半自动的软 件工程的支撑环境;
• 过程是为了获得高质量的软件所需要完成的一系 列任务的框架,它规定了完成各项任务的工作步 骤。
• 目前使用最广泛的软件工程方法学,分别是传统 方法学和面向对象方法学。
运行维护
• 通过各种必要的维护活• 动使软件系统持久地满 足用户的需要,通常有4类:
• 改正性维护:运行中发现了软件中的错误需要 修正。
• 适应性维护:为了适应变化了的软件工作环境 ,需做适当变更。
• 完善性维护:为了增强软件的功能需做变更。 • 预防性维护,即修改软件为将来的维护活动预
先做准备。
软件的特点之二
• 软件的开发和运行常受到计算机系统的限 • 制,对计算机系统有着不同程度的依赖性 。
• 开发工作的劳动强度决定了软件开发需要 有效的软件开发工具或软件开发环境。软 件的开发至今尚未完全摆脱手工操作的开 发方式。
• 软件本身是复杂的,因为 • 实际问题的复杂性; • 程序逻辑结构的复杂性。
早期的软件系统多以此作• 为首选设计标准。
B/S结构,即Browser/Server(浏览器/服务器)结构,是随着Internet 技术的兴起,对C/S结构的一种变化或者改进的结构。在这种结 构下,用户界面完全通过WWW浏览器实现,一部分事务逻辑在 前端实现,但是主要事务逻辑在服务器端实现,一种新的软件系
• 质量保证的观点 1. 每个阶段都必须完成规定的文档,没有交出 合格的文档就是没有完成该阶段的任务。 2. 每个阶段结束前都要对所完成的文档进行评 审,以便尽早发现问题,改正错误。
2. 快速原型模型
软件工程概论
的制造过程
在软件的运行和使用期间,没有硬件那样的机械磨损 和老化问题;可永久使用,轻松复制,传播极快 软件的开发和运行经常受到计算机系统的限制,对计 算机系统有着不同程度的依赖性
软件的开发至今尚未完全摆脱手工艺的开发方式
软件的特点-2
1)软件的复杂性 2)软件的不可见性 3)软件的不断变化性
于软件中
2- 研究1-中提到的途径
软件工程的基本原理
用分阶段的生命周期计划严格管理; 坚持进行阶段评审; 实行严格的产品控制; 采用现代程序设计技术; 结果应能清楚地审查; 开发小组的人员应该少而精; 承认不断改进软件工程实践的必要性。
软件工程的研究内容
软件工程的主要研究内容包括软件开发技术和软
软件开发的过程 软件工程的方法 软件开发的工具
称软件工程的三要素
软件工程三要素
软件工程中的过程是由为最终实现软件开发的总任务 而进行的阶段划分,以及各阶段工作目标,共同组成
的工作框架
软件工程中的方法是完成软件开发各阶段中各项工作 任务的技术手段
软件工程使用的工具是为方法的运用而提供的支持软 件的开发、管理和文档生成的支撑环境
于是,开创了计算机科学技术的一个新的研究领域
软件工程意义
《国标GB/T11457—1995》中关于软件工程术语的定 义是:软件工程是软件开发、运行、维护和引退的系
统方法。
软件工程的经典定义(1993年,IEEE提出):
1- 把系统的、规范的、可度量的途径应用于软件 开发、运行和维护的过程,也就是把工程化应用
第一章软件工程概论
2020/9/23
8
• 按软件规模进行划分:
类别 参加人员数 研制期限 源程序行数
微型 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
• 瀑布模型 • 演化模型 • 螺旋模型 • 喷泉模型 • 智能模型
2020/9/23
23
2020/9/23
24
演化模型
• 由于在项目开发的初始阶段人们对软 件的需求认识常常不够清晰,因而使 得开发项目难于做到一次开发成功, 出现返工再开发在所难免。做两次
• 第一次只是试验开发,其目标只是在 于探索可行性,弄清软件需求
2020/9/23
26
2020/9/23
27
喷泉模型
• 迭代
• 重复 • 演进
• 无间隙
• 各阶段间无明显界限
2020/9/23
28
2020/9/23
29
软件工程的定义
• Boehm:运用现代科学技术知识来设计 并构造计算机程序及为开发、运行和维 护这些程序所必需的相关文件资料
• IEEE: 软件工程是开发、运行、维护 和修复软件的系统方法
2020/9/23
11
软件发展阶段 • 程序设计阶段 — 50至60年代 • 程序系统阶段 — 60至70年代
• 软件工程阶段 — 70年代以后
2020/9/23
12
软件技术面临的问题 复杂性 生产率
2020/9/23
13
软件工程概论
软件工程•概述o软件▪定义•软件 = 程序 + 数据 + 文档o数据▪程序加工处理的对象。
▪包括数据的表示、组织与存储。
▪数据 = 初始化数据 + 测试数据o文档▪开发、使用和维护程序所需的图文资料。
▪文档 = 开发文档+管理文档+用户文档+维护文档。
o程序▪能完成预定功能和性能的指令集合。
o软件和程序的区别▪程序只是完整软件产品的一部分。
▪编写程序只是软件开发过程数据中的一个阶段,一般来说,其工作量仅仅是软件开发全部工作量的10%-20%▪软件的特点•抽象性o逻辑实体。
可记录。
但看不到,开发过程可视化程度低,开发结果难以直观表示。
•可复制性o与开发成本相比,复制成本很低。
•无折旧•受硬件制约•未完全摆脱手工工艺•开发费用高▪软件分类•按适用范围分o定制软件(Custom Software)项目软件▪满足特定客户的特定需要的软件。
例如网站。
o通用软件(Generic Software)产品软件▪满足市场潜在客户的通用需求的商业成品软件。
例如:Office、Windows等。
•按软件功能分o系统软件▪管理计算机自身的资源、提高计算机的使用效率并为计算机用户提供各种服务的基础软件。
例如操作系统OS、数据库管理系统DBMS等o应用软件▪解决某一具体领域的实际问题的软件。
例如CAD。
o支撑软件▪协助用户开发的工具软件,如编辑程序、程序库、图形软件包等。
•按软件体系结构分o桌面软件▪全部工作由在单一机器上的一个软件系统完成。
o分布式软件▪由多个软件协调工作来完成任务。
例如客户端与服务器C/S、浏览器与服务器B/S软件。
o并行软件▪基于多CPU环境能完成并行计算的软件。
•按规模分o小型软件(1-5人年)o中型软件(5-50人年)o大型软件(50人年以上)•按工作方式分o实时软件o分时软件o交互式软件o批处理软件o嵌入式软件(Embedded Software)▪运行于特定硬件设备中的软件。
例如:手机、汽车等中的软件。
软件工程概论3篇
软件工程概论
第一篇:软件工程概论简介
软件工程是一门涵盖软件开发全过程的学科,是将工程学应用于软件开发的过程。
它主要依靠不断变化和改进的软件过程模型,来实现软件开发,从而提供更加可靠、高质量、易于维护的软件。
首先,软件开发的重要性是显而易见的。
软件在现代社会中扮演着至关重要的角色,此外,软件的功能和质量越来越受到人们的关注,这更加强调了软件工程的重要性。
软件开发过程的复杂性也越来越明显,需要更加科学、系统的方法来管理和控制。
其次,软件工程涉及到的过程包括了软件需求分析、设计、编码、测试等方面。
针对不同的任务需求和开发阶段,软件工程采用了多种软件开发模型和方法,如:瀑布模型、原型模型、敏捷开发等。
每种开发模型都有优点和缺点,开发人员需要进行合适的选择和应用。
最后,软件工程也需要不断的更新和升级,以适应时代快速发展的需求。
软件工程领域近年来出现了很多新兴技术和方法,如云计算、大数据、DevOps等,这导致软件开发的方式和方法也在不断地变化和改进。
因此,软件工程不仅是一门学科,更是一门不断进步和发展的学科。
总之,软件工程是一个旨在提高软件开发效率和质量的科学方法。
随着时代的不断变化和发展,软件工程也在不断地更新和改进。
它已经成为现代科技领域中不可或缺的一部分。
软件工程概论
软件工程1、软件危机:软件危机是指在计算机软件的开发和保护过程中碰到的一系列严重问题。
包含双方面的问题:(1)如何开发软件,以知足对软件日趋增添的需求;(2)如何保护数目不停膨胀的已有软件。
2、软件危机的主要表现:(1)对软件开发成本和进度的预计常常很不正确;(2)用户对“已达成的”软件系统不满意的现象常常发生;(3)软件产品的质量常常靠不住;(4)软件常常是不行保护的;(5)软件往常没有适合的文档资料;(6)软件成本在计算机系统总成本中所占的比率逐年上涨;(7)软件开发生产率提升的速度,远远跟不上计算机应用快速普及深入的趋向。
3、产生软件危机的原由(1)从软件特色上看,软件是逻辑零件,不是物理零件;(2)软件是很大的程序,复杂且有好多技术问题,但缺乏严格而科学的管理;(3)软件的参加人员多且成分复杂(需求人员,开发人员,用户,保护人员等);(4)在软件实践过程中或多或少的采纳的错误的(但当时没法了解的)方法和技术(这是主要原由)4、除去软件危机的门路(1)第一应当对计算机软件有一个正确的认识;(2)更重要的是,一定充足认识到软件开发不是某种个体劳动的神奇技巧,而应当是一种组织优秀、管理严实、各种人员共同配合、共同达成的工程项目;(3)应当推行使用在实践中总结出来的开发软件的成功的技术和方法,而且研究探究更好更有效的技术和方法,赶快除去在计算机系统初期发展阶段形成的一些错误观点和做法;(4)应当开发和使用更好的软件工具总之,为认识决软件危机,既要有技术举措(方法和工具),又要有必需的组织管理举措。
5、软件工程:软件工程是从管理和技术双方面研究如何更好地开发和保护计算机软件的一门新兴学科。
(1)1968年NATO会议:软件工程就是为了经济地获取靠谱的且能在实质机器上有效地运转的软件,而成立和使用完美的工程原理。
(2)1993IEEE定义:软件工程是①把系统的、规范的、可胸怀的门路应用于软件开发、运转和保护过程,也就是把工程应用于软件;②研究①中提到的门路。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
软件生存期 life cycle
软件有一个孕育、诞生、成长、成 熟、衰亡的生存过程。这个过程即 为计算机软件的生存期 软件生存期的六个步骤,即制定计 划、需求分析、设计、程序编码、 测试及运行维护
瀑布模型
制定计划
确定要开发软件系统的总目标 给出功能、性 (硬件,软件,人 力等)、成本、效益、开发进度 制定出完成开发任务的实施计划, 连同可行性研究报告,提交管理部 门审查
软件的特点
软件是一种逻辑实体,而不是具体 的物理实体。因而它具有抽象性 软件的生产与硬件不同,在它的开 发过程中没有明显的制造过程 在软件的运行和使用期间,没有硬 件那样的机械磨损,老化问题
软件的开发和运行常受到计算机系 统的限制,对计算机系统有着不同 程度的依赖性 软件的开发至今尚未完全摆脱手工 艺的开发方式 软件本身是复杂的 实际问题的复杂性 程序逻辑结构的复杂性 软件成本相当昂贵 相当多的软件工作涉及到社会因素
演化模型
由于在项目开发的初始阶段人们对 软件的需求认识常常不够清晰,因 而使得开发项目难于做到一次开发 成功,出现返工再开发在所难免。 做两次 第一次只是试验开发,其目标只是 在于探索可行性,弄清软件需求 第二次则在此基础上获得较为满意 的软件产品
螺旋模型
螺旋模型沿着螺线旋转,在四个象 限上分别表达四个方面的活动,即: 制定计划──确定软件目标,选定实 施方案,弄清项目开发的限制 风险分析──分析所选方案,考虑如 何识别和消除风险 实施工程──实施软件开发 客户评估──评价开发工作,提出修 正建议
软件的分类
按软件的功能进行划分: 系统软件 操作系统 数据库管理系统 设备驱动程序 通信处理程序等
支撑软件 文本编辑程序 文件格式化程序 磁盘向磁带向数据传输的程序 程序库系统 支持需求分析、设计、实现、 测试和支持管理的软件
应用软件
商业数据处理软件 工程与科学计算软件 计算机辅助设计/制造软件 系统仿真软件 智能产品嵌入软件 医疗、制药软件 事务管理、办公自动化软件 计算机辅助教学软件
需求分析和定义
对用户提出的要求进行分析并给出 详细的定义 编写软件需求说明书或系统功能说 明书及初步的系统用户手册
提交管理机构评审
软件设计
概要设计 — 把各项需求转换成软件 的体系结构。结构中每一组成部分 都是意义明确的模块,每个模块都 和某些需求相对应 详细设计 — 对每个模块要完成的工 作进行具体的描述,为源程序编写 打下基础 编写设计说明书,提交评审。
按软件规模进行划分:
研制期限 1~ 4周 1~ 6月 1~ 2年 2~ 3年 4 ~ 5年 5~10年 源程序行数 0.5k 1k~2k 5k~50k 50k~100k 1M(=1000k) 1M~10M
类别 参加人员数 微型 1 小型 1 中型 2~ 5 大型 5~20 甚大型 100~1000 极大型 2000~5000
运行/维护
改正性维护 运行中发现了软件中 的错误需要修正
适应性维护 为了适应变化了的软 件工作环境,需做适当变更 完善性维护 为了增强软件的功能 需做变更
软件生存期模型
软件生存期模型是跨越整个生存期 的系统开发、运作和维护所实施的 全部过程、活动和任务的结构框架 瀑布模型 演化模型 螺旋模型 喷泉模型 智能模型
按软件工作方式划分: 实时处理软件 分时软件 交互式软件 批处理软件 按软件服务对象的范围划分: 项目软件 产品软件
按使用的频度进行划分: 一次使用 频繁使用 按软件失效的影响进行划分: 高可靠性软件 一般可靠性软件
软件发展阶段
程序设计阶段 — 50至60年代 程序系统阶段 — 60至70年代 软件工程阶段 — 70年代以后
软件工程过程
软件规格说明:规定软件的功能及 其运行的限制 软件开发:产生满足规格说明的软 件 软件确认:确认软件能够完成客户 提出的要求 软件演进:为满足客户的变更要求, 软件必须在使用的过程中演进
软件工程过程的特性
易理解性 可见性 可支持性 可接受性
可靠性 健壮性 可维护性 速度
程序编写
把软件设计转换成计算机可以接受 的程序代码,即写成以某一种特定 程序设计语言表示的“源程序清单”
写出的程序应当是结构良好、清晰 易读的,且与设计相一致的
软件测试
单元测试,查找各模块在功能和结 构上存在的问题并加以纠正
组装测试,将已测试过的模块按一 定顺序组装起来 按规定的各项需求,逐项进行有效 性测试,决定已开发的软件是否合 格,能否交付用户使用
什么是软件 软件的分类 软件的发展 软件生存期 软件工程 软件工程的目的和要求
什么是软件?
软件是计算机系统中与硬件相互依 存的另一部分,它是包括程序,数 据及其相关文档的完整集合。 程序是按事先设计的功能和性能要 求执行的指令序列 数据是使程序能正常操纵信息的数 据结构 文档是与程序开发,维护和使用有 关的图文材料
喷泉模型
迭代
重复 演进 无间隙 各阶段间无明显界限
软件工程的定义
Boehm:运用现代科学技术知识来设计 并构造计算机程序及为开发、运行和维 护这些程序所必需的相关文件资料 IEEE: 软件工程是开发、运行、维护 和修复软件的系统方法 Fritz Bauer:建立并使用完善的工程化 原则,以较经济的手段获得能在实际机 器上有效运行的可靠软件的一系列方法
软件工程三要素: 方法、工具和过程
软件工程方法为软件开发提供了 “如何做” 的技术 软件工具为软件工程方法提供了自 动的或半自动的软件支撑环境
软件工程过程定义了: 方法使用的顺序 要求交付的文档资料 为保证质量和适应变化所需要的 管理 软件开发各个阶段完成的里程碑