软件工程讲义
- 格式:doc
- 大小:634.50 KB
- 文档页数:22
软件工程讲义041. 引言本讲义主要介绍软件工程领域的重要概念和技术,包括软件生命周期、软件过程模型、需求工程和软件设计等内容。
通过本讲义的学习,学生将能够理解和应用软件工程的基本原理和方法,提高软件开发的效率和质量。
2. 软件生命周期软件生命周期是指软件从创建、开发、测试到维护和退役的整个过程。
它包括需求分析、设计、编码、测试和维护等阶段。
软件生命周期的目标是确保软件开发过程中的可控性和可追溯性,以保证软件的质量和进度。
2.1 需求分析在需求分析阶段,软件工程师与用户合作,收集并理解用户的需求。
这个阶段的主要任务包括需求的获取、需求的分析和需求的规约。
需求分析是软件开发的关键步骤,它决定了后续软件设计和开发的方向。
2.2 软件设计软件设计是根据需求分析结果,将软件划分为模块,确定模块之间的关系和接口,以及设计模块的具体实现。
软件设计的目标是保证软件的灵活性、可维护性和可扩展性。
2.3 编码和测试在编码阶段,开发人员根据软件设计的结果实现软件的具体功能。
编码过程应符合规范和标准,以保证代码的可读性和可维护性。
测试阶段是为了验证软件的功能和质量。
测试包括单元测试、集成测试和系统测试等不同层次的测试,以确保软件满足用户需求,并且具有良好的性能和可靠性。
2.4 维护和退役软件维护是指在软件投入使用后,对软件进行错误修复、功能增强和性能优化等活动。
软件维护的任务往往占据了软件开发过程的很大一部分,因此合理的维护策略和方法对于软件的长期稳定运行至关重要。
软件退役是指当软件不再使用或者需要被替换时,执行的相关操作,包括数据迁移、代码重构、资源清理等工作。
3. 软件过程模型软件过程模型是指将软件开发过程划分为不同的阶段和活动,并进行组织和管理的模型。
常见的软件过程模型包括瀑布模型、迭代模型和敏捷模型等。
3.1 瀑布模型瀑布模型是软件开发最早应用的模型,将软件开发划分为需求分析、系统设计、编码、测试和维护等严格按顺序执行的阶段。
软件工程讲义(师大讲课提纲__Y ang XS)1.软件工程基础(1)为什么要有软件工程(2)软件工程概念(3)软件生命周期(4)软件计划、需求分析(5)软件设计(概要设计、详细设计)(6)程序编码(7)软件测试(8)软件维护(9)软件开发管理技术2.面向对象的软件工程新技术——UML(1)UML简介(2)用例图与需求分析(3)组织结构图(概要设计)(4)类图与顺序图(详细设计)(5)关系型数据库表的设计3.VC++2005/2008程序调试(1)从C、C++到VC++语句精简、递归、结构钵、指针;类、对象;可视化、基础类库(2)C++两个标准:IS0/ANSI标准C++、C++/CLI(Microsoft专为而.net开发) (3)VC++中的类(4)VC++文档类型(5)VC++项目/工程的创建与打开(6)Win32控制台程序的创建与调试(7)MFC程序的创建与调试(8)使用VS2005/2008编辑图像和程序1.软件工程基础程序是为完成一定功能和性能而设计的计算机可执行的指令序列;数据是程序能操作的数字信息;文档是程序开发、维护和使用有关的图文资料。
软件是计算机系统中程序、数据和相关文档的完整集合。
软件分为系统软件、支撑软件和应用软件。
计算机程序的功能越来越强,综合性越来越强,就成了软件。
程序设计阶段、程序系统阶段、软件工程阶段。
(1)为什么要有软件工程开发一个中、大型软件不是一人能做到,需要很多人参与。
如何组织好多人软件开发,需要有一套科学的管理流程,有一套软件开发各阶段工程技术人员都能看懂并且遵守的描述与约束规则。
为使软件达到预期目的,需要软件工程。
为使软件维护性好、可升级,需要软件工程。
(2)软件工程的概念Boehm:运用现代科学技术知识来设计并构造计算机程序及为开发、运行和维护这些程序所必需的相关文件资料。
IEEE:软件工程是开发、运行、维护和修复软件的系统方法。
Fritz Bauer:建立并使用完善的工程化原则,以较经济的手段获得能在实际机器上有效运行的可靠软件的一系列方法。
软件工程讲义在当今信息时代,软件产业已经成为了世界经济发展的重要组成部分。
软件工程作为软件产业的基石,扮演着不可忽视的角色。
本文将以软件工程讲义的形式,系统介绍软件工程的基本概念、原理和方法,助力读者全面理解和掌握软件工程的知识体系。
第一章:软件工程概述1.1 软件工程的定义和意义1.2 软件生命周期1.3 软件工程的基本原则第二章:软件开发过程2.1 瀑布模型2.2 快速原型模型2.3 敏捷开发模型2.4 喷泉模型第三章:需求工程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 物联网与软件工程结语软件工程是软件产业持续发展的保障,掌握软件工程的基本原理和方法对于从事软件开发和软件项目管理的人员来说至关重要。
通过本讲义的学习,读者将了解软件工程的核心概念、开发过程和各个阶段的具体内容。
同时,本讲义也对软件工程的新兴技术进行了简要介绍,帮助读者掌握行业的最新动态。
期望读者能够通过学习软件工程,提升软件开发和管理的能力,为软件产业的发展做出更大的贡献。
总结起来,软件工程讲义涵盖了软件工程的概述、软件开发过程、需求工程、设计工程、编码与测试、软件项目管理以及软件工程的新兴技术等内容。
通过细致而系统的学习,读者将逐步掌握软件工程的知识体系,为未来在软件产业中的发展打下坚实的基础。
课程概述一、软件工程学科介绍二、学习目标三、部分参考资料四、课程特点和学习的注意事项五、教材简介六、课程考核方式一、软件工程学科介绍软件程学科发展历史三个阶段:概念提出、学科雏形、学科确立第一阶段:概念提出1968 年NATO 会议(北大西洋公约组织的计算机科学家的国际会议)提出“软件工程”概念。
当时对“软件工程”代表性定义:为了经济地获得在真实机器上可靠工作的软件而制定和使用的合理工程原则和方法。
1972 年IEEE 学会的计算机分会IEEE 一CS 第一次出版了“软件工程学报”第二阶段:学科雏形上世纪70 年代末,美国将软件工程教程列入研究生教育计划。
1980 年代末和1990 年代初,软件工程教育得到卡内基一梅隆大学软件工程研究所(CMU / SEI )的支持。
1991 年,“软件工程”被ACM (美国计算机协会)和IEEE / CS 列为计算学科的九个知识领域之一。
1993 年,IEEE 一CS 和ACM 为了把软件工程建设成为一个专业,建立了IEEE 一CS / ACM 联合指导委员会。
第三阶段:学科确立2004 年8 月,IEEE 一CS 和ACM 给出:软件工程知识体(SWEBOK , Software Engineering Body of Knowledge )软件工程教育知识体(SEEK ) 最终版,标志着软件工程学科在世界范围正式确立。
软件工程、计算机科学、计算机工程、信息系统、信息技术并列成为计算学科下的独立学科。
软件工程知识体(SWEBOK ) :全面描述了软件工程实践所需的知识。
SWEBOK (软件工程知识体》10 个领域●软件需求●软件设计●软件构造●软件测试●软件维护●软件配置管理●软件工程管理●软件工程过程●软件工程工具和方法●软件质量SWEBOK详细结构(1)软件工程与其他学科的关系1 、软件工程是计算学科9 个领域之一.➢算法和数据结构➢计算机系统结构➢人工智能和机器人学➢数据库和信息检索➢人一机交互➢操作系统➢程序设计语言➢软件方法学和软件工程➢数字和符号计算计算学科中12个重复出现的基本概念●绑定.●概念和形式模型●效率●抽象层次●按时间排序●安全性●大问题的复杂性●一致性和完备性●演化●按空间排序●重用●折衷与决策2 、8 个相关学科知识域●计算机工程●计算机科学●数学●管理学●项目管理●质量管理●系统工程学●软件人类工程学其中:计算机科学、数学是基础工程学科、管理学科也非常重要软件程是一门什么样的学科?它是指导计算机软件开发与维护的一门工程学科。
工程:将科学及数学原理运用于实际用途的应用手段,如:设计、制造、机器操纵、构架等。
典型的传统工程:建筑工程、机械工程、电力工程等。
概括的说,软件工程即用工程、科学和数学的原则和方法研制、维护计算机软件的有关技术及方法,其优点是以较小的代价开发高质量的软件并有效地维护它。
二、学习目标(1)掌握软件工程的基础知识和理论,对软件工程学有一个全貌的了解;熟悉软件项目开发和维护的一般过程;熟练掌握软件需求分析、设计、编码和测试等阶段的主要思想和技术方法;二、学习目标(2)通过学习,特别是通过课程设计,真正运用和深刻体会软件工程的思想方法,转变对软件开发的认识:从个人的单纯编程活动转移到进行系统分析与设计方面上来转变思维定式:程序员―系统工程师(系统分析员)三、部分参考资料《软件工程理论与实践》许家冶等编著,高等教育出版社,2005 年《软件工程》(第二版),齐治昌等,高等教育出版社,2004 年《面向对象的系统分析》,杨芙清等编著,清华大学出版社,2001 年《UML 用户指南》G Booch 等著,邵维忠等译,机械工业出版社2002 年四、课程特点和学习的注肯事项1 、知易行难要将理论知识与实践运用结合,进行对照,以加深理解和掌握。
2 、内容纷杂软件工程涉及计算机科学、数学、工程科学和管理科学等多个领域。
其中:➢计算机科学和数学用于构造模型与算法;➢工程科学用于制定规范、设计范型、评估成本及确定权衡➢管理科学用于计划、资源、质量和成本的管理。
五、教材总目录第1 章软件工程学概述第2 章可行性研究第3 章需求分析第4 章形式化说明技术第5 章总体设计第6 章详细设计第7 章实现第8 章维护第9 章面向对象方法学引论第10 章面向对象分析第11 章面向对象设计第12 章面向对象实现第13 章软件项目管理附录AC + +类库管理系统分析与设计附录B 汉字行编辑程序设计课程内容学时安排章节课程内容学时l 软件工程学概述 42 可行性研究 43 需求分析 45 总体设计 66 详细设计 47 实现8章节课程内容学时8 软件维护 29 面向对象方法学引论 410 面向对象分析 211 面向对象设计 212 面向对象实现 213 软件项目管理 614 总结 2六、课程考核方式分数组成:平时成绩(10 % ) :以理论课课堂表现为主。
作业(30 % ) :书面作业期末考试(60 % ) :第 1 章软件工程学概述学习重点➢1、软件危机、软件工程产生的原因➢2、软件工程过程和软件生命周期➢3、软件生命周期模型掌握几个基本概念➢软件危机➢软件工程➢软件过程➢软件生命周期➢软件生命周期模型软件危机与软件工程学软件工程学的产生要从“软件危机”说起➢1968 年,第一届NAT0 (北大西洋公约组织的计算机科学家的国际会议)会议,“软件工程”的慨念作为一种有效解决“软件危机”的途径被正式提出。
●什么是软件危机?●软件危机有什么典型表现?●为什么会产生软件危机?●怎么解决软件危机?§1 软件危机§ 1 . 1 . 1 软件危机介绍什么是软件危机?软件危机指在计算机软件的开发和维护过程中,所遇到的一系列严重问题。
软件危机主要包括的问题(两方面):①如何开发软件②如何维护软件软件危机有什么典型表现?(1)开发费用和进度难以估算和控制,大大超过预期的资金和规定日期;软件需求分析不够充分,用户不满意“已经完成”的软件系统。
软件质量难于保证;软件维护困难;➢难以改正程序中的错误;➢难以根据用户的需要在原有程序中增加一些新的功能。
软件危机有什么典型表现?通常没有保留适当的文档资料。
文档的作用:➢软件开发管理人员:用于管理和评价软件开发工程的进展状况➢软件开发人员:用于开发人员对各个阶段的工作都进行周密思考、全盘权衡、从而减少返工。
并且可在开发早期发现错误和不一致性,便于及时加以纠正➢软件维护人员:软件维护的依据开发成本逐年上升,软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。
几个软件危机的著名案例①1966年,IBM 360 机的操作系统。
花费5000 人一年的工作量,写了近 1 万行代码。
错误百出,每次的新版本就是从前一版本中找 1 000个程序错误而修正的结果。
②1963 年,美国用于控制火星探测器的计算机软件中的一个“ , ”号被误写为“.”,而致使飞往火星的探测器发生爆炸,造成高达数亿美元的损失。
③美国丹佛新国际机场自动化行李系统软件。
投资 1. 93 亿美元,计划1993 年万圣节启用。
但开发人员一直为系统错误困扰,屡次推后启用时间,直到1994 年6 月,机场计划者承认无法预测何时能启用。
④1996 年,欧洲阿里亚纳5 型运载火箭坠毁,造成5 亿美元损失。
原因是控制软件中的一个错误。
§1 . 1 . 2 产生软件危机的原因主要两个原因:1 、与软件本身的特点有关2 、与软件开发与维护的方法不正确有关。
一、软件本身的特点(1)软件与硬件、一般程序存在很多不同之处。
1 、软件与硬件不同抽象性。
软件生产没有明显的制造过程,难以衡量开发进展,也难以控制软件质量。
问题的隐蔽性。
没有硬件的磨损、老化问题,但存在开发早期在分析、设计阶段的错误,修改难度较大。
失效率蜘线改正一个问题需付出的代价2 、软件与一般程序不同(1)①软件远比一般程序规模庞大,复杂性高➢软件所反映的实际问题的复杂性➢程序逻辑结构的复杂性。
➢例1 : Windows95 , 1000 万行代码;➢Windows2000 ,5000 万行代码➢例2 : Exchange 2000 和windows 2000 开发人员软件的规模软件产品的特殊性和人类智力的局限性,导致人们无力处理“复杂问题”。
2 、软件与一般程序不同(2 )②大型软件开发既有技术问题,还有社会问题。
➢社会因素:组织机构、体制、管理方式、观念、人的心理素等。
开发团队成员分工合作技术与管理的矛盾软件开发人员对软件应用的领域知识的了解二、软件开发维护方法中存在的问题(1)①对用户需求的获取不正确➢用户的原因➢分析人员的原因对分析人员的要求:沟通能力、归纳总结能力、经验越是早期产生的错误,付出的代价越大。
➢图:不同时期引入同一变动的代价➢二、软件开发维护方法中存在的问题( 2 )②软件开发就是编写程序。
➢一个完整的软件产品由一整套完整的配置组成,程序只是其中的一个组成部分。
➢软件开发过程包括多个阶段,每个阶段的产品都是最终的完整的软件产品的一部分。
③软件开发只要依靠个别编程高手就能完成。
④轻视软件维护➢软件维护约占软件费用55 一75 % ,包括修改软件运行的错误;对软件进行改进和功能扩充。
软件维护在软件费用的比例三、其他产生软件危机的原因①软件开发尚未完全摆脱手工艺的开发方式。
②软件成本相当昂贵,主要依靠大量复杂的、高强度的脑力劳动③软件的开发和运行常常受到计算机系统的限制,对计算机系统有着不同程度的依赖性。
➢软件的“可移植性”就是指的软件对硬件的依赖程度。
好的可移植性依赖少。
§1 . 1 . 3 消除软件危机的途径1 、彻底消除“软件就是程序”的错误观念。
2 、充分认识到软件开发是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目,不是个人独立的劳动。
3 、推广和使用在实践中总结出来的软件开发的成功技术和方法。
4 、开发和使用更好的软件工具总结:“软件工程”的方法理论是摆脱软件危机的一个主要出路。
➢计算机和软件科学家为解决软件危机问题,尝试将在其它领域中行之有效的工程学知识运用到软件开发工作中来,经过不断实践和总结,最后得出一个结论;按工程化的原则和方法组织软件开发工作是有效的,是摆脱软件危机的一个主要出路。
思考题( 1 )1 )只要是编程高手,即使是不懂软件工程,也能编出很好的软件。
➢软件是服务于大众,却是由个性化的开发人员完成的。
如果个性化太强,程序就无法阅读,其他人员也就无法维护。
➢例:国内80 年代涌现出来的众多汉字操作系统均是由编程高手完成的。
思考题( 2 )2 )只要拥有一套讲述如何开发软件的书籍,并了解了书中的标准与示例,就可以解决软件开发中遇到的任何问题。