软件工程导论教案章程
- 格式:docx
- 大小:104.00 KB
- 文档页数:48
软件工程导论教案第一篇:软件工程导论教案计算机系统发展迅速,但是人们仍然没有彻底摆脱“软件危机”的困扰,软件已经成为限制计算机系统发展的瓶颈。
计算机软件工程学就是为了研究如何消除软件危机而发展起来的。
那么什么是软件危机呢?在开始讲软件危机时我要先提出一个概念:什么是软件?(板书:软件危机、什么是软件)简单来举例像我们平时用的word、excel都是计算机软件。
软件就是计算机系统中与硬件相互依存的另一部分,它包括程序、相关数据及其说明文档。
(软件的英文名为Software板书:software=program+data+document)那它具有什么特性呢?在这里我向大家绘制两幅图,大家可以比较讨论一下硬件的失效率刚开始是降低的,这个阶段就是磨合调整,通过调整失效率降低并达到一定时期的稳定,那为什么会失效率增高呢,硬件是物理实体它存在磨损用坏的问题。
再来看软件的失效图像,我绘制了两条,一条是理想情况下,另一天是实际情况下。
大家可以看出来吗?没错,开发出来的软件并不是永远有效的,随着用户的需求增大等情况失效率会增高。
从图中我们还可以看出在软件的运行和使用期间,没有硬件那样的机械磨损,老化问题。
因为软件是一种逻辑实体,并非具体的物理实体。
另外呢,软件复杂性很高,软件技术的发展落后于需求,成本也相当昂贵。
讲完软件的概念,那么软件危机就比较容易理解了,软件危机就是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。
那么大家思考一下,能够正常运行的软件可能会存在软件危机吗?答案是可能会。
实际上,几乎所有软件都不同程度地存在这些问题。
比方说,你在用QQ软件时,它不能与你的计算机硬件环境兼容或是不能满足你的要求。
总结下来,软件危机需要应对两方面的问题:(1)如何开发软件,以满足对软件日益增长的需求(2)如何维护数量不断膨胀的已有软件软件危机又有哪些典型表现呢?我们在进行一项工程时是不是经常会有一个工程预算,软件工程也不例外,如果对软件开发成本和进度的估计不准确,那么就很容易使用户不满。
《软件工程导论》课程教学大纲(5篇)第一篇:《软件工程导论》课程教学大纲《软件工程导论》课程教学大纲课程编号:课程中文名称:软件工程导论课程英文名称:Introduction of Software Engineering 总学分:2 总学时: 36 讲课学时:36习题课学时:0 实验学时:0 上机学时:0 授课对象:软件工程专业本科先修课程:程序设计课程要求:必修课课程分类:专业基础课一、课程教学目的随着计算机技术的发展,软件的规模越来越大,软件的结构越来越复杂,软件开发与维护的难度也越来越高,软件的质量难以保证,软件开发与维护的进度和成本难以控制,这就要求有一种科学的方法指导软件的开发与维护工作。
软件工程就是这样一种指导软件开发和维护的工程学科。
通过本课程的学习,使学生了解软件工程的概念、原理和技术,初步掌握软件开发的基本方法和常用工具,建立软件开发和维护的工程化意识,培养独立思考的能力和团队合作的精神,为后续相关课程的学习以及从事软件开发与维护的实际工作打下良好的基础。
二、教学内容及基本要求教学内容:1.课程内容简介(1学时)本课内容简介,基本要求和目标,教学方法,学习方法,教材(英1 文原版)的主要内容及使用,中文参考教材简介2.软件工程的基本概念(4学时)软件工程的基本概念,软件危机产生的原因,软件危机面临的问题及解决方法,什么是好的软件以及软件的质量的概念,实施软件工程的人员,软件工程的系统方法,软件工程的工程方法,软件工程的发展3.过程建模与生命周期(4学时)过程的概念,软件过程模型,软件生命周期,各种常用的软件过程模型,过程建模的工具和技术 4.软件项目计划与管理(4学时)软件项目进展跟踪,软件项目的人员,工作量的估算,风险管理,项目计划,项目管理 5.需求获取(4学时)需求过程,需求的类型,需求的特征,需求的表示方法,原型需求法,需求文档,需求过程的参加人员,需求确认,需求度量,需求表示方法的选择,表示需求的工具。
《软件工程导论》课程教学大纲软件工程导论课程教学大纲一、课程介绍软件工程导论课程致力于介绍软件工程的基本概念、原理和技术,帮助学生了解软件开发的整体流程以及相关的管理和质量控制方法。
通过本课程的学习,学生将掌握软件工程的基本理论和实践技能,为日后的软件项目开发奠定坚实的基础。
二、教学目标1. 让学生了解软件工程的发展历程和重要性,并理解软件工程在实际应用中的作用。
2. 掌握软件工程的基本概念和核心原理,包括需求分析、设计、编码、测试和运维等方面。
3. 学会运用常见的软件工程方法和工具,提高软件开发的效率和质量。
4. 培养学生的团队合作能力和项目管理能力,使其能够适应未来的软件开发工作。
三、教学内容1. 软件工程导论1.1 软件工程的定义和背景1.2 软件工程的发展历程1.3 软件工程的重要性和挑战2. 软件生命周期2.1 软件生命周期模型2.2 软件需求与分析2.3 软件设计与体系结构2.4 软件编码与测试2.5 软件维护与升级3. 需求工程3.1 需求获取与分析3.2 需求规格说明3.3 需求验证与验证4. 软件设计4.1 结构化设计原理4.2 面向对象设计原理4.3 软件设计工具和方法5. 软件测试5.1 测试的基本概念和原理5.2 测试用例设计和执行5.3 软件缺陷的管理和修复6. 软件项目管理6.1 软件项目计划与组织6.2 软件项目进度控制与风险管理6.3 软件质量管理和配置管理四、教学方法1. 理论讲授:通过课堂讲解,介绍软件工程的基本概念、原理和方法。
2. 实践操作:引导学生使用常见的软件工程方法和工具进行实践,加深对软件开发流程的理解。
3. 项目实践:组织学生进行小型软件项目开发,培养团队合作和项目管理能力。
4. 讨论与互动:鼓励学生在课堂上提问和讨论,促进知识的深入理解和应用。
五、评价方式1. 平时表现:包括课堂参与、作业完成情况、实践操作等。
2. 课程项目:对学生参与的实际软件开发项目进行评估。
安徽大学本科教学课程教案课程代码: 课程名称: 授课专业: 授课教师: 职称/学位: 开课时间:二○ 一六ZJ36047 软件工程导论 软件工程 章程 讲师/博士 至二○ 一七 学年第 2 学期1 / 58第周次 教学 章节 1 第 1 章 软件工程的范畴1次课程教学方案课时数 2(1)明确软件工程的各个方面的含义。
目标 要求 (2)描述传统软件工程生命周期模型和面向对象范型。
(3)感受遵守道德规范的重要性。
重点 难点重点: (1)软件工程的定义; (2)软件工程的传统范型; (3)软件工程的面向对象范型。
难点:维护的传统和现代的观点。
√ 课堂讲授 □ 作业讲评 √ 文字教材 □ 小组活动 □ 实践教学 √ 电子教案 □ IP 课件 □ 实验演示 □ 考试测验 □ 录像材料 □ 其他资源: √ 难点答疑 □ 其他活动 □ 录音材料 □ 直播课堂 √ 提问教学 方式 媒体 资源 课后 作业□ CAI 课件(1)为什么传统意义上的维护观点对于今天的软件产品不现实? (2) “软件危机”一词于 1976 年提出,它是什么意思?这个词现在还适用吗?2 / 58板 书 设 计教学课件《第 1 章 软件工程的范畴》 1. 历史方面 2. 经济方面 3. 维护性方面 4. 需求、分析和设计方面 5. 小组编程方面 6. 为什么没有计划阶段 7. 为什么没有测试阶段 8. 为什么没有文档阶段 9. 面向对象范型 10. 术语 11. 道德问题3 / 58第教学 环节1次教学活动设计内容设计与手段导 入 新 课由两个实例引入: 工程学的意义。
软件生产过程虽然很多方面与传统工程相似,但是仍然有自己的属性和问题。
软件工程定义为一门学科,目的是生产出满足客户要求的、未超出预算的、按时 交付的、没有错误的软件。
需要在软件生产的各个阶段使用恰当的技术,包括何时进行分析、设计和交付后 维护。
软件工程结合人类各个领域的许多知识,包括经济和社会科学。
《软件工程导论》教学大纲安徽大学计算机科学与技术学院2017 年 3 月《软件工程导论》教学大纲课程编号:ZJ36047课程名称:软件工程导论英文名称:Introduction to Software Engineering 学分/学时:2/34 课程性质:学科平台课程适用专业:软件工程先修课程:计算机导论开课单位:计算机科学与技术学院一、课程的教学目标与任务《软件工程导论》课程是软件工程专业高等教育的专业基础课程和学科平台课程,是“科研训练计划”教育课程。
《软件工程导论》以科学技术方法论为逻辑起点,结合部分管理方面的基本理论,讲授软件工程与方法论的联系,从而提高软件的质量和生产率。
本课程以软件工程专业本科二年级学生为讲授对象,是集理论性与应用性为一体的学科。
设置本课程的目的是:使学习者在全面了解软件工程发展历史、基本理论的基础上,系统掌握软件开发过程中的现代方法和管理手段,具备用工程化方法设计和构建规范软件的思想,从而为后续软件工程开发方法的系列课程奠定理论基础。
学习本课程的要求是:学习者应深刻认识软件危机产生的原因,纠正对软件开发的错误认识,掌握软件工程科学方法论的基本概念和基本原理,初步具备作为专业人员组织软件开发和设计工作的能力。
为检验掌握软件开发应遵循的原则和编写文档的基本方法的程度,最后的考核是通过考试进行,同时以加深对课程内容的理解。
二、课程具体内容及基本要求第一章软件工程的范畴 ( 2学时)基本内容包括:第一节历史方面一、定义软件(1)介绍软件的形式化定义。
结合经典教科书中关于软件的定义,介绍软件中所包含的三个要素:①指令的集合;②数据结构;③软件描述信息。
(2)阐述非形式化定义中软件具有的特性。
对比其他人工产品的特性,总结软件所具有的三个特性。
二、软件工程的发展历程和应用领域第二节经济方面结合例子阐述经济学原则在软件生产方面的重要性。
第三节维护性方面介绍软件生命周期模型和步骤,阐述维护工作在生命周期模型中的重要性和具体分类。
软件工程导论课程教学大纲软件工程导论》课程教学大纲一、课程性质、地位和作用《软件工程导论》是是软件工程专业的专业基础课程,属必修课。
本课程主要讲述建造软件系统的基本方法、技术、流程、工具及规范等。
通过学习可以使学生了解软件工程的基本概念、基本原理、实用的开发方法和技术;了解软件工程各领域的基本内容和发展动向;学习用工程化的方法开发软件项目,初步掌握开发过程中应遵循的流程、准则、标准和规范。
本门课程为将来从事软件开发学生的软件工程师之路奠定坚实的基础。
二、课程教学对象、目的和要求本课程适用于软件工程、计算机应用等从事软件开发的本科专业。
课程教学目的、要求:(一)从教学内容上,应使学生了解软件工程的基本概念,主要包括软件与软件开发的基本过程,软件危机与软件工程。
掌握个人软件开发过程的基本内容和方法,了解软件开发模型及结构化软件设计方法,以及软件质量保证基本内容。
(二)从能力方面,应使学生通过对软件工程基本概念和方法的学习和课后练习,培养学生养成规范化个人开发的良好习惯,培养学生按照软件工程的基本过程和方法来设计和开发软件。
(三)从教学方法上,在课堂理论教学中,采用学生可以理解的软件开发素材,通过一边实践一边讲解的方法,讲解软件过程的基本思想和方法,通过学生完成与实践结合的作业,调动学生的积极性,使软件工程的基本思想逐步植根于学生头脑中。
三、相关课程及关系本课程的先修课程是“ C 语言程序设计”和“数据结构”等程序设计课程,学习应在学生具有一定的编程能力基础上进行。
本课程为后续的“软件制造工程” 和“软件设计工程”等课程打下了必要的理论基础。
四、课程内容及学时分配总学时:32学时(一)绪论 1 学时1、软件工程及其重要性2、软件开发需要软件工程3、软件工程课程体系架构(需要什么软件工程)4、课堂的组织、学习方法、章节安排与考核要求学生了解软件工程的起源,软件工程在软件开发中的作用,了解软件工程课程体系。
软件工程导论教案一、教学目标1. 熟悉软件工程的基本概念、原理和方法;2. 掌握软件工程的过程模型和相关的管理工具;3. 了解软件工程中的项目管理、需求分析、软件设计、编码和测试等基本知识;4. 培养学生的软件工程思维、分析和解决问题的能力。
二、教学内容1. 软件工程导论概述1.1 软件工程的定义和发展历程1.2 软件工程的基本概念1.3 软件开发的生命周期模型2. 软件开发过程2.1 瀑布模型2.2 增量模型2.3 螺旋模型2.4 敏捷开发3. 软件项目管理 3.1 项目计划3.2 项目组织3.3 项目进度管理3.4 项目风险管理4. 软件需求分析 4.1 需求获取4.2 需求分析4.3 需求规格说明5. 软件设计5.1 结构化设计 5.2 面向对象设计5.3 设计原则与模式6. 软件编码和测试6.1 编码规范6.2 软件测试基本概念6.3 软件测试方法三、教学方法本课程的教学方法主要采用理论教学相结合的方式,注重理论知识与实践应用的结合。
教师将通过讲解理论知识、解析案例、讨论问题等方式,引导学生理解和掌握软件工程的基本概念、原理和方法。
同时,教师还会组织一些实践活动,如小组讨论、项目实践等,让学生能够亲身体验软件工程的实际应用。
四、教学评价1. 平时成绩:包括出勤情况、参与讨论和实验、作业完成情况等;2. 期中考试:主要测试学生对软件工程基本概念、原理和方法的理解程度;3. 期末考试:主要测试学生对软件工程的整体掌握情况,包括过程模型、项目管理、需求分析、软件设计和测试等方面的知识。
五、教学参考书1. 《软件工程导论》(第5版)邹欣李晓霞高山等著2. 《Software Engineering: A Practitioner's Approach》(第9版)Roger S. Pressman 著3. 《软件工程导论与实践》(第3版)邹欣曹文渊温晓华著六、教学进度安排1. 第1周:软件工程导论概述2. 第2周:软件开发过程-瀑布模型3. 第3周:软件开发过程-增量模型4. 第4周:软件开发过程-螺旋模型5. 第5周:软件开发过程-敏捷开发6. 第6周:软件项目管理7. 第7周:软件需求分析8. 第8周:软件设计9. 第9周:软件编码和测试10. 第10周:复习11. 第11周:期中考试12. 第12周:课堂讨论13. 第13周:小组项目实践14. 第14周:总结复习15. 第15周:期末考试注:以上教学进度安排仅供参考,实际教学进度可根据学生的学习情况进行调整。
软件工程导论教学大纲一、说明(一)课程性质软件工程导论是计算机科学与技术专业的核心课程之一,属于必修课程。
该课程的先修课程有计算机导论、程序设计基础、数据结构、面向对象程序设计、离散数学等,后续课程有算法分析与设计,程序设计、软件测试等。
软件工程是研究软件开发维护和软件管理的一门工程科学,本课程是计算机科学与技术专业指导性教学计划规定的教学环节中的一部分。
通过本课程的学习,使学生了解软件工程的概念、原理和技术,初步掌握软件开发的基本方法和常用工具,建立软件开发和维护的工程化意识,培养独立思考的能力和团队合作的精神,为后续相关课程的学习以及从事软件开发与维护的实际工作打下良好的基础。
(二)教学目的本课程的教学目的,应使学生掌握大型复杂软件系统的开发方法、规则和工具。
首先,应使其克服长期书写小程序形成的“重编码、轻分析设计;重编码、轻技术资料建设和管理”的习惯;其次,要理解软件工程原理/方法/规则的必要性和掌握其技术细节;第三,要了解软件工程学的进展和前沿动态;第四,要通过软件系统设计的练习,巩固和应用所学知识。
(三)教学内容本课程面向软件工程专业的学生,介绍软件系统性质、目标、环境的分析方法,目标系统逻辑联系、功能联系、控制联系和状态转换过程的描述方法,软件结构、测试方案的设计要求和分析方法,软件工程学新进展,以及上述过程所用的规范化图文数表模型。
具体包括:软件工程概念及其过程模型、结构化分析/设计/实现方法和工具,面向对象方法学及面向对象的概念、模型、分析方法、设计方法、实现方法,软件项目管理及其定量度量方法、相关国际标准。
最后介绍佩特网等形式化方法、统一建模语言、软件常用技术和软构件的分类与检索。
(四)教学时数本课程的教学总时数为90学时,其中,课堂教学时数为54学时,实验教学时数为36学时。
(五)教学方式本课程的难点在于,学生不曾经过大型软件开发的训练,因此在讲解中要适时插入大量软件开发事例,要求教师具有一定的软件开发经验;本课程不安排具体编程环境和开发语言的学习,但必须以大型软件开发实例说明问题,因此要求教师熟悉多种开发环境和开发语言;此外,软件开发技术的滞后和软件应用的广泛性所形成的反差,要求教师了解并适时提出计算机辅助软件工程(CASE)的问题。
《软件工程导论》《软件工程》课程设计指导书第一篇:《软件工程导论》《软件工程》课程设计指导书《软件工程导论》《软件工程》课程设计指导书课程代号:31110630,31110510 总学时(或周数):1周适用专业:软件工程,计算机科学与技术先修课程:程序设计语言、数据结构、离散数学等一、课程设计(实践)目的《软件工程》是计算机专业学生的专业必修课,通过学习,可以使学生对软件系统的设计思想、开发方法和具体过程有一完整的了解,为今后参加工作、适应环境的要求,开发出满足各种需要的软件系统打下一定的基础。
本课程设计的主要目的是:(1)使学生更好地理解该课程介绍的概念、原理等内容。
(2)加深对开发过程中所涉及的各种图形工具的认识和理解。
(3)学会利用现有的计算机辅导工具独立完成软件系统的设计工作。
二、课程设计(实践)要求具备软件开发的各种开发环境和常用的CASE工具均可,硬件只要流行配置和网路即可,软件包括如Windows、SQL Server、Oracle、PWS、IIS、VC、VB、Delphi、Power Bhulder、JAVA、Net、Asp/Jsp等,CASE如JUDE,Project,Rational Rose, Office等等各种流行工具。
另外,在本课程实验之前要求学生具备如下的知识和操作经验:(1)系统学习过《数据结构》、《程序设计技术》、《面向对象程序设计语言》、《数据库原理与应用》等课程。
(2)熟悉windows环境并能熟练操作。
掌握软件工程的基本思想和软件系统的设计方法。
要求分组协作开发一个小型系统,一般为5人左右一组。
每组学生可以自选题目(需经教师同意)或从以下题目中任选一个。
课程设计以实际应用中的小型题目为主,尽量要求每一学生能独立完成各自的任务。
设计的题目既可以由指导教师根据学生的实际程度指定,也可以由学生自己提出,经教师审核裁定。
题目的规模适中,在一个学期内完成,不宜过大,算法不宜过于复杂,应以能在规定的时间内完成为准。
软件工程导论教案章程 Last revised by LE LE in 2021安徽大学本科教学课程教案课程代码: ZJ36047课程名称:软件工程导论授课专业:软件工程授课教师:章程职称/学位:讲师/博士开课时间:二○一六至二○一七学年第 2 学期第 1 次课程教学方案第 1 次教学活动设计由两个实例引入:工程学的意义。
软件生产过程虽然很多方面与传统工程相似,但是仍然有自己的属性和问题。
软件工程定义为一门学科,目的是生产出满足客户要求的、未超出预算的、按时交付的、没有错误的软件。
需要在软件生产的各个阶段使用恰当的技术,包括何时进行分析、设计和交付后维护。
软件工程结合人类各个领域的许多知识,包括经济和社会科学。
1.1历史方面1968年在德国Garmisch召开的NATO软件工程会议上签署了声明,正式确立了软件工程的概念。
目标: 软件工程应当是一项类似工程的活动,应当使用已建立的工程学科的基本原理和范型来解决“软件危机”。
软件交付所出现的问题•推迟完成•超出预算•特性缺失错误软件危机仍然伴随着我们,告诉我们两件事情:(1)软件生产过程虽然很多方面与传统工程相似,但是仍然有自己的属性和问题。
(2)可能应当重新命名为“软件萧条”(Software Depression)•周期长•难预测1.2经济方面举例:使用新的编码技术 CTnew 编码时间比使用旧的编码技术CTold少花1/10的时间。
是否应该使用新的编码技术通常的答案时:当然选择新的编码技术。
从软件工程的经济观点来看:•考虑培训的成本•考虑采用新技术CMnew 对维护工作的影响1.3维护性方面传统维护观点:传统意义上,维护是根据不同时期所开展的活动来进行定义的客户想要增加该软件产品的功能•传统维护(完善性)客户想要在软件之前做同一改变(“移动目标问题”)•传统开发范畴现代维护定义是软件因存在问题或因有改进或适应性需求时,对代码及相应文档所进行的修改过程1.4 需求、分析和设计方面提高需求、分析和设计技术是非常重要的•可以尽早发现错误•降低错误的总体数量(需求、分析和设计中错误所占比例较高)1.5 小组编程方面硬件成本不断降低•产品太大了无法由一个人在规定时间内编写完成这种产品需要由一个小组去完成•模块之间的接口问题•小组成员之间的交流协调问题1.6 为什么没有计划阶段在项目的开始,对管理需求和分析阶段进行初步计划一旦明确之道将要开发什么,就制定出软件项目管理计划在整个项目过程中,管理者需要监督SPMP的执行情况,并且注意是否有偏离计划的情况发生1.7 为什么没有测试阶段在一个软件准备好交付给客户时才检查它实在是太晚了持续测试活动必须始终贯穿于软件生命周期中测试活动是•每个软件正确建造的保证•软件质量保证(SQA)小组的责任1.8 为什么没有文档阶段在一个软件准备好交付给客户时才编制文档实在是太晚了软件行业中的人员流动性较大如果前一阶段的文档不是完整、正确和最新的,几乎不可能执行下一阶段的步骤除非提供文档来说明对一个软件产品期望的性能,否则不可能测试该软件产品是否正确工作如果没有一套完整、正确的文档精确地描述产品的当前版本做些什么,维护几乎是不可能的1.9 面向对象范型优点1. 由于信息隐藏,交付后维护更安全•极大地减少了出现回归错误的机会2. 使软件开发变得更加容易•对象在现实中都存在对应物•能够简化建模(建模在面向对象范型中起着非常重要的作用)3. 设计良好的对象是独立的单元第 2 次课程教学方案第 2 次教学活动设计2.1理论上的软件开发在理想世界中。
安徽大学本科教学课程教案课程代码:ZJ36030
课程名称:软件工程方法论
授课专业:软件工程
授课教师:章程
职称/学位:讲师/博士
开课时间:二○一六至二○一七学年第二学期
第一次课程教学方案
第一次教学活动设计
第二次课程教学方案
第二次教学活动设计
第三次课程教学方案
第三次教学活动设计
第四次课程教学方案
第四次教学活动设计
第五次课程教学方案
第五次教学活动设计
第七次课程教学方案
第七次教学活动设计
第八次课程教学方案
第八次教学活动设计
第十次课程教学方案
第十次教学活动设计
第十一次课程教学方案
第十一次教学活动设计
第十二次课程教学方案
第十二次教学活动设计
第十三次课程教学方案
第十三次教学活动设计
第十四次课程教学方案
第十四次教学活动设计
第十五次课程教学方案
第十五次教学活动设计
第十六次课程教学方案
第十六次教学活动设计
第十七次课程教学方案
第十七次教学活动设计
课程教案审核情况。
软件工程导论教案章程 Document serial number【KKGB-LBS98YT-BS8CB-BSUT-BST108】安徽大学本科教学课程教案课程代码: ZJ36047课程名称:软件工程导论授课专业:软件工程授课教师:章程职称/学位:讲师/博士开课时间:二○一六至二○一七学年第 2 学期第 1 次课程教学方案第 1 次教学活动设计由两个实例引入:工程学的意义。
软件生产过程虽然很多方面与传统工程相似,但是仍然有自己的属性和问题。
软件工程定义为一门学科,目的是生产出满足客户要求的、未超出预算的、按时交付的、没有错误的软件。
需要在软件生产的各个阶段使用恰当的技术,包括何时进行分析、设计和交付后维护。
软件工程结合人类各个领域的许多知识,包括经济和社会科学。
1.1历史方面1968年在德国Garmisch召开的NATO软件工程会议上签署了声明,正式确立了软件工程的概念。
目标: 软件工程应当是一项类似工程的活动,应当使用已建立的工程学科的基本原理和范型来解决“软件危机”。
软件交付所出现的问题•推迟完成•超出预算•特性缺失错误软件危机仍然伴随着我们,告诉我们两件事情:(1)软件生产过程虽然很多方面与传统工程相似,但是仍然有自己的属性和问题。
(2)可能应当重新命名为“软件萧条”(Software Depression)•周期长•难预测1.2经济方面举例:使用新的编码技术 CTnew 编码时间比使用旧的编码技术CTold少花1/10的时间。
是否应该使用新的编码技术?通常的答案时:当然选择新的编码技术。
从软件工程的经济观点来看:•考虑培训的成本•考虑采用新技术CMnew 对维护工作的影响1.3维护性方面传统维护观点:传统意义上,维护是根据不同时期所开展的活动来进行定义的客户想要增加该软件产品的功能•传统维护(完善性)客户想要在软件之前做同一改变(“移动目标问题”)•传统开发范畴现代维护定义是软件因存在问题或因有改进或适应性需求时,对代码及相应文档所进行的修改过程1.4 需求、分析和设计方面提高需求、分析和设计技术是非常重要的•可以尽早发现错误•降低错误的总体数量(需求、分析和设计中错误所占比例较高)1.5 小组编程方面硬件成本不断降低•产品太大了无法由一个人在规定时间内编写完成这种产品需要由一个小组去完成•模块之间的接口问题•小组成员之间的交流协调问题1.6 为什么没有计划阶段在项目的开始,对管理需求和分析阶段进行初步计划一旦明确之道将要开发什么,就制定出软件项目管理计划在整个项目过程中,管理者需要监督SPMP的执行情况,并且注意是否有偏离计划的情况发生1.7 为什么没有测试阶段在一个软件准备好交付给客户时才检查它实在是太晚了持续测试活动必须始终贯穿于软件生命周期中测试活动是•每个软件正确建造的保证•软件质量保证(SQA)小组的责任1.8 为什么没有文档阶段在一个软件准备好交付给客户时才编制文档实在是太晚了软件行业中的人员流动性较大如果前一阶段的文档不是完整、正确和最新的,几乎不可能执行下一阶段的步骤除非提供文档来说明对一个软件产品期望的性能,否则不可能测试该软件产品是否正确工作如果没有一套完整、正确的文档精确地描述产品的当前版本做些什么,维护几乎是不可能的1.9 面向对象范型优点1. 由于信息隐藏,交付后维护更安全•极大地减少了出现回归错误的机会2. 使软件开发变得更加容易•对象在现实中都存在对应物•能够简化建模(建模在面向对象范型中起着非常重要的作用)3. 设计良好的对象是独立的单元第 2 次课程教学方案第 2 次教学活动设计2.1理论上的软件开发在理想世界中。
软件产品像第一章所描述的那样开发。
–线性 Linear–从零开始 Starting from scratch在现实实践中,软件开发完全不同。
–软件专业人员是人,因此会犯错误。
–当软件正在开发时,客户的需求会发生变化。
2.2-2.4小型实例研究(一)通过Winburg小型系统实例描述进化树生命周期模型,并对比瀑布生命周期模型。
(二)通过野鸭拖拉机公司小型实例研究说明公司业务需求发生变化的时候对软件开发过程所产生的危害。
2.5迭代和递增基本的软件开发过程是迭代的。
–每个版本比前一个版本离我们的目标更进一步。
处理信息量的限制的一个办法是使用逐步求精的方法。
stepwiserefinement–集中精力于目前最重要的那些方面。
–那些不紧急的方面延后。
–事情的那个方面最终都要处理,但是要按照目前的重要性依次进行。
2.6修订的Winburg小型实例研究通过Winburg小型实例把进化树模型添加在迭代-递增模型之上,说明递增的含义。
第 3 次课程教学方案第 3 次教学活动设计第3章软件过程3.1 统一过程软件开发过程描述了构造、部署以及维护软件的方式。
统一过程(Unified Process)是一种构造面向对象系统的迭代软件开发过程。
迭代和演化式开发是UP和其它方法中普遍采用的开发方法。
开发被组织成一系列固定的短期小项目,每次迭代都产生可执行的局部系统,都具有各自的需求分析、设计、实现和测试活动。
3.2 面向对象范型内的迭代和递增统一过程是一种建模技术模型是一套UML图表,表示要开发的软件产品的一个或多个方面。
UML 是一种建模语言表示(模拟)目标软件产品的工具面向对象范型是一种迭代和递增方法每个工作流由一些步骤组成,为了完成该工作流,重复执行工作流的步骤直至开发小组成员认为UML图的表示是正确的。
3.3 需求流需求流的目标确定客户需求任务首先,理解应用领域(application domain)特定的业务环境其次,业务建模利用UML描述业务过程3.4 分析流分析流目标分析和提取需求,以获得正确开发软件产品和易于维护产品所必需的需求为什么没有在需求流中进行?需求流的输出必须完全能够被客户理解分析流的输出必须是精确的需求制品必须用客户的语言表达所有的自然语言都是不精确的需求流和分析流的分离是必要的3.5 设计流目标是细化分析流的制品,使程序员根据设计制品可以直接编程实现传统设计体系结构设计(总体设计)将产品分解为各个模块详细设计设计每个模块:––数据结构––算法面向对象设计“类”(可被视为特殊类型的模块)在分析流期间被提取出来,在设计流期间进行设计。
传统的体系结构设计对应于分析流的一部分传统的详细设计对应于设计流的一部分目标是细化分析流的制品,使程序员根据设计制品可以直接编程实现传统设计体系结构设计(总体设计)将产品分解为各个模块详细设计设计每个模块:––数据结构––算法面向对象设计“类”(可被视为特殊类型的模块)在分析流期间被提取出来,在设计流期间进行设计。
传统的体系结构设计对应于分析流的一部分传统的详细设计对应于设计流的一部分3.6 实现流实现流的目标是用选择的实现语言实现目标软件产品大型软件产品被分为一个个的子系统子系统包含组件和代码制品3.7 测试流参加人员每个开发人员和维护人员质量保证小组制品的可追踪性是成功测试的重要保证在统一过程中,测试从始至终与其他工作流并行进行测试流的性质随着被测试的制品的不同而不同3.8 交付后维护软件开发过程的重要组成部分各类文档的缺乏会给维护带来很大的困难需要两种类型的测试针对更改本身的测试回归测试3.9 退役软件使用了若干年后,当进一步的交付后维护已经不值得时,软件就达到了退役阶段3.10 统一过程的各阶段四个递增阶段初始阶段(Inception phase)细化阶段(Elaboration phase)构造阶段(Construction phase)转换阶段(Transition phase)统一过程中执行的每一个步骤属于五个核心工作流之一,也属于四个阶段之一。
3.11 一维和二维生命周期模型对比瀑布模型和进化树模型3.12 改进软件过程软件开发的根本问题在于人们不能对软件过程进行管理。
3.13 能力成熟度模型CMM提供了一个成熟度等级框架: 1级-初始级、2级-可重复级、3级-已定义级、4级-已管理级和5级-优化级。
关键过程域(KPA):是一个组织进入级别时要实现的目标第 5 次课程教学方案第 5 次教学活动设计第4章软件小组4.1 小组组织通过实例说明分模块完成任务,并非简单的各自完成模块任务,还存在协调问题开发小组的组织是一个管理问题,与程序员的技术能力无关;布鲁克斯法则:向一个已经延期的软件项目增加人员会使该项目完成得更晚;4.2 民主小组方法无我编程(egoless Programming),鼓励他人找出自己程序中的错误强调集体,小组成员是平等的,打破程序员对自己开发程序的“护短”心理,主要目的尽可能多地发现BUG,这种方法的优点就是对查找错误的积极态度需要成员都是有经验的专家一般适合开源项目的开发(10人)4.3 传统的主程序员小组方法主程序员小组的两个关键特性:专业化:小组的每个成员只承担其接受过培训的那部分工作;等级性:主程序员指导小组所有其他成员的行动,并且对该项目的每个方面负责;主程序员既是一个成功的管理者,也是一个训练有素的程序员,他完成结构化设计以及代码中的关键和复杂的部分其他的小组成员在主程序员指导下进行具体的细节设计和编写代码在程序员之间没有沟通的渠道,所有的接口问题都由主程序员解决;最后,主程序员审查其他小组成员的工作,因为主程序员个人要对每行代码负责;备程序员应该在各方面与主程序员一样有能力,并且需要与主程序员一样深入了解这个项目,另外,为让主程序员集中精力进行结构化设计,备程序员应进行黑盒测试的用例规划,并承担其他与设计过程独立的任务;编程秘书是主程序员小组中一个精通专业、收入颇丰的核心人物;4.4主程序员小组和民主小组之外的编程小组从民主小组和主程序员小组的优点中得出的另一种方法是适当分散决策过程。
第 6 次课程教学方案第 6 次教学活动设计4.5 同步-稳定小组微软公司采用的方式程序员与测试员1:1比例配备(3-8)构件并行小组(3-4小组,每组一个程序管理者)具备民主小组的特点(鼓励单个程序员的创新),同时为了协同工作,每天必须进行工作同步-(每天将产品输入数据库,进行同步编译或测试),发现问题当天解决4.6 敏捷过程小组结对编程(一个编写程序代码,另一个编写测试用例),同一台计算机上工作具备无我编程的特点水平弱的可以向水平高的学习4.7 开源编程小组参与开源项目的个人志愿者出于两个原因:完成一项值得做的任务的成就感;得到培训的经验,得到较新技术方面的技能。
对于一个成功的开源项目目标产品的特性组织者的个性核心小组成员的天资4.8 人员能力成熟度模型描述管理合开发一个组织的人力资源的最佳实践举例Level 2:关键过程区安置员工,沟通合协调,工作环境,性能管理,培训和开发以及补偿Level 5:关键过程区连续能力提高,组织的能力联合以及连续人力资源改革4.9 选择合适的小组组织没有一个解决方案可以解决编程小组组织的所有问题.较为“正确”方法是依据需要建造的软件产品本身各种小组结构经验组织文化第7 次课程教学方案第10 次课程教学方案第10 次教学活动设计第11 次课程教学方案第11 次教学活动设计第12 次课程教学方案第12 次教学活动设计第13 次课程教学方案第13 次教学活动设计第14 次课程教学方案第14 次教学活动设计第15 次课程教学方案第17 次课程教学方案第17 次教学活动设计课程教案审核情况。