您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 工程监理 > 第1章-软件工程基本概念与原理
软件工程初级教程主讲:赵晓洪邮件:zhaoxh126@sohu.com1/86一、课程的性质、任务“软件工程”是专业核心基础课程,它是研究软件开发和软件管理的一门工程科学。它的主要任务是掌握支持软件开发和管理的理论、方法、技术、标准以及计算机辅助软件工程的工具(Visio或Rose)环境等知识;使学生具有软件开发能力(包括熟练进行程序设计语言的结构化编码与可视化设计能力;UML的阅读和建模能力;培养用软件工程化及项目化的思想处理解决问题的能力等)。2/86概括说:软件开发能力最关键的步骤有三步:3/86二、通过学习应能达到如下目标:1.接受一种思想。掌握软件工程的基本原理、概念与方法----主要包括软件系统的可行性研究、需求分析、概要设计、详细设计、编码、测试、维护、面向对象、项目管理等方面的基本知识与方法。2.掌握软件工程中的一些基本技术方法,如数据流图、数据字典、结构分析方法,面向对象分析方法、集成测试方法、项目管理的基本方法等。3.结合模拟案例,要求学生从实际中掌握从面向过程到面向对象思想理论的基本方法和技巧。掌握软件开发文档的组织编写等。4.掌握一种工具。学期末能用Visio或Rose软件完成大作业的设计(画各种软件工程图)(指定或自找题目)5.把目前或以后要学的程序设计知识(C、Java、VC++、C#、ASP.NET)提高到一定理论高度认识。小提示:学会思想比掌握一种工具更为重要。4/86“现在大家都已认识到,如果有哪个项目不遵循软件工程原则必定会受到实践的惩罚。”“软件工程课是我们参加工作以后最能直接应用的一门专业课。”——一位刚毕业参加工作的计算机专业学生三、体会:5/86目录第1章软件工程的基本概念与原理第2章软件开发过程第3章软件项目管理第4章可行性分析与初步计划第5章需求分析第6章总体设计第7章详细设计第8章软件实现第9章软件维护第10章从结构化到面向对象第11章面向对象的需求获取第12章面向对象的分析与设计第13章面向对象的测试6/86第1章软件工程的基本概念与原理7/86先接受2个正确观点1、“开发软件不等于编写程序”—开发软件应该完成的工作远远多于编写程序应该完成的工作。设计算法(即完成指定功能的步骤),然后用程序设计语言(例如:C语言)表达该算法。而开发软件并非就是编写程序,事实上编写程序仅仅是开发软件所应完成的工作的一部分,而且只占一小部分。为了开发出一个符合用户需要、质量合格的软件,软件工程师必须首先弄清楚用户面临的问题是什么,也就是要明确软件的“主攻”方向;接下来应该进行可行性研究方案,分析用户面临的问题是否有行得通的解决方案。为避免浪费资源,仅在该软件的开发是可行的前提下,才进行实质性的开发工作;8/86先接受2个正确观点然后应该进行需求分析工作,通过与用户的反复交流,搞清楚用户对该软件的具体需求,这些需求是进行软件设计的依据;在编写程序之前需要先进行设计。通常,大型软件的设计工作又分成两个阶段进行,先进行总体设计(又称为概要设计),再进行详细设计;编写程序实质上是把设计结果翻译成用某种程序设计语言书写的程序;程序编写出来之后,还需要经过严格的测试过程(需要的工作量通常占软件开发全部工作量的40%~50%),软件确实符合用户需求而且质量合格,才能交付给用户使用。9/86先接受2个正确观点2、“错误做法会导致软件危机”。开发软件不等于编写程序。但是,迄今为止,仍然有不少人错误地认为开发软件就是编写程序,或者认为开发软件主要就是编写程序。人们之所以有错误的认识并在开发软件时采用了错误的做法,主要可归因于在计算机系统发展的早期阶段“开发软件”的个体化特点。所谓软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。这些问题绝不仅仅是不能正常运行的软件才具有的,实际上,几乎所有软件都不同程度地存在这些问题。10/861.1软件工程学科的诞生1.1.1软件的特点1.1.2软件生产的发展1.1.3软件危机1.1.4软件工程的诞生11/861.1.1软件的特点软件的概念:20世纪60年代提出的,(软件=程序+文档)程序——是指令的集合;文档——有关程序功能、设计、编程使用的文字或图形资料。软件产品的特殊性:软件与硬件构成完整的计算机系统;软件产品与硬件产品的主要区别包括:逻辑产品、无形、脑力劳动的结果,以程序和文档的形式体现,保存在特殊介质上,被计算机执行才能体现出它的功能和作用软件生产成本集中在研制阶段;软件不会被用坏、不存在磨损和消耗,但会过时;是脑力创造的结果,还未完全摆脱手工开发方式,大部分是”定做”;软件生产与维护费用不断增加;12/861.1.1软件的特点软件是计算机系统中与硬件相互依存的另一部分,它是包括程序,数据及其相关文档的完整集合。程序是按事先设计的功能和性能要求执行的指令序列。计算机程序包括源程序和目标程序。数据是使程序能正常操纵信息的数据结构(即数据的组织形式)。文档是与程序开发,维护和使用有关的图文材料。13/861.1.1软件的特点面向过程的程序=算法+数据结构面向对象的程序=对象+消息面向构件的程序=构件+构架软件=程序+数据+文档14/86软件的维护曲线故障率使用初期“磨损”后期时间图1-1硬件故障浴盆曲线修改点图1-3实际的软件故障曲线图故障率时间由于副作用造成故障率的提高15/861.1软件工程的产生1.1.1软件的特点1.1.2软件生产的发展1.1.3软件危机1.1.4软件工程16/861.1.2软件生产的发展软件生产经历了三个阶段:程序设计时代(46年-56年)软件开发时代(56年-68年)软件工程时代(68年以后)17/86程序设计时代(46年-56年)个体手工方式;低级语言、编程效率低、难,编程是聪明人的事;追求编程技巧和程序运行效率;代码不规范,不易读,不易维护;只重视编码,不重视设计和文档;硬件资源紧缺;18/86程序系统时代(56年-68年)作坊式小团队开发;出现高级语言,编程效率有所提高;追求写代码技巧,但提出了结构化程序设计方法;软件复杂性增加,需求增加,但软件开发方法和软件项目管理技术跟不上,开发速度慢,与计算机硬件发展速度拉大距离;软件数量猛增,但质量差,可维护性差,维护成本急剧增加;上述矛盾越来越显著,最终导致了软件危机;19/86软件工程时代(68年以后)软件工程学科诞生,引入了“工程化”思想;结构化和面向对象的方法成熟;使用数据库、开发工具、开发环境、网络、分布式技术开发软件;软件开发技术有了很大进步,但没有突破性,软件价格不断上升,没有完全摆脱软件危机;20/86计算机软件发展的三个时期及特点程序设计程序系统软件工程现代软件工程软件的范畴程序程序及说明书产品软件(项目软件)项目工程主要程序设计语言汇编及机器语言高级语言高级语言系统、程序设计语言面向对象可视化设计语言软件工作范围程序编写包括设计和测试软件生存期整个软件生存期需求者程序设计者本人少数用户市场用户面向所有用户21/86计算机软件发展的三个时期及特点22/861.1软件工程的产生1.1.1软件的特点1.1.2软件生产的发展1.1.3软件危机1.1.4软件工程诞生23/861.1.3软件危机软件危机的产生软件危机的表现软件危机的原因24/861.软件危机的产生软件生产的第二个阶段,硬件生产成本下降、效率提高、性能提高,激发了软件需求;软件复杂性要求提高、生产效率低,与硬件生产进一步拉开距离;软件质量差,难维护,成本急剧增加;软件项目成功率低;上述矛盾的进一步激化,暴发了软件危机25/861.1.3软件危机软件危机的产生软件危机的表现爆发软件危机的原因26/862.软件危机的表现(1)经费超预算,项目一再拖延;(2)开发的软件不能满足用户要求;(3)软件可维护性差;(4)软件可靠性差;27/863.软件危机产生的原因(1)软件规划越来越大;(2)软件开发管理困难且复杂;(3)软件开发费用不断增加;(4)软件开发技术落后;(5)软件生产方式落后;(6)软件开发工具落后;28/861.1软件工程的产生1.1.1软件的特点1.1.2软件生产的发展1.1.3软件危机1.1.4软件工程的诞生29/861.1.4软件工程诞生软件危机促使软件工程学科诞生;借鉴硬件生产的“工程化”思想,1968年,北大西洋公约组织提出了“软件工程”的概念,主张“用工程化思想来开发软件”。30/86第1章软件工程的基本概念与原理1.1软件工程的产生1.2软件工程的基本概念与原理1.软件工程的定义、性质2.软件工程关注的主要问题3.软件工程的目标4.软件的生命周期5.软件工程的基本原理31/86软件工程定义、性质软件工程是用科学知识、技术、原理来定义、开发、维护软件的一门学科。概括地说,软件工程是指导软件开发和维护的一门工程学科。软件工程学科的根本要求:采用工程化的思想、原理、技术和方法来开发与维护软件,把好的管理技术和开发技术方法结合起来,追求可靠性、可维护性、满足用户需求、高的开发效率。用工程学科中的观点进行费用估算、进度控制、制定计划和方案;用管理科学中的方法和原理进行软件生产过程的管理;用数学的方法建立软件开发中的各种模型和算法。32/86软件工程关注的关键问题(1)关注于大型程序的构造(2)中心课题是控制复杂性(3)软件需求经常变化(4)开发软件的效率非常重要(5)有效的沟通是合作开发软件的关键33/86(1)软件工程关注于大型程序的构造“大”与“小”的分界线并不十分清晰。通常把一个人在较短时间内写出的程序称为小型程序,而把多人合作用时半年以上才写出的程序称为大型程序。传统的程序设计技术和工具是支持小型程序设计的,不能简单地把这些技术和工具用于开发大型程序。34/86(2)软件工程中心课题是控制复杂性通常,软件所解决的问题十分复杂,以致于不能把问题放在一起试图一步解决。人们不得不把问题分解,使得分解出的每个部分是直观、明了、可理解的,而且各部分之间保持简单的联系。用这种方法并不能降低问题的整体复杂性,但是却可使它变成容易解决。注意,许多软件的复杂性主要不是由问题的内在复杂性造成的,而是由必须处理的大量细节,让人看上去觉得很复杂。结论:分解的手法,是控制复杂性的主要手段控制复杂性的有效方法是分解:面向过程的方法,是按功能分解;面向对象的方法,是按责任分解。35/86(3)软件需求经常变化绝大多数软件都模拟了现实世界的某一部分。现实世界不断变化,人们对其认识也有偏差,这就造成了软件需求经常变化的特性。这种变化不仅存在于开发过程中和也存在交付使用以后。前者要求在开发过程中,应能灵活调整设计方案,后者要求软件应具有可维护性。需求变更是软件开发活动与生俱来的特性,不可避免。变更不是坏事,但它是软件开发面临的最大挑战。软件工程追求的是、封装变更,灵活设计,应对变更,通过好的设计方法,使变更对原有设计方案和已有代码影响最小。36/86(4)开发软件的效率非常重要随着社会经济和文化的发展,网络及各类开发与应用平台的不断翻新,计算机硬件性能的不断提高,社会对软件的数量、规模和复杂性不断提高,软件的需求供不应求的现象依然日益严重。因此,寻求开发与维护软件的更好、更有效的方法和工具,依然是软件工程的一个重要课题。不断提高软件开发效率非常重要•规范的开发过程•好的开发环境和工具、•提高软件复用是软件工程提高效率的有效办法。37/86(5)和谐地合作是开发软件的关键软件处理的问题日益复杂和庞大,软件开发往往是多人协同工作的成果,明确的责任划分和有效的互信是团队成员协作的关键。事实上仅有上述规定还不够,每个人还必须严格地按规定行事。为了迫使团队成员遵守规定,应该运用标准和规程。通常,可以用工具来支持这些标准和规程。总之,纪律是成功地完成软件开发项目的一个关键。团队合作是必须的,使用有效的工具
本文标题:第1章-软件工程基本概念与原理
链接地址:https://www.777doc.com/doc-203033 .html