软件工程的几种定义
软件工程的几种定义
软件工程的几种定义软件工程是指应用系统化、规范化和可持续发展的原则、方法和工具来开发、维护和管理软件的学科。
随着软件的快速发展和广泛应用,软件工程的定义也逐渐形成并演变。
在本文中,将介绍软件工程的几种定义。
一、软件工程的经典定义软件工程一词最早由美国学者弗里德曼(Friedman)于1968年提出,并在1969年的美国计算机学会(ACM)会议上首次正式使用。
软件工程的经典定义是指通过系统化、规范化的方法来开发、维护和管理软件,以提高软件质量和效率。
弗里德曼将软件开发过程类比为建筑工程,强调了规范和纪律的重要性。
二、软件工程的工程化定义软件工程的工程化定义强调将软件开发过程视为一种工程活动,强调工程方法和技术在软件开发中的应用。
它强调软件工程师必须具备系统工程、管理学、计算机科学等多学科的知识和技能,以应对软件开发过程中的挑战。
三、软件工程的过程控制定义软件工程的过程控制定义强调通过控制软件开发过程中的各个环节,确保软件开发过程的可控性和可预测性。
它倡导使用统一的开发流程和规范,并通过度量和评估来监控和改进软件开发过程。
四、软件工程的价值导向定义软件工程的价值导向定义将软件开发过程的目标定位于为用户提供有价值的软件产品。
它关注软件的功能、质量、性能等方面,以满足用户需求为出发点,通过合理的规划和组织来创造具备商业竞争力的软件产品。
五、软件工程的技术方法论定义软件工程的技术方法论定义将软件开发过程视为一种科学,强调使用科学的方法和技术来解决软件开发中的问题。
它将软件开发过程分解为多个阶段,并通过应用软件工程方法和技术来实现每个阶段的目标。
六、软件工程的持续改进定义软件工程的持续改进定义强调软件开发过程的不断改进和优化。
它倡导使用反馈机制和度量指标,通过持续评估和改进来提高软件开发过程的效率和质量。
综上所述,软件工程的定义多种多样,但它们都强调了软件开发过程的系统性、规范性和可持续发展的特点。
无论采用哪种定义,软件工程都是一个充满挑战和创新的领域,需要软件工程师具备广泛的知识和技能,以开发出更安全、更可靠、更高效的软件产品。
软件工程的定义、内容及步骤
软件⼯程的定义、内容及步骤软件⼯程⼀直以来都缺乏⼀个统⼀的定义,很多学者、组织机构都分别给出了⾃⼰的定义:Boehm:运⽤现代科学技术知识来设计并构造计算机程序及为开发、运⾏和维护这些程序所必需的相关⽂件资料。
IEEE:软件⼯程是开发、运⾏、维护和修复软件的系统⽅法。
Fritz Bauer:建⽴并使⽤完善的⼯程化原则,以较经济的⼿段获得能在实际机器上有效运⾏的可靠软件的⼀系列⽅法。
软件⼯程学的内容软件⼯程学的主要内容是软件开发技术和软件⼯程管理.软件开发技术包含软件⼯程⽅法学、软件⼯具和软件开发环境;软件⼯程管理学包含软件⼯程经济学和软件管理学。
软件⼯程基本原理著名软件⼯程专家B.Boehm综合有关专家和学者的意见并总结了多年来开发软件的经验,于1983年在⼀篇论⽂中提出了软件⼯程的七条基本原理。
(1)⽤分阶段的⽣存周期计划进⾏严格的管理。
(2)坚持进⾏阶段评审。
(3)实⾏严格的产品控制。
(4)采⽤现代程序设计技术。
(5)软件⼯程结果应能清楚地审查。
(6)开发⼩组的⼈员应该少⽽精。
(7)承认不断改进软件⼯程实践的必要性。
B.Boehm指出,遵循前六条基本原理,能够实现软件的⼯程化⽣产;按照第七条原理,不仅要积极主动地采纳新的软件技术,⽽且要注意不断总结经验。
软件⼯程(SoftWare Engineering)的框架可概括为:⽬标、过程和原则。
(1)软件⼯程⽬标:⽣产具有正确性、可⽤性以及开销合宜的产品。
正确性指软件产品达到预期功能的程度。
可⽤性指软件基本结构、实现及⽂档为⽤户可⽤的程度。
开销合宜是指软件开发、运⾏的整个开销满⾜⽤户要求的程度。
这些⽬标的实现不论在理论上还是在实践中均存在很多待解决的问题,它们形成了对过程、过程模型及⼯程⽅法选取的约束。
(2)软件⼯程过程:⽣产⼀个最终能满⾜需求且达到⼯程⽬标的软件产品所需要的步骤。
软件⼯程过程主要包括开发过程、运作过程、维护过程。
它们覆盖了需求、设计、实现、确认以及维护等活动。
软件工程概念
软件工程概念软件工程概念1. 软件工程的定义软件工程是一门涉及软件开发、维护和管理的学科,它利用系统化、规范化和量化的方法来开发和维护高质量的软件。
软件工程的目标是提高软件的质量、可靠性和可维护性,并确保软件项目在预定的时间和预算范围内完成。
2. 软件工程的特点软件工程具有以下几个特点:多学科综合:软件工程需要整合计算机科学、数学、工程学等多个学科的知识。
可量化和可测量性:软件工程使用度量和度量方法来评估软件的质量和进度。
工程化方法:软件工程采用工程化的方法,包括需求分析、设计、编码、测试和维护等环节。
团队合作:软件工程通常需要一个开发团队来合作完成项目,需要沟通和协调。
3. 软件工程的生命周期软件工程的生命周期包括以下几个阶段:需求分析:确定用户需求和系统要求,为后续的开发工作打下基础。
设计:根据需求分析得到的需求,设计软件的结构、功能和界面等。
编码:根据设计文件编写代码,实现软件的功能。
测试:测试软件的功能、性能和稳定性,发现并修复bug。
部署:将软件部署到目标系统中,让用户可以使用。
维护:随着时间的推移,软件可能需要更新和维护,以修复bug或添加新的功能。
4. 软件工程的原则软件工程有一些基本原则,包括:模块化:将系统划分为多个模块,每个模块负责一个特定的功能。
可复用性:设计和实现可复用的软件组件,提高开发效率和软件质量。
适应性:软件应该能够适应不断变化的需求和环境。
可测试性:软件应该易于测试,以便发现和解决问题。
文档化:软件应该有清晰的文档,方便开发者和用户理解和使用。
5. 软件工程的工具和技术软件工程使用各种工具和技术来支持开发过程,包括:集成开发环境(IDE):用于编写、调试和测试代码的集成开发环境,如Eclipse、Visual Studio等。
版本控制系统:用于管理和追踪代码版本的工具,如Git、SVN 等。
自动化测试工具:用于自动执行测试用例的工具,如JUnit、Selenium等。
软件工程基本概念
软件工程基本概念:系统工程、软件开发方法、软件工具与软件开发环境软件工程基本概念1.系统工程系统工程是一种跨学科的工程方法,它强调在系统开发过程中采用全面的视角和思维方式,以系统性的方法和策略来解决各种问题。
在软件工程中,系统工程着重应用于大型、复杂系统的开发,如航天、军事、大型企业等。
系统工程强调对系统的整体性、结构性和功能性进行全面分析,包括系统需求分析、系统设计、系统实现、系统测试与验收等阶段。
在系统开发过程中,系统工程采用一系列工具和技术,如系统建模、系统架构设计、系统仿真等,以实现系统的优化和改进。
2.软件开发方法软件开发方法是一种用于指导软件开发过程的方法论,它提供了一组标准的步骤和原则,以指导开发者进行有效的软件开发。
常见的软件开发方法包括:结构化开发方法(SDM)、面向对象开发方法(ODM)、敏捷开发方法(ADM)、迭代开发方法(IDM)等。
这些方法在不同的软件开发场景和项目中具有不同的应用和优势。
软件开发方法的核心是提供一套完整的开发流程和规范,以指导开发者进行需求分析、设计、编码、测试和维护等软件开发活动。
此外,软件开发方法还强调对开发过程的管理和控制,以确保软件开发的质量和效率。
3.软件工具软件工具是用于辅助软件开发的软件或工具集,它们能够提高软件开发的效率和质量。
常见的软件工具包括:集成开发环境(IDE)、版本控制系统(VCS)、代码质量检测工具、调试工具、测试工具、需求管理工具等。
这些工具在不同的软件开发阶段和领域中具有广泛的应用和优势。
软件工具的目的是帮助开发者提高开发效率和质量,它们通过自动化、智能化和可视化等方式,减少了开发者的工作量和难度,同时提高了软件开发的精度和可靠性。
4.软件开发环境软件开发环境是指一系列软件工具和技术的集合,它们用于支持软件开发的整个生命周期。
常见的软件开发环境包括:软件开发平台(如Java平台、Python平台等)、软件开发框架(如Spring、Django等)、软件测试工具(如Junit、Selenium等)、版本控制系统(如Git、SVN等)、持续集成与持续部署(CI/CD)工具等。
名词解释软件工程
三、名词解释1、软件:在计算机系统中,与硬件互相依存旳逻辑部件,它由程序、数据及有关文档构成。
2、软件工程:是指导计算机软件开发和维护旳工程学科。
采用工程旳概念、原理、技术和措施来开发与维护软件,把通过时间考验而证明对旳旳管理技术和目前可以得到旳最佳旳技术措施结合起来。
3、数据字典:是有关数据旳信息旳集合,也就是对数据流图中包括旳所有元素旳定义旳集合。
4、模块化:是把程序划提成若干个模块,每个模块完毕一种子功能,把这些模块集总起来构成一种整体,也许完毕指定旳功能满足问题旳需求。
5、类:对具有相似数据和相似操作旳一组相似对象旳定义。
6、软件危机: 是指在计算机软件旳开发和维护过程中所碰到旳一系列严重问题。
7、软件维护:在软件已经交付使用之后,为了改正错误或满足新旳需要而修改软件旳过程.8、继承:子类自动地共享基类中定义旳数据和措施旳机制.9、投资回收期: 就是使合计旳经济效果等于最初投资旳需要旳时间。
10、构造化分析措施: 就是面向数据流自顶向下逐渐求精进行需求分析旳措施。
11、软件旳生命周期:一种软件从定义、开发、使用和维护,直到最终被废弃所经历旳一系列时期。
12、投资回收期:就是使合计旳经济效果等于最初投资旳需要旳时间。
13、构造化分析措施:就是面向数据流自顶向下逐渐求精进行需求分析旳措施。
14、模块:数听阐明、可执行语句等程序对象旳集合,它是单独命名旳并且可通过名字来访问。
15、宽度:是软件构造内同一种层次上旳模块总数旳最大值。
16、事务流:数据沿输入通路抵达一种处理,这个处理根据输入数据旳类型在若干个动作序列中选出一种来执行。
此类数据流应当划分为一类特殊旳数据流,称为事务流。
17、耦合:衡量不一样模块彼此间互相依赖旳紧密程度。
18、事件:是某个特定期刻所发生旳事情,它是对引起对象从一种状态转换到另一种状态旳现实世界中旳事件旳抽象。
19、函数重载:指在同一作用域内旳若干个参数特性不一样旳函数可以使用相似旳函数名字。
软件工程基本概念
软件工程基本概念一、基本概念:1、程序:是为了实现设计的功能和性能要求而编写的指令序列。
2、数据:是使指令能够正常操纵信息的数据结构。
3、文档:是与程序开发、维护和使用有关的图文资料。
4,软件(公认的解释):是计算机系统中与硬件相互依存的另一部分,它是包括程序、数据及其相关文档的完整集合。
另一种定义:计算机程序,数据结构和描述所需逻辑方法、过程或控制的文档。
4-1.实时软件:管理、分析、控制现实世界中所发生的事件的软件。
4-2.嵌入式软件:驻留在专用的职能产品中,用于控制这些产品进行正常工作,完成很有限、很专业的功能的软件。
5,软件危机:就是指在软件开发和软件维护过程中所存在的一系列严重的问题。
5-1.软件的“生命周期”:软件产品从策划、定义、开发、使用和维护直到最后废弃,要经过以一个漫长的时期,这个时期称为软件的“生命周期”。
6,软件工程(Boehm)定义:运用现代科学技术知识来设计并构造计算机程序及为开发、运行和维护这些程序所必需的相关文件资料。
7,软件工程(IEEE)定义:是开发、运行、维护和修复的系统方法。
8,软件工程(Fritz Bauer)定义:建立并使用完善的工程化的原则,以较经济的手段获得能在实际机器上有效运行的可靠的软件的一系列方法。
9,软件工程过程:是用以开发和维护软件及其相关产品的一系列活动,包括软件工程活动和软件管理活动。
这些活动的执行可以使有序的、循环的、重复的、嵌套的、也可以是有条件引发的。
10,软件工程过程模型:在一个具体的实际工程活动中,软件工程师必须设计、提炼出一个工程开发策略,用以覆盖软件过程中的基本阶段,确定所涉及的过程、方法、工具。
11、过程性能:一个软件开发组织遵循其软件过程所得到的实际结果称之为该过程的“过程性能”。
12,过程能力:软件开发组织通过执行其软件过程能够实现预期结果的程度称之为该组织的“软件过程能力”13,过程成熟度:一个特定软件过程被明确和有效地定义、管理、测量和控制的程度称为此过程的成熟度。
软件工程课件(全)
03
识别项目中的关键路径,确保项目按计划进 行
04
及时调整项目计划,应对项目变更和不确定 性
风险管理策略制定
识别项目中的潜在风险, 包括技术风险、市场风险、 资源风险等
制定相应的风险应对策略 和措施,如风险规避、减 轻、转移和接受等
评估风险的概率和影响程 度,制定风险优先级列表
监控风险状态,及时调整 风险管理计划
质量改进
根据质量评估结果,制定相应的改进措施, 如优化性能、增强安全性等。
经验教训总结
对测试过程中遇到的问题进行总结,形成经 验教训,为后续项目提供参考。
06
项目管理与团队协作
项目计划制定与监控
01 制定详细的项目计划,包括项目目标、范围 、时间表、资源需求、成本估算等
02 设立项目里程碑,对项目进度进行阶段性监 控
开发方向。
持续集成和测试
03
迭代增量模型强调持续集成和测试的重要性,以确保每个迭代
周期都能交付高质量的软件产品。
03
需求分析与管理
需求获取与整理
确定需求来源
与客户、利益相关者、业务领 域专家等进行沟通,收集原始
需求。
需求分类
将收集到的需求按照功能、性 能、安全、易用性等方面进行 分类。
需求筛选
去除重复、模糊、不切实际的 需求,确保需求的准确性和可 行性。
处理变更请求
根据实际情况,决定是否接受变更请求,并 制定相应的实施计划。
跟踪和验证变更
对实施的变更进行跟踪和验证,确保变更的 正确性和完整性。
04
系统设计与实现
系统架构设计
分层架构
将系统划分为表示层、业务逻辑层和数据访问层,实现高内聚、 低耦合的设计。
软件工程概念
软件工程概念第一章:软件定义1.软件( Software):计算机系统中与硬件相互依存的另一部分,它是包括程序(Program),数据(D ata)及其相关文档( Document)的完整集合。
2.软件的特征:逻辑复杂,开发复杂,成本高,风险大,维护困难。
3.按软件功能分类:系统软件,支撑软件,应用软件。
系统软件:操作系统,数据库管理系统,设备驱动程序,通信处理程序等。
支撑软件:文本编辑程序,文件格式化程序,程序库系统等应用软件:商业数据处理软件,工程与科学计算软件,计算机辅助设计/制造软件,系统仿真软件,智能嵌入软件,医疗、制药软件,事务管理、办公自动化软件。
按软件规模分类:微型,小型,中型,大型,甚大型,极大型。
按软件工作方式分:实时处理软件,分时软件,交互式软件,批处理软件4.软件危机:是指在计算机软件的开发和维护过程中所遇到的一系列严重问题5.软件危机主要是两个问题:1.如何开发软件,以满足对软件的日益增长的需求?2.如何维护数量不断膨胀的已有软件?5.软件危机的表现:1.成本高,开发成本估计不准确2.软件质量不高、可靠性差3.进度难以控制4.维护非常困难5.用户不满意6. 由于软件质量问题导致失败的软件项目非常多。
6.产生软件危机的原因:1.与软件本身的特点有关 2.与软件开发与维护的方法不正确有关.软件工程学的目的:以较低的成本研制具有较高质量的软件软件工程技术的两个明显特点:1.强调规范化2. 强调文档化软件工程的基本原理(7条):1.用分阶段的生命周期计划严格管理2.坚持进行阶段评审3.实严格的产品控制4.采用现代程序设计技术5.结果应能清楚地审查6.开发小组的人员应该少而精7.承认不断改进软件工程实践的必要性8.软件工程方法学包含3个要素:方法、工具和过程9.软件生命周期:软件定义(问题定义,可行性研究,需求分析),软件开发(总体设计,详细设计,编码和单元测试,集成测试),运行维护(持久满足用户需求)10.软件过程模型:瀑布模型,快速原型模型,增量模型,螺旋模型,喷泉模型。
软件工程的几种定义(精)
软件工程的几种定义(精)软件工程的几种定义软件工程是一门涉及软件开发、维护和管理的学科。
尽管软件工程是一个相对年轻的领域,但已经有多种定义被提出。
在本篇文章中,我们将探讨几种常见的软件工程定义,并了解它们对该领域的重要性。
定义一:IEEE标准610.12-1990根据IEEE标准610.12-1990,软件工程被定义为:“(1) 应用系统化、规范化、可量化的方法来开发、操作和维护软件;(2) 在软件工程的原则、方法和过程的框架下,将经验和理论知识应用于软件开发中。
”这一定义强调了软件工程的系统化和规范化,并强调了使用经验和理论知识来指导软件开发过程的重要性。
定义二:Barry W. Boehm软件工程大师Barry W. Boehm提出了另一种定义:“软件工程是一种应用工程原理和方法的计算机程序开发方法。
”这一定义强调了软件工程与工程学科的关联,并提到了使用工程原理和方法来开发计算机程序的重要性。
定义三:Fritz BauerFritz Bauer是软件工程的早期推动者之一,在他的定义中,软件工程被视为“(1) 对软件开发的管理和经济学的问题进行研究;(2) 对软件工艺和理论基础的研究;(3) 对软件项目和软件生产过程进行实证研究;(4) 软件工作者的培训和教育。
”这一定义包含了管理、经济学、工艺和教育等多个方面,并强调了软件工程的综合性质。
定义四:Fred Brooks著名计算机科学家Fred Brooks在他的著作《人月神话》中对软件工程进行了定义。
他认为软件工程是“(1) 组织化的、能够预测和可控的方法论;(2) 关心软件生命周期的各个阶段。
”这一定义强调了软件工程的组织化和可控性,以及对软件生命周期各个阶段的关注。
定义五:ISO/IEC 12207ISO/IEC 12207是软件工程国际标准,定义了软件生命周期中的过程和活动。
该标准对软件工程进行了全面而系统的定义,涵盖了需求分析、设计、编码、测试等关键流程,并强调了管理和质量保证等方面的重要性。
软件工程概念
软件工程概念第一章:软件定义1. 软件(Software):计算机系统中与硬件相互依存的另一部分,它是包括程序(Program), 数据(Data)及其相关文档(Document)的完整集合。
2. 软件的特征:逻辑复杂,开发复杂,成本高,风险大,维护困难。
3. 按软件功能分类:系统软件,支撑软件,应用软件。
系统软件:操作系统,数据库管理系统,设备驱动程序,通信处理程序等。
支撑软件:文本编辑程序,文件格式化程序,程序库系统等应用软件:商业数据处理软件,工程与科学计算软件,计算机辅助设计/制造软件,系统仿真软件,智能嵌入软件,医疗、制药软件,事务管理、办公自动化软件。
按软件规模分类:微型,小型,中型,大型,甚大型,极大型。
按软件工作方式分:实时处理软件,分时软件,交互式软件,批处理软件4. 软件危机:是指在计算机软件的开发和维护过程中所遇到的一系列严重问题5. 软件危机主要是两个问题:1.如何开发软件,以满足对软件的日益增长的需求?2•如何维护数量不断膨胀的已有软件?5. 软件危机的表现:1.成本高,开发成本估计不准确 2.软件质量不高、可靠性差3.进度难以控制4.维护非常困难5.用户不满意6.由于软件质量问题导致失败的软件项目非常多。
6. 产生软件危机的原因:1•与软件本身的特点有关2•与软件开发与维护的方法不正确有关. 软件工程学的目的:以较低的成本研制具有较高质量的软件软件工程技术的两个明显特点: 1.强调规范化2.强调文档化软件工程的基本原理(7条):1.用分阶段的生命周期计划严格管理 2.坚持进行阶段评审 3.实严格的产品控制 4.采用现代程序设计技术 5.结果应能清楚地审查 6.开发小组的人员应该少而精7.承认不断改进软件工程实践的必要性8. 软件工程方法学包含3个要素:方法、工具和过程9. 软件生命周期:软件定义(问题定义,可行性研究,需求分析),软件开发(总体设计,详细设计,编码和单元测试,集成测试),运行维护(持久满足用户需求)10. 软件过程模型:瀑布模型,快速原型模型,增量模型,螺旋模型,喷泉模型。
软件工程的概念、目标及生命周期
软件工程的概念、目标及生命周期软件工程认真研究和分析了软件危机背后的真正原因,便开始探索用工程的方法进行软件生产的可能性,即用现代工程的概念、原理、技术和方法进行计算机软件的开发、管理和维护。
于是,计算机科学技术的一个新领域——软件工程诞生了。
软件工程的概念软件工程的定义有许多,下面给出两个典型的定义。
1968年秋季,北大西洋公约组织举行的国际会议上首次给出了软件工程的定义:软件工程是为了经济地获得能够在实际机器上高效运行的可靠软件而建立和使用的一系列好的工程化原则。
1993年《IEEE Standard Glossary of Software Engineering Terminology》给出了一个更全面的定义:软件工程是,①将系统性的、规范化的、可定量的方法应用于软件的开发、运行和维护,即将工程化应用到软件上。
②对①中所述方法的研究。
从软件工程的定义可以看出,软件工程不仅强调软件开发技术的研究,还包括软件项目管理。
统计数据表明,大多数软件开发项目的失败,并不是由于软件开发技术方面的原因。
它们的失败是由于不适当的管理造成的。
遗憾的是,尽管人们对软件项目管理重要性的认识有所提高,但在软件管理方面的进步远比在设计方法学和实现方法学上的进步小。
此外,软件工程是将工程的思想应用于软件领域。
与一切工程领域一样,软件工程师也需要不断积累经验,从已有的理论、方法和工具中选择最适宜的,同时还要不断探索新的理论、方法和工具。
软件工程的目标软件工程的目标就是运用最先进的技术和经过时间检验证明正确的管理方法来提高软件的质量和生产率,也就是在给定成本、进度的前提下,开发出高质量的软件产品,最终实现软件生产自动化。
通常质量和生产率是一对矛盾,但这两者又都是软件开发追求的目标。
因此,好的软件工程方法要能同时提高软件质量和生产率。
概括地说,软件工程就是要解决软件危机问题,具体到当前软件工程主要面临如下问题。
1.遗留系统带来的挑战现在使用的许多大型系统都是几年前,甚至十几年前开发的。
软件工程基本知识点
软件工程基本知识点
软件工程的基本知识点包括以下几个方面:
1.软件工程的定义:软件工程是一门指导软件开发的工程学科,它采用工程化的概念、原
理、技术和方法来进行软件的开发和维护。
软件工程的目标是以较少的投资获取高质量的软件。
2.软件生命周期:软件生命周期是指从用户需求开始,经过开发、交付使用,在使用中不
断地增补修订,直至软件报废的全过程。
这个过程包括可行性研究和项目开发计划、需求分析、概要设计等阶段。
3.软件的定义:一种公认的传统的软件定义为:软件=程序+数据+文档。
其中,程序是按
事先设计的功能和性能要求执行的指令序列;数据是使程序能够正确地处理信息的数据结构;文档是与程序开发、维护和使用有关的图文资料。
4.软件的特点:软件具有抽象性,可以存储在介质中,但无法直接看到其形态。
此外,软
件的生产方式与硬件不同,一旦设计开发出来,复制十分简单,成本也极为有限。
因此,软件产品的生产成本主要是设计开发的成本。
5.软件与硬件的区别:软件是整个计算机系统中的一个逻辑部件,而硬件是一个物理部件。
软件与硬件的维护也不同,硬件是有耗损的,其产生的磨损和老化会导致故障率增加甚至损坏,而软件的维护则主要是针对程序和数据的修改和完善。
以上只是软件工程的一些基本知识点,实际上软件工程涉及的领域非常广泛,包括软件开发方法、软件开发工具、软件项目管理等多个方面,需要不断学习和实践才能掌握。
软件工程概述
第1章 软件工程概述
二、软件危机
20世纪60年代末70年代初,西方工业发达国 家经历了一场“软件危机”。这场软件危机表现 在:一方面软件十分复杂,价格昂贵,供需差日 益增大,另一方面软件开发时又常常受挫,质量 差,指定的进度表和完成日期很少能按时实现, 研制过程很难管理,即软件的研制往往失去控制。 我们称软件开发和维护过程中所中遇到的这一系 列严重问题为软件危机。
1.2 软件的发展和软件危机
一、计算机系统的发展历程 第一代(20世纪60年代中期以前):程序设计阶段。 第二代(从20世纪60年代中期到70年代中期):程
序系统阶段——“软件工程” 学科诞生。 第三代(从20世70年代中期到80年代中期):软
件工程阶段。 第四代(从20世纪80年代中期至今):软件产业在
第1章 软件工程概述
二、软件开发模型
1.瀑布模型:将软件生存周期的各项活动规定为依 照固定顺序连接的若干阶段工作,形如瀑布流水, 最终得到软件产品。
如同任何其他事物一样,软件也有一个孕育、诞生、成长、成熟、衰亡的生存过程,一般称之为计算机软件的生存期。
第1章 第1章
软软软件件件工工程程概概工述述 程下的定义为:软件工程是开发、运
行、维护和修复软件的系统方法,其中“软
件”的定义为:计算机程序、方法、规则、
相关的文档资料以及在计事机上运行时所必
第1章 软件工程概述
(2)可行性研究:任务是为前一阶段提出的问 题寻求一种至数种在技术上可行、且在经济上有 较高效益的解决方案。
第1章 软件工程概述
2.软件开发时期
(1)需求分析:弄清用户对软件系统的全部需求, 主要是确定目标系统必须具备哪些功能。
软件工程
Page 11
实施计划:前面所创建的设计勾画了所要构建的系统的路 线图。也许存在没有想到的路径,也可能在实施过程中会 发现更好的解决路径,但是这个计划可以保证在实施过程 不至于迷失方向。 检查结果:你不能保证你的解决方案是最完美的,但是你 可以保证设计足够的测试来发现尽可能多的错误。(成功 的测试是发现了错误,而不是没发现错误)
沟通 策划
建模
时间
构建
Page 16
部署
二、惯用过程模型: 1、瀑布模型:有时候可以清楚地了解问题的需求,当从沟 通到部署采用线性工作流方式的时候。这种情况通常发生在 需要对一个已经存在的系统进行明确定义的适应性调整或是 增强的时候(比如政府修改了规则,财务软件必须进行相应 的修改);也可能发生在很少数新的开发工作上,但是需求 必须是准确定义的和相对稳定的。 瀑布模型(waterfall model),又被称为经典生命周期 (classic life cycle),它提出了一个系统的、顺序的软件开 发方法,从用户需求规格说明开始,通过计划、建模、构建 和部署的过程,最终提供一个完整的软件并提供技术支持。
5、部署:软件(全部或者部分增量)交付到用户,用户 对其测评并给出反馈意见。
Page 7
上述5个通用框架活动既适用于简单小程序的开发, 也可用于大型网络应用程序的建造以及基于计算机 的大型复杂系统工程。不同的应用案例中,软件过 程的细节可能差别很大,但是框架活动都是一致的。 对许多项目来说,随着项目的开展,框架活动可以 迭代应用,即在项目的多次迭代过程中,沟通、策 划、建模、构建、部署活动不断重复,每次项目迭 代都会产生一个增量,每个软件增量实现了部分软 件特性和功能。随着每一次增量的产生,软件逐渐 完善。
Page 5
软件工程(名词解释)
1、软件:能完成预定功能、性能,并对相应数据进行加工的程序和描述数据及其操作的文档。
2、软件工程:是采用工程的概念、原理、技术和方法,并结合正确的管理技术和当前能够得到的最先进的技术方法,经济高效地开发和维护软件的一门工程学科。
3、软件过程:软件过程是指软件开发人员为了开发出高质量的软件产品所需完成的一系列任务的框架,它规定了完成各项任务的工作步骤。
4、软件生命周期:一个软件从定义、开发、使用和维护直至最后被废弃要经历的漫长时期。
5、软件危机:是指计算机软件的开发和维护过程中所遇到的一系列严重的问题。
页脚6、结构化分析:是面向数据流自顶向下逐步求精获取的方法,适用于数据处理系统的需求分析。
7、实体—联系图:描述系统所有数据对象的组成和属性及数据对象关系的图形语言。
8、数据字典:由数据条目组成,数据字典描述、组织和管理数据流图中的数据流、加工、数据存储等数据元素。
9、结构化设计:基于数据流的设计方法,将数据流图转换为软件结构。
10、模块化:是指解决一个复杂问题时自顶向下逐层把软件系统划分成若干模块的过程。
页脚11、逐步求精:是一种自顶向下的设计策略,是人类解决复杂问题时常用的一种技术。
是为了能集中精力解决主要问题而尽量推迟考虑问题的细节。
12、信息隐蔽:在设计中确定模块时使得一个模块的所包含的信息,对于不需要这些信息的模块来说,是不能访问的。
13、耦合:也称模块之间的联系。
指在软件系统结构中,各模块间相互联系紧密程度的度量。
模块之间的联系越紧密,其耦合程度就越强,模块的独立性就越差。
14、内聚:也称块内联系,指模块的功能强度的度量,是一个模块内部各元素之间彼此结合紧密程度的度量。
15、作用域:是指受该模块内的一个判断影响的所有模块的集合。
页脚16、控制域:指模块本身以及其所有直接或间接从属于它的模块集合。
17、扇出:指一个模块直接调用模块的数目。
18、扇入:指有多少个上级模块直接调用它。
19、模块独立性:每个模块独立完成一个相对独立的特定子功能,并且和其他模块之间的关系很简单。
软件工程基础知识点总结
软件工程基础部分知识点总结知识点一软件工程的基本概念1、软件定义:是计算机系统中与硬件相互依存的另一部分;是包括程序、数据以及相关文档的完整集合..1程序是软件开发人员根据用户需求开发的、用程序设计语言描述的、适合计算机执行的指令语句序列..2数据是使程序能够正常操作信息的数据结构..3文档是与程序开发、维护和使用有关的图文资料..国标GB计算机软件的定义:与计算机系统的操作相关的计算机程序、规程、规则以及可能有的文件、文档及数据..2、软件特点:1软件是一种逻辑实体;而不是物理实体;具有抽象性;是计算机的无形部分;2软件的生产与硬件不同;它没有明显的制作过程;3软件在运行、使用期间不存在磨损、老化问题;4软件的开发、运行对计算机系统具有依赖性;受计算机系统的限制;这导致了软件移植的问题;5软件复杂性高;成本昂贵;6软件开发涉及诸多的社会因素3、软件的分类:按照功能可以分为:应用软件、系统软件、支撑软件或工具软件1应用软件是为解决特定领域的应用而开发的软件..2系统软件是计算机管理自身资源;提高计算机使用效率并为计算机用户提供各种服务的软件..3支撑软件是介于系统软件和应用软件之间;协助用户开发软件的工具软件..4、软件危机:是指在软件的开发和维护过程中所遇到的一系列严重问题.. 软件危机主要体现在以下几个方面:①软件开发的实际成本和进度估计不准确②开发出来的软件常常不能使用户满意③软件产品的质量不高;存在漏洞;需要经常打补丁④大量已有的软件难以维护⑤软件缺少有关的文档资料⑥开发和维护成本不断提高;直接威胁计算机应用的扩大⑦软件生产技术进步缓慢;跟不上硬件的发展和人们需求增长5、软件工程:此概念的出现源自软件危机..软件工程是指应用计算机科学、数学及管理科学等原理;以工程化的原则和方法来开发与维护软件的学科.. 1研究软件工程的主要目的就是在规定的时间、规定的开发费用内开发出满足用户需求的高质量的软件系统高质量是指错误率低、好用、易用、可移植、易维护等..2软件工程的三个要素:方法、工具和过程..①方法:完成软件工程项目的技术手段;②工具:支持软件的开发、管理、文档生成;③过程:支持软件开发的各个环节的控制、管理..3软件工程的核心思想:把软件产品看作是一个工程产品来处理..知识点二软件的生命周期1、软件生命周期概念:将软件产品从提出、实现、使用维护到停止使用退役的过程称为软件生命周期..2、软件生命周期一般划分为定义、开发和维护3个阶段:1定义阶段:可行性研究、需求分析2个阶段;软件定义阶段:包括制定计划和需求分析..①制定计划:确定总目标;可行性研究;探讨解决方案;制定开发计划..②需求分析:对待开发软件提出的需求进行分析并给出详细的定义..方法:1结构化需求分析方法;2面向对象的分析方法..任务:导出目标系统的逻辑模型;解决“做什么”的问题..步骤:需求分析一般分为需求获取、需求分析、编写需求规格说明书和需求评审四个步骤进行..2开发阶段:概要设计、详细设计、编码实现和测试4个阶段;①软件设计:分为概要设计和详细设计两个部分..②软件实现:把软件设计转换成计算机可以接受的程序代码..③软件测试:在设计测试用例的基础上检验软件的各个组成部分..3维护阶段:使用、维护、退役阶段..软件运行维护阶段:软件投入运行;并在使用中不断地维护;进行必要的扩充和删改..软件生命周期中所花费最多的阶段是软件运维护阶段..4软件工程原则:抽象、信息隐蔽、模块化、局部化、确定性、一致性、完备性和可验证性..5软件工具就是帮助开发软件的软件..它们对提高软件生产率;促进软件生产的自动化都有重要的作用..6软件开发环境或称软件工程环境是全面支持软件开发全过程的软件工具的集合;这些软件工具按照一定的方法和模式组合起来;共同支持软件生命周期内的各个阶段和各项任务的完成..知识点三软件设计基本概念1、软件工程过程:问题定义——可行性研究——需求分析——软件设计——软件编码——软件测试——软件维护2、软件设计分为总体设计和详细设计1总体设计目的:要解决的问题是“怎样实现目标系统”任务:确定软件的总体结构;进行模块划分;确定每个模块的功能、接口及模块之间的调用关系;并对全局数据结构进行设计;同时产生概要设计说明书2详细设计目的:要解决的问题是“应该怎样具体实现目标系统”任务:在概要设计的基础上;设计每个模块实现的细节及对局部数据进行设计包括模块的数据结构和所需的算法;同时产生详细设计说明书3、软件编码目的:产生能在计算机上执行的程序任务:根据系统的要求和开发环境;选用合适的程序设计语言;把详细设计的结果翻译成用该程序设计语言编写的程序代码源程序4、软件测试是为了发现程序中的错误而执行程序的过程目的和任务:通过在计算机上执行程序来尽可能多地发现软件产品中的错误和缺陷;并改正程序中的错误;以保证程序的可靠运行5、软件维护阶段是长期的过程;因为;经过测试的软件还可能有错;用户的要求还会发生变化;软件运行的环境也可能变化等等..因此;交付使用的软件仍然需要继续排错、修改和扩充;这就是软件维护..软件维护的目的是满足用户对已开发产品的性能与运行环境不断提高的需要;进而达到延长软件的寿命软件维护就是在软件交付使用之后;为了改正错误或满足新的需要而修改软件的过程..软件维护的类型有如下几种:1改正性维护:诊断和改进错误的过程..2适应性维护:为与变化的环境适当配合而进行的修改软件的活动..3完善性维护:为了满足用户提出的增加新功能或修改已有功能的建议而进行维护..4预防性维护:为了改进未来的可维护性和可靠性..软件开发时期要完成设计和实现两大任务;其中设计任务用需求分析和软件设计两个阶段完成;实现任务用编码和测试两个阶段完成..开发任务完成的好与坏;关系到软件产品的质量;完成开发任务的关键是选择好的软件开发方法..目前;软件开发方法主要有结构化开发方法和面向对象开发方法知识点4软件设计的基本原理软件设计的基本原理包括:抽象、模块化、信息隐蔽和模块独立性..1、模块化:指解决问题时自顶向下的方法逐层把软件系统划分成若干个模块的过程2、抽象:认识复杂过程中使用的思维工具;即抽出事务的本质的共同的特性而暂不考虑它的细节和其他因素..3、信息隐蔽:旨在设计和确定模块式的时候;是的一个模块内包含的信息;对于不需要这些信息的其他模块来说不可访问4、模块独立性:指每个模块只完成系统要求的独立的功能;并且与其他模块联系最少且接口简单模块的耦合性和内聚性是衡量软件的模块独立性的两个定性指标..1内聚性:是对模块功能强度的度量;即对一个模块内部各个元素语句之间、程序段间彼此结合的紧密程度的度量..2耦合性:是模块间互相连接的紧密程度的度量..模块之间联系越紧密;其耦合性就越强;模块的独立性则越差..一个设计良好的软件系统应具有高内聚、低耦合的特征..在结构化程序设计中;模块划分的原则是:模块内具有高内聚度;模块间具有低耦合度..软件设计有两个步骤:1概要设计又称结构设计是将软件需求转化为软件体系结构、确定系统级接口、全局数据结构或数据库模式;2详细设计是确定每个模块的实现算法和局部数据结构;通过对结构表示进行细化;得到软件的详细数据结构和算法..知识点5 结构化分析方法结构化方法的软件开发过程2、结构化分析方法的常用工具:数据流图、数据字典、结构化语言、判定树、判定表3、SA的基本步骤如下:①自顶向下对系统进行功能分解;画出分层的数据流图②由后向前定义系统的数据和加工;编制数据字典和加工说明③写出需求规格说明书SRS4、数据流图是以图形的方式描绘数据在软件系统中流动和处理的过程;由于它只反映系统必须完成的逻辑功能;所以它是一种功能模型.. 数据流图由数据流、加工又称数据处理、数据存储又称文件、数据源点或终点四种基本成分组成..数据流图简称DFD图形元素:①数据流:是数据在系统内传播的路径..使用箭头代表数据的流向;数据名称标在箭头的边上②加工:输入数据经过加工变换产生输出..使用圆框代表加工③数据存储:指处理过程中存放各种数据..使用双杠或单杠表示数据文件或数据库..文件与加工之间用箭头线连接;单向表示只读或只写;双向表示可读可写④数据源点或终点:指软件系统外部环境中的实体包括人员、组织或其他软件系统;统称为外部实体..使用方框表示数据的源点和终点5、建立数据流图的步骤:第一步:由外向里:先画系统的输入输出;然后画系统的内部..第二步:自顶向下:顺序完成顶层、中间层、底层数据流图..第三步:逐层分解..6、DFD图的数据流可分为两种类型:变换流和事务流变换流:信息沿着输入通路进入系统;同时将信息的外部形式转换成内部形式;通过变换中心处理之后;再沿着输出通路转换成外部形式输出事务流:信息沿着输入通路到达一个事务中心;事务中心根据输入信息的类型在若干个动作序列中选择一个来执行;这种信息流称为事务流7、数据字典就是用来定义数据流图中的各个成分的具体含义和详细的描述..它和数据流图共同构成了系统的逻辑模型;是需求规格说明书的主要组成部分..是结构化分析方法的核心.. 数据字典是为分析人员查找数据流图中有关名字的详细定义而服务的..数据字典有四类条目:数据流、数据项、数据存储和基本加工..8、SD方法的中心任务就是把用DFD图表示的系统分析模型方便地转换为软件结构的设计模型..识点6软件测试的目的和准则1、软件测试是保证软件质量的重要手段;其主要过程涵盖了整个软件生命周期的过程;包括需求定义阶段的需求测试、编码阶段的单元测试、集成测试以及后期的确认测试、系统测试、验证软件是否合格、能否交付给用户使用..软件测试就是使用人工或自动手段来运行或测定某个系统的过程;其目的在于检验它是否满足规定的需求或是弄清预期结果与实际结果之间的差别..2、软件测试的原则:1所有测试都应追溯到需求2严格执行测试计划;排除测试的随意性3避免由软件开发人员测试自己的程序4充分注意测试中的群集性现象5除了很小的程序外;“彻底”的穷举测试是不可能的6妥善保存测试计划、测试用例、出错统计和最终的分析报告;为维护提供方便软件测试的每一次测试都需要准备好一些测试数据;与被测程序一起输入到计算机中执行;知识点7软件测试的方法和实施1、测试是对软件规格说明、设计和编码的最后的复审;所以软件测试贯穿在整个软件开发期的全过程..对于软件测试方法和技术;可以从不同的角度加以分类..①从是否需要执行被测软件的角度;软件测试分为静态分析和动态测试②按照功能划分;动态测试又分为白盒测试和黑盒测试2、静态测试一般是指人工评审软件文档或程序;借以发现其中的错误;由于被评审的文档或程序不必运行;所以称为静态的..静态测试包括代码检查、静态结构分析、代码质量度量等..3、动态测试是指通过运行软件来检查软件中的动态行为和运行结果的正确性;也就是常说的上机测试..动态测试一般包括两个基本要素:被测程序和测试数据4、测试能否发现错误取决于测试用例的设计..动态测试的设计测试用例的方法一般分为黑盒测试和白盒测试..①白盒测试也称结构测试;它与程序内部结构相关;要利用程序结构的实现细节设计测试用例;它涉及程序风格、控制方法、源程序、数据库设计和编码细节..②黑盒测试是测试者已经知道被测程序的功能;而对程序内部的逻辑结构和处理过程完全不用考虑;只是对它的每一个功能进行测试;将测试后的结果与期望的结果进行分析比较;检查程序的功能是否符合规格说明书的要求..黑盒测试是在程序接口进行的测试5、测试用例是由测试数据和期望结果组成..设计测试用例的目的就是用尽可能少的测试数据;达到尽可能大的程序覆盖面;发现尽可能多的软件错误和问题6、用白盒法设计测试用例常用以下几种技术:①语句覆盖②判定覆盖③条件覆盖④判定/条件覆盖⑤条件组合覆盖⑥路径覆盖7、用黑盒法设计测试用例常用以下几种技术:①等价类划分法②边界值分析法③错误推测法④因果图法8、软件测试的实施①单元测试:是对每一个编制好的模块进行测试;其目的在于发现和排除各模块内部可能存在的差错及详细设计中产生的错误..进行单元测试时;根据程序的内部结构设计测试用例;主要采用白盒测试法②集成测试..是在单元测试的基础上;将所有模块按照设计要求组装成为系统而进行的测试;它的任务是检查模块间的接口和通信、各子功能的组合能否达到预期要求的功能、全程数据结构是否有问题等..集成测试主要发现设计阶段产生的错误;通常采用黑盒测试法 ..集成测试时;将各个模块组装成系统的方法有:非增量组装方式是先分别对每个模块进行单元测试;再把所有模块按设计要求组装在一起进行测试;最终得到所要求的软件增量组装方式是把下一个要测试的模块同已经测试好的那些模块结合起来进行测试;测试完以后再把下一个应该测试的模块结合进来测试③确认测试..确认测试是在集成测试通过后;在用户的参与下进行确认测试..这时通常使用实际数据进行测试;以验证系统是否能满足用户的实际需要..它的任务就是以需求规格说明书作为依据来验证软件的性能、功能及其他特征是否与用户的要求一致;通常采用黑盒测试④系统测试..系统测试是在更大范围内进行的测试..系统测试是把通过确认测试后的软件与计算机硬件、外设、某些支持软件、数据和人员等结合在一起;在实际运行环境下;对计算机系统进行的一系列集成测试和确认测试知识点八程序的调试1、调试也称排错或纠错..2、程序调试的任务:诊断和改正程序中错误..软件测试贯穿整个生命周期;调试主要在开发阶段..3、程序调试的基本步骤:1错误定位; 2纠正错误; 3回归测试..4、对软件主要的调试方法可以采用:1强行排错法.. 2回溯法.. 3原因排除法..5、软件调试可分为静态调试和动态调试..1静态调试就是指对源程序进行分析;然后确定可能出错的地方并进行排错..2动态调试是指对程序的运行进行跟踪并观察其出错点;然后进行排错..。
软件工程知识点
第一章软件工程概述一、软件的定义和特性(P2—P3)定义:软件=程序+数据+文档程序:按照事先设计的功能和性能要求执行的指令或语句序列数据:程序能正常操纵信息的数据结构文档:描述程序操作和使用的文档特性:(1)软件是一种逻辑实体,具有抽象性,不是一般的物理实体;(2)软件的成产与硬件存在某些相同点,但有根本上的不同,软件开发是人的智力的高度发挥,而不是传统意义上的制造,它更依赖于开发人员的素质,智力,人员和组合,合作和管理;(3)软件维护与硬件维修有着本质的差别,软件维护没有硬件维护那样有可替换的标准零件;(4)软件在运行和使用期间没有硬件那样的机械磨损,老化问题,但存在退化问题;(5)基于构件的开发方法由于其自身的特点越来越受到人们的重视,这些技术可以减少开发时间、提高质量,并提高复用水平。
* 掌握P4图1-2(b)软件失效率曲线二、计算机软件的发展经历了几个阶段?各有何特征?(P1—P2)共经历了四个阶段特征:第一阶段——程序规模小且主要采用个体工作方式,开发的系统大多采用批处理技术第二阶段——引入人机交互的概念,实时系统出现,产生了第一代数据库管理系统,程序编制采用了合作的工作方式,出现了早期的软件危机第三阶段——分布式系统出现,嵌入式系统得到广泛应用,低成本硬件第四阶段——强大的桌面系统和计算机网络迅速发展时期,面向对象技术得到广泛应用,人工智能技术和专家系统开始应用于软件。
三、什么是软件危机?其产生的原因是什么?定义:软件危机是指由于落后的软件生产方式无法满足迅速增长的计算机软件应用需求,从而导致软件开发与维护过程中出现一系列严重问题的现象。
(P4)原因:(P5)(1)用户对软件需求的描述不准确、不全面,甚至有错误,以及在开发过程中,不断提出或者修改需求;(2)用户和开发人员对软件需求的理解存在差异,导致所开发的软件产品和用户需求不一致;(3)大型软件项目需要组织一定的人力共同完成,各类人员的信息交流不及时、不准确,有时还可能产生误解,软件开发人员对大型软件缺少开发经验,管理人员缺少相应的管理经验;(4)软件开发人员不能有、独立自主的处理大型软件的全部关系和各个分支,因此容易产生疏漏和错误;(5)开发技术落后,缺乏有效的方法学和工具方面的支持,过分依赖程序设计人员在软件开发过程中的技巧和创造性,加剧软件产品的个性化(6)软件产品的特殊性和人类智力的局限性,导致人们无法处理“复杂问题”,因为软件是逻辑产品,软件开发进展情况较难衡量、软件开发质量难以评价、管理和控制软件开发过程相当困难。
名词解释(软件工程)
三、名词解释1、软件:在计算机系统中,与硬件相互依存的逻辑部件,它由程序、数据及相关文档组成。
2、软件工程:是指导计算机软件开发和维护的工程学科。
采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来。
3、数据字典:是关于数据的信息的集合,也就是对数据流图中包含的所有元素的定义的集合。
4、模块化:是把程序划分成若干个模块,每个模块完成一个子功能,把这些模块集总起来组成一个整体,可能完成指定的功能满足问题的需求。
5、类:对具有相同数据和相同操作的一组相似对象的定义。
6、软件危机: 是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。
7、软件维护:在软件已经交付使用之后,为了改正错误或满足新的需要而修改软件的过程.8、继承:子类自动地共享基类中定义的数据和方法的机制.9、投资回收期: 就是使累计的经济效果等于最初投资的需要的时间。
10、结构化分析方法:就是面向数据流自顶向下逐步求精进行需求分析的方法。
11、软件的生命周期:一个软件从定义、开发、使用和维护,直到最终被废弃所经历的一系列时期。
12、投资回收期:就是使累计的经济效果等于最初投资的需要的时间。
13、结构化分析方法:就是面向数据流自顶向下逐步求精进行需求分析的方法。
14、模块:数据说明、可执行语句等程序对象的集合,它是单独命名的而且可通过名字来访问。
15、宽度:是软件结构内同一个层次上的模块总数的最大值。
16、事务流:数据沿输入通路到达一个处理,这个处理根据输入数据的类型在若干个动作序列中选出一个来执行。
这类数据流应该划分为一类特殊的数据流,称为事务流。
17、耦合:衡量不同模块彼此间互相依赖的紧密程度。
18、事件:是某个特定时刻所发生的事情,它是对引起对象从一种状态转换到另一种状态的现实世界中的事件的抽象。
19、函数重载:指在同一作用域内的若干个参数特征不同的函数可以使用相同的函数名字。
什么是软件工程软件工程的内容
什么是软件⼯程软件⼯程的内容 软件⼯程是⼀门研究⽤⼯程化⽅法构建和维护有效的、实⽤的和⾼质量的软件的学科。
那么你对软件⼯程了解多少呢?以下是由店铺整理关于什么是软件⼯程的内容,希望⼤家喜欢! 软件⼯程的定义 软件⼯程⼀直以来都缺乏⼀个统⼀的定义,很多学者、组织机构都分别给出了⾃⼰认可的定义: BarryBoehm:运⽤现代科学技术知识来设计并构造计算机程序及为开发、运⾏和维护这些程序所必需的相关⽂件资料。
IEEE:在软件⼯程术语汇编中的定义:软件⼯程是:1.将系统化的、严格约束的、可量化的⽅法应⽤于软件的开发、运⾏和维护,即将⼯程化应⽤于软件;2.在1中所述⽅法的研究 FritzBauer:在NATO会议上给出的定义:建⽴并使⽤完善的⼯程化原则,以较经济的⼿段获得能在实际机器上有效运⾏的可靠软件的⼀系列⽅法。
《计算机科学技术百科全书》:软件⼯程是应⽤计算机科学、数学、逻辑学及管理科学等原理,开发软件的⼯程。
软件⼯程借鉴传统⼯程的原则、⽅法,以提⾼质量、降低成本和改进算法。
其中,计算机科学、数学⽤于构建模型与算法,⼯程科学⽤于制定规范、设计范型(paradigm)、评估成本及确定权衡,管理科学⽤于计划、资源、质量、成本等管理。
⽐较认可的⼀种定义认为:软件⼯程是研究和应⽤如何以系统性的、规范化的、可定量的过程化⽅法去开发和维护软件,以及如何把经过时间考验⽽证明正确的管理技术和当前能够得到的最好的技术⽅法结合起来。
ISO 9000对软件⼯程过程的定义是:软件⼯程过程是输⼊转化为输出的⼀组彼此相关的资源和活动。
其它定义:1.运⾏时,能够提供所要求功能和性能的指令或计算机程序集合。
2.程序能够满意地处理信息的数据结构。
3.描述程序功能需求以及程序如何操作和使⽤所要求的⽂档。
以开发语⾔作为描述语⾔,可以认为:软件=程序+数据+⽂档。
软件⼯程的内涵 ⼀、软件⼯程过程是指为获得软件产品,在软件⼯具的⽀持下由软件⼯程师完成的⼀系列软件⼯程活动,包括以下四个⽅⾯: 1、P(Plan)——软件规格说明。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、给出n种常用的“软件工程”、“软件质量”的定义并进行适当的解释。
阅读相关的文章,
对文章进行总结,概括其主要结论并简述你自己的观点。
每项至少1页A4纸。
软件工程:
几种软件工程的定义:
Fritz Bauer在NATO会议上给出的定义:软件工程是建立和使用一套合理的工程原则,从而经济地获得可靠的,可以在实际机器上高效运行的软件。
IEEE在软件工程术语汇编中的定义:软件工程是(1)将系统化的、规范化、可量化的方法应用于软件的开发、运行和维护,即将工程化方法应用于软件。
(2)在(1)中所述方法的研究。
《计算机科学技术百科全书》中的定义:软件工程是应用计算机科学、数学及管理科学等原理,开发软件的工程。
软件工程借鉴传统工程的原则、方法,以提高质量、降低成本。
其中,计算机科学、数学用于构建模型与算法,工程科学用于制定规范、设计范型(paradigm)、评估成本及确定权衡,管理科学用于计划、资源、质量、成本等管理。
百度百科:软件工程(Software Engineering,简称为SE)是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科。
它涉及到程序设计语言,数据库,软件开发工具,系统平台,标准,设计模式等方面。
在现代社会中,软件应用于多个方面。
典型的软件比如有电子邮件,嵌入式系统,人机界面,办公套件,操作系统,编译器,数据库,游戏等。
同时,各个行业几乎都有计算机软件的应用,比如工业,农业,银行,航空,政府部门等。
这些应用促进了经济和社会的发展,使得人们的工作更加高效,同时提高了生活质量。
上面是软件的几个定义,其实概括起来就是软件加工程。
就是把工程学的思想应用于软件,但是软件工程又不同于其他的工程,它有它特别的地方。
采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,这就是软件工程。
随着信息化的不断扩大,软件的范围已经越来越广了,越来越大了。
所以有一个良好的软件开发方法,能有效的提高软件的开发效率。
软件工程就是研究这一方面的。
如同土木工程,建筑工程一样,软件也需要系统化,规范化,可量化的进行开发。
但是软件开发又与建筑工程有不一样的地方。
如果使用双倍的人力建筑工程可能可以将工程期提早一半完成,例如两个人砌一个人的砖是不是快了一倍。
但如果说使用双倍的人数就能将软件工程的开发周期提高一倍的话,那是不可能的。
软件的开发过程中,需要团队人员不断的沟通。
我觉得软件开发过程中需要的合作沟通远远比建筑工程需要的多。
所以说团队的人越多,花在沟通上的时间也会越多,人均的效率反而可能会降低。
软件质量:
字典中队质量的定义是:“某一事物的特征或属性”。
作为一个事物的属性,质量指的是可测量的特征-与已知标准可以进行比较,如长度、颜色、电气特性、课延展性等等。
但是软件在很大程度上是一种知识实体,其特征的定义远比物理对象要困难得多。
然而却是存在程序特征的测量。
这些属性包括循环复杂度,内聚性,功能点数量、代码行数、以及其他很多属性。
当根据对象的可测量特征考察一个对象时,可以有两种不同的质量,设计质量和一致性质量。
软件质量是一模糊的、捉摸不定的概念。
我们常常听说:某某软件好用;某某某软件功能全、结构合理、层次分明、语言流畅。
这些模模糊糊的语言实在不能算作是软件质量评价,特别不能算作是软件质量科学的定量的评价。
但是,软件质量,乃至于任何产品质量,都是一个很复杂的事物性质和行为。
对于什么是产品质量,可以从以下几个观点来看:
* 透明性观点:质量是产品一种可以认识但不可定义的性质;
* 使用者观点:质量是产品满足使用目的之程度;
* 制造者观点:质量是产品性能和规格要求的符合度;
* 产品观点:质量是联结产品固有性能的纽带;
* 基于价值观点:质量依赖于顾客愿意付给产品报酬的数量。
按照ISO/IEC9126-1991(GB/T16260-1996)"信息技术软件产品评价质量特性及其使用指南"国际标准,对软件质量也有定义,软件质量(software quality)是与软件产品满足明确或隐含需求的能力有关的特征和特性的总和。
简言之,软件质量是软件一些特性的组合,它仅依赖软件本身。
对于软件质量有三种不同的视面。
用户主要感兴趣的是如何使用软件、软件性能和使用软件的效果。
所以他们关心的是:(1)是否具有所需要的功能;(2)可靠程度如何;(3)效率如何;(4)使用是否方便;(5)环境开放的程度如何。
我们进一步解释软件质量特性,一个软件质量特性可破细化成多个子特性。
功能性是与一组功能及其指定的性质有关的一组属性,可靠性是与在规定的一段时间和条件下,软件维持其性能水平的能力有关的一组属性,易用性是与一组规定或潜在用户为使用软件所需作的努力和对这样的使用所作的评价有关的一组属性。
我认为软件的质量包括两方面。
对用户来说,软件可靠性强,软件易用,软件稳定性强。
则用户觉得质量好;对于开发人员来说:除了用户所关心的,他们还可能会关心,程序的代码结构,整体框架,软件的可维护性,程序的可读性等等也标志着它的质量。
当然,我们还能从其它角度,比如软件的生产者-人的素质,来诠释软件质量,但不管怎样,软件的产品质量是最终的检验标准,而最终的检验者就是客户。
从这个意义上说,软件质量就是客户满意度。
二、名词解释:“软件危机”,“软件的特点”,“软件的产生和发展”
1、软件危机:软件发展第二阶段的末期,由于计算机硬件技术的进步。
一些复杂的、大型
的软件开发项目提出来了,但,软件开发技术的进步一直未能满足发展的要求。
在软件开发中遇到的问题找不到解决的办法,使问题积累起来,形成了尖锐的矛盾,因而导致了软件危机。
2、软件的特点:
A) 软件是一种逻辑实体,是人类智力成果的表现形式。
B ) 软件的开发和制造是一个统一的过程。
C)软件开发时一项经济活动,在一定的成本和时间限制下,满足用户的需求是软件的开发的目标。
D ) 软件不会磨损,但可能存在错误,需要进行维护。
E ) 软件的复杂度随着亏魔的增大迅速增加。
3、软件的产生和发展
软件的产生始于早期的机械式计算机的开发。
从19世纪起,随着机械式计算机的更新,出现了穿孔卡片,这种卡片可以指导计算机进行工作。
但是直到20世纪中期现代化的电子计算机出现之后,软件才真正得以飞速发展。
软件工程发展史上各个阶段的里程碑是:(1)70年代:程序设计方法学、结构化分析和设计、抽象数据类型、软件工具;(2)80年代:软件开发方法学、软件工程环境(CASE)、面向对象技术;(3)90年代:软件复用和软件构件技术、软件过程、需求工程。
如何达成软件工程的目标--提高开发质量和生产率?过去的认识:技术的发展是达到上述目标的主要(唯一)途径。
如:80年代后期,CASE工具、环境被认为是最好的解决方案--通过自动化工具的支持可以很容易地提高质量和效率;90年代,GUI生成技术和OO技术也被寄予厚望。
其原因在于,技术可以给出立即可见的解决方案,并很快得到收益。
但结果却经常不尽人意。