软件工程2011—2012—1西科大计科院软件教研室2课程的任务通过课堂教学并结合课程实践项目,掌握软件工程的基本概念、基本原理、实用的开发方法和技术;了解软件工程各领域的发展动向;学会如何用工程化的方法开发软件项目及在开发过程中应遵循的流程、准则、标准和规范;西科大计科院软件教研室3能用CASE工具(如:Visio、PowerDesigner)进行需求分析设计;加强对已学知识的综合运用能力,养成良好的软件开发风格,可从事一般应用软件的项目开发工作。西科大计科院软件教研室4课程特点要求基础课程较多。大规模的软件项目开发最终是由很多开发组织、很多开发人员的集体参与、协作完成。具体的技术工作就是依赖于这些先行课程的能力。应用实践性较强。该课程的内容都是多年来众多软件开发项目的经验总结。同时,反过来,它又为今后的软件开发提供理论指导。与产业标准行业规范衔接、概念多、涉及面广。西科大计科院软件教研室5课程的学习基本要求(1)掌握软件工程的一些基本概念;(2)掌握软件工程中涉及的主要原理和方法;(3)学习使用各种描述工具来描述软件开发过程中各阶段形成的文档;(4)建立规范化思想,并运用到软件生产的全过程;西科大计科院软件教研室6(5)学会简单的计算机软件(特点是应用软件)的开发全过程各工作步骤的文档化描述;(6)了解软件工程领域里有关新方法、新技术;(7)培养自学能力,为以后进一步从事软件开发打下一个较全面、扎实的基础。西科大计科院软件教研室7基本技能要求:能用软件工程的方法参与软件项目的分析、设计、实现和维护。课程的重点:系统分析、系统设计、系统测试与维护。课程的难点:面向数据流的方法、面向对象方法、软件测试和管理等。西科大计科院软件教研室8“软件工程”课程与其它软件专业课的区别(1)立足于系统的整体。(2)讲授系统分析、系统设计、测试及维护的理论和方法。(3)构筑一个软件系统,实践软件开发全过程。西科大计科院软件教研室9“软件工程”课程教学与实践的目标•转变对软件开发的认识:上升程序系统•转变思维定式:上升程序员系统工程师(系统分析员)•工程化训练西科大计科院软件教研室10学习材料【1】RogerS.Pressman著,郑人杰等译,软件工程——实践者的研究方法(原书第6版.本科教学版),机械工业出版社,2008年6月1日第1版【2】史济民,顾春华等,软件工程——原理、方法与应用(第二版),高等教育出版社,2004年第2版【3】窦万峰等,软件工程方法与实践,机械工业出版社,2009年5月第1版西科大计科院软件教研室11【4】(美)沙赫查著,黄林鹏,俆小辉,伍建焜译,面向对象软件工程,机械工业出版社,2009年2月第1版【5】网络资源西科大计科院软件教研室12学习方法本课程实践性、综合性强,在课堂概念与理论学习的同时,要结合单独开设的实践课程把已学知识得以实践,并注意提高自己的综合运用能力和新问题的创新能力。注意教学环节中的案例分析。多利用参考资料及网络资源。积极与老师沟通,解决学习中疑问,以便教师调整教学进度(包括E-MAIL联系)。西科大计科院软件教研室13成绩考核1.学生本课程的总成绩由期末考试成绩和平时考核成绩两部分组成。期末考试成绩40%平时考核成绩60%平时考核成绩由教师按要求评定,期末考试由西南科技大学统一命题。西科大计科院软件教研室142.平时考核成绩包括教学内容考核成绩和教学管理考核成绩两部分。教学内容考核成绩50分,包括阶段性成果报告(需求分析报告、概要设计报告)、课堂讨论、平时作业、课堂提问、课堂小测验、大作业等的成绩总分;教学管理考核成绩10分,主要为课堂出勤率成绩。西科大计科院软件教研室153、期末考试要求对课程内容的掌握分为三个层次:掌握:属于本课程中基本的必须掌握的内容,包括基本概念、基本原理、基本知识点理解:属于本课程中有一定难度,或是较为综合的内容。了解:属于本课程中要求相对较高,或是应用相对较少的内容。西科大计科院软件教研室16学时安排:1~16周理论:48学时周学时数:3联系方式:songlili@swust.edu.cn13778168273西科大计科院软件教研室17第一章软件工程学概述1.1软件与软件危机一、软件的定义什么是软件软件是计算机系统中与硬件相互依存的另一部分,它是包括程序,数据及其相关文档的完整集合。西科大计科院软件教研室18程序是按事先设计的功能和性能要求执行的指令序列数据是使程序能正常操纵信息的数据结构文档是与程序开发,维护和使用有关的图文材料什么是软件?西科大计科院软件教研室19二、软件的特点及分类软件的特点软件是一种逻辑实体,而不是具体的物理实体。因而它具有抽象性软件的生产与硬件不同,在它的开发过程中没有明显的制造过程在软件的运行和使用期间,没有硬件那样的机械磨损,老化问题西科大计科院软件教研室20软件的开发和运行常受到计算机系统的限制,对计算机系统有着不同程度的依赖性软件的开发至今尚未完全摆脱手工艺的开发方式软件本身是复杂的实际问题的复杂性程序逻辑结构的复杂性软件成本相当昂贵相当多的软件工作涉及到社会因素西科大计科院软件教研室21软件成本在计算机系统总成本中所占的比例逐年上升西科大计科院软件教研室22软件的分类按软件的功能进行划分:系统软件操作系统数据库管理系统设备驱动程序通信处理程序等西科大计科院软件教研室23支撑软件文本编辑程序文件格式化程序磁盘向磁带数据传输的程序程序库系统支持需求分析、设计、实现、测试和支持管理的软件西科大计科院软件教研室24应用软件商业数据处理软件工程与科学计算软件计算机辅助设计/制造软件系统仿真软件智能产品嵌入软件医疗、制药软件事务管理、办公自动化软件计算机辅助教学软件西科大计科院软件教研室25按软件规模进行划分:类别参加人员数研制期限源程序行数微型11~4周0.5k小型11~6月1k~2k中型2~51~2年5k~50k大型5~202~3年50k~100k甚大型100~10004~5年1M(=1000k)极大型2000~50005~10年1M~10M西科大计科院软件教研室26按软件工作方式划分:实时处理软件分时软件交互式软件批处理软件按软件服务对象的范围划分:项目软件产品软件西科大计科院软件教研室27按使用的频度进行划分:一次使用频繁使用按软件失效的影响进行划分:高可靠性软件一般可靠性软件西科大计科院软件教研室28三、软件的发展及软件危机1、软件发展阶段程序设计阶段—50至60年代软件为每个具体应用而专门编写规模较小软件开发个体化除程序清单,无其他文档资料程序系统阶段—60至70年代出现“软件作坊”软件开发仍个体化,软件数量剧增软件不可维护——软件危机软件工程阶段—70年代以后为摆脱软件危机的困扰而提出是研究软件开发和维护的普遍原理的技术科学西科大计科院软件教研室31随着计算机硬件技术的进步,要求软件能与之相适应。然而软件技术的进步一直未能满足形势发展提出的要求。致使问题积累起来,形成了日益尖锐的矛盾。这就导致了软件危机。软件危机的产生主要有两方面的原因:软件本身的原因是计算机的逻辑部件规模庞大,复杂性高可移植问题软件开发和维护方法不正确错误的认识:忽略软件需求分析的重要性,轻视软件维护错误的做法:对用户要求没有完整准确的认识,就着手编写程序(1)缺乏软件开发的经验和有关软件开发数据的积累,使得开发工作的计划很难制定。致使经费预算常常突破,进度计划无法遵循,开发完成的期限一拖再拖。(2)软件需求,在开发的初期阶段提得不够明确,或是未能得到确切的表达。开发工作开始后,软件人员和用户又未能及时交换意见,造成开发后期矛盾的集中暴露。软件危机的问题归结起来有(P2):(3)开发过程没有统一的、公认的方法论和规范指导,参加的人员各行其事。加之设计和实现过程的资料很不完整;或忽视了每个人工作与其他人的接口,使得软件很难维护。(4)未能在测试阶段充分做好检测工作,提交用户的软件质量差,在运行中暴露出大量的问题。解决软件危机的途径充分吸取和借鉴各种工程项目所积累的行之有效的概念,采用工程化和工程技术的方法途径来研制和维护软件。采用先进的技术、方法与工具来开发与设计软件;采用必要的、严密的管理措施做好各类文档的一致性和完整性。几十年来最根本的变化体现在:(1)人们改变了对软件的看法。50年代到60年代时,程序设计曾经被看做是一种任人发挥创造才能的技术领域。当时人们认为,写出的程序只要能在计算机上得出正确的结果,程序的写法可以不受任何约束。随着计算机的广泛使用,人们要求这些程序容易看懂、容易使用,并且容易修改和扩充。于是,程序便从按个人意图创造的“艺术品”转变为能被广大用户接受的工程化产品。(2)软件的需求是软件发展的动力。早期的程序开发者只是为了满足自己的需要,这种自给自足的生产方式仍然是其低级阶段的表现。进入软件工程阶段以后,软件开发的成果具有社会属性,它要在市场中流通以满足广大用户的需要。(3)软件工作的范围从只考虑程序的编写扩展到涉及整个软件生存周期。许多计算机和软件科学家尝试,把其它工程领域中行之有效的工程学知识运用到软件开发工作中来。经过不断实践和总结,最后得出一个结论:按工程化的原则和方法组织软件开发工作是有效的,是摆脱软件危机的一个主要出路。软件工程概念:采用工程的概念、原理、技术和方法来开发和维护软件,把经过时间验证正确的管理技术和当前最好的技术方法结合起来。西科大计科院软件教研室40早期定义:软件工程就是为了经济的获得可靠的且能在实际机器上有效地运行的软件,而建立和使用完善的工程原理。更全面的定义:①把系统地、规范的、可度量的途径应用于软件开发、运行和维护过程,也就是把工程应用于软件;②研究①中提到的途径。软件工程所包含的内容不是一成不变的,随着人们对软件系统的研制开发和生产的理解,应用发展的眼光看待它。1.2软件工程西科大计科院软件教研室41一、软件工程的本质特性软件工程关注于大型程序的构造软件工程的中心课题是控制复杂性软件经常变化开发软件的效率非常重要和谐的合作是开发软件的关键软件必须有效的支持它的用户在软件工程领域中,是由具有一种文化背景的人替具有另一种文化背景的人创造产品。西科大计科院软件教研室42二、软件工程的基本原理1.用分阶段的生命周期计划严格管理a)采用生命周期方法学,从时间角度对软件开发和维护的复杂问题进行分解,把软件生命的周期依次划分为若干个阶段,每个阶段有相对独立的任务,然后逐步完成每个阶段的任务。西科大计科院软件教研室43b)生命周期方法学的实质:系统从抽象的逻辑概念逐步发展到具体的物理实现。c)软件生命周期阶段的划分原则各阶段任务尽可能相对独立同一阶段的各项任务的性能尽可能相同,降低复杂度简化不同阶段间的联系,便于软件开发,工程的组织管理西科大计科院软件教研室442.坚持阶段评审3.实行严格的产品控制4.采用现代程序设计技术5.结果应当能清楚的审查6.开发小组的人员应少而精7.承认不断改进软件工程实践的必要性西科大计科院软件教研室45三、软件工程方法学(SoftwareEngineeringMethodology)软件开发方法学软件开发技术软件工具软件工程环境软件工程学软件管理学软件工程管理软件经济学软件度量学西科大计科院软件教研室46软件工程—一种层次化技术工具方法过程质量焦点Softwareengineeringlayers软件工程三个要素:方法、工具、过程西科大计科院软件教研室47传统软件工程和面向对象软件工程一、程序设计方法的两次飞跃结构化程序设计——〉面向对象程序设计“数据结构+算法”——〉“对象+消息”二、面向对象程序设计的优势数据与操作封装三、两类软件工程范型的简单比较传统软件工程软件分析—〉总体设计—〉详细设计—〉面向过程的编码