1、数学与计算科学学院软件工程课程2007年3月课程内容 1 基本概念 软件危机 软件工程 软件过程 软件生命周期 几种模型课程内容 2 结构化的软件工程方法学 结构化分析 结构化设计 结构化实现 这是传统的软件工程方法学课程内容 3 面向对象的软件工程方法学 面向对象分析 面向对象设计 面向对象实现 需要有一定的面向对象概念基础 较现代的软件工程方法学课程内容 4 软件项目管理 规模衡量 工作量与成本衡量 进度管理 项目组织方法 风险与质量控制 配置与版本管理课程内容 5 统一建模语言UML配合使用的实现工具Micrsoft visio或IBM Rational 主要教材 软件工程(第二版)张海
2、藩 人民邮电出版社 UML基础,案例与应用(第三版)Joseph Schmuller著 李虎等译 人民邮电出版社参考书与课外阅读材料 人件 人月神话 软件工程经济学 与UML有关的书 http:/www.china-基本概念 软件危机计算机系统发展经过的4个阶段1 早期 没有通用软件,软件为具体应用编写特点A 程序很小B 开发者通常就是使用者软件危机C 根本无须预先计划D 除了程序代码清单以外,通常无须任何文档大概和大家在计算机编程课里做作业的情形类似这个情形大概出现在1960s 中期以前软件危机2 软件作坊这个时代大概在60s中期到70s中期多用户,多进程的分时系统开始出现,在线存储技术进步
3、促进了第一代数据库管理系统诞生特点A 已经有产品性的通用程序B 开发方式基本还是沿用第一代的,用户一旦有新的需求就必须去大幅度修改程序软件危机 由于开发模式的落后,在这个阶段暴露出很多问题,例如 资源被大量消耗浪费在维护工作上 程序的个体化特性使它们最终成为不可维护的(工作量上无法承受)两个概念由此诞生 软件危机:特指上述的,由于软件开发上的随意性,而造成可维护性风险软件工程 软件工程 1968年北约的计算机学者在西德召开的伙计会议上第一次提到这个概念,一门新兴的工程学科由此诞生3 微处理时代计算机系统的复杂性越来越高,对软件开发者提出更高的要求,软件工程手段日益受到重视软件工程这个时期大约从
4、70s中到80s中4 网络时代软件趋向分布式,的网络应用,空前的复杂程度本阶段出现了面向对象技术(取代了传统的结构化技术,降低了系统设计和实现的难度)机器参与软件设计(专家系统,人工智能系统,计算机辅助设计系统)什么是软件危机 主要包括两方面的含义 1 如何开发需求越来越复杂的软件?2 怎样维护规模和数量都不断膨胀的现有软件?什么是软件危机 软件危机的典型表现 1 对开发成本和进度的估计不准确,实际成本比估计成本可能高一个数量级别 2 用户对”已完成”的软件感到不满意 3 软件质量不可靠 4 软件不可维护,错误难以纠正,不能适应新的硬件环境,不能增加新的功能什么是软件危机 5 软件没有文档资料
5、 6 软件成本(所占比例)逐年提高 7 软件开发速度不能追随硬件发展速度,硬件的潜在能力没有充分发挥产生软件危机的原因 1 软件产品本身的特点 软件产品缺乏”可见性”,不同的人对开发的最终目标理解不一致 开发进程缺乏可衡量性,软件质量难以评价 软件维护往往意味着修改原先的设计,由于不同的部分彼此关联,牵一发动全身,使软件维护变的困难产生软件危机的原因 2 软件开发与维护的方法不正确 软件的复杂度与规模呈指数增长关系,规模越大,越不能通过人脑的直觉所控制 用户通常倾向于没有经过详细的系统分析就匆忙着手编写程序,而实际编程一般只占工作量的10%-20%,主要的工作量在于需求分析,和系统测试等步骤产
6、生软件危机的原因 轻视文档,而实际上程序仅是软件产品中的一个小部分,完整的软件产品还包括数据和文档 轻视维护,对维护的工作量估计不足,事实上维护花费大约占总费用的55%-70%消除软件危机 1 认识上纠正错误的观念 2 良好的管理方法 3 使用软件工具作软件工程支撑环境什么是软件工程 1993年IEEE给出的定义 软件工程是 1 把系统化的,规范的,可度量的途径应用于软件开发,运行和维护的过程,也就是把工程化应用于软件中 2 研究1中提到的途径软件工程的基本原理 1 用分阶段的生命周期严格管理软件工程的基本原理 2 坚持阶段评审软件工程的基本原理 3 实行严格的产品控制软件工程的基本原理 4 采用现代化的程序设计技术软件工程的基本原理 5 结果应能清楚的审查软件工程的基本原理 6 开发小组应该少而精软件工程的基本原理 承认不断改进软件工程技术的重要性软件工程方法学 三大要素:方法,工具,过程 传统方法学与面向对象方法学