Download presentation
Presentation is loading. Please wait.
1
第一讲 软件与软件开发
2
软件的复杂性 是其自身所固有的 抽象、分治、分类等思想 将在其中发挥极为关键的作用
3
内 容 一、软件 二、软件开发 三、网络环境带来的影响
4
一、软件 1、什么是软件 2、软件的发展现状 3、软件的发展特点 4、软件的本质特性 5、软件的发展趋势
5
1、什么是软件 计算机软件一般指 计算机系统中的 程序 及 文档 程序 是 以计算机语言表达的软件系统 文档 是 以人类语言表达的软件系统
计算机系统中的 程序 及 文档 程序 是 以计算机语言表达的软件系统 文档 是 以人类语言表达的软件系统 二者互相配合 共同构成了完整的软件系统 人类抽象的经验、知识正逐步由软件予以精确地体现
6
软件 是脑力劳动的产物 是系统逻辑的体现 必须依附于一定的载体 例如:纸张、软盘、硬盘、光盘等 其它的物品呢?不需要载体?
软件 是脑力劳动的产物 是系统逻辑的体现 必须依附于一定的载体 例如:纸张、软盘、硬盘、光盘等 其它的物品呢?不需要载体? 老 子: 道德经: 第十一章: 三十辐共一毂(gǔ) ,当其无,有车之用。 埏(shān)埴(zhí)以为器,当其无,有器之用。 凿户牖(yǒu )以为室,当其无,有室之用。 故有之以为利,无之以为用。 解读的力量! 鲜花与饲料
7
软件到底有什么奥妙? 人类自身的感官不能直接确定它的存在: 分子、原子 等对于人们总有一定的神秘性:感官距离很“遥远”
软件: 通常 存在于纸带、磁带、光盘等之中 运行起来 靠: 集成电路 发挥作用 显示器 显示状态 竟然还可以在 不同的载体 之间十分方便地跳跃! 显示出来后离我们又这么“近”! 如此有用!
8
万物皆数? 我们可以对认识的任何一种东西进行编码 以产生它的一个具体“实例” 数据与代码: 从歌德尔定理到图灵不停机问题 静态代码分析!
9
软件作为逻辑产品的特点: 劣势: 不易被理解 容易出错 找错、排错困难 优势: 易于变化,适应性强 复制成本低,适合规模经济
给我们的生活、学习等带来了巨大的变化
10
2、软件的发展现状 (1)已经存在大量正在运行的软件 金融、电信、航空航天等 (2)软件的应用范围不断扩大
商务、交通、家电等,“计算机软件?” (3)软件的规模与复杂性持续增加 越来越多的知识正在由软件进行显式表达 (4)出现了大量与软件相关的标准 (3)的需求 (5)软件危机仍然存在(软件脱节) 四十三年!
11
软件工程四十年:软件工程、构件、中间件
12
3、软件的发展特点 (1)软件应用范围将继续扩大,成为信息社会的物理设施 (2)遗留软件将继续发挥作用 (3)软件的可靠性与安全性日趋重要
(4)网络化软件将是发展重点
13
4、软件的本质特性 构造性 演化性 其它特点:知识密集、逻辑产物
14
软件的构造性 软件 是 典型的知识产品 是 客观世界中 问题空间的具体描述 软件 是有结构的 构造性 是软件的本质特性
软件 是 典型的知识产品 是 客观世界中 问题空间的具体描述 软件 是有结构的 构造性 是软件的本质特性 传统的软件开发 是 个体作坊式的 只 解决功能问题 未 考虑结构问题 造成 软件 复杂度 高 维护难度 大
15
软件的演化性 软件 是 客观事物的一种反映 是 知识的提炼 知识的体现 知识的固化 客观世界 不断发展 不断发生变化
软件 是 客观事物的一种反映 是 知识的提炼 知识的体现 知识的固化 客观世界 不断发展 不断发生变化 软件系统 不可能一成不变 新需求、新技术不断出现 软件系统要不断升级
16
5、软件的发展趋势 软件运行平台正在 从 单机环境 发展到 网络环境 这 将导致软件在 反映对象 等 方面的重要发展 开发基础 关注内容
运行方式 提交形式 开销比重 等 方面的重要发展
17
软件反映对象的发展 从 以 个体计算过程 为反映对象 向 以 群体合作过程 为反映对象 的发展 人们的合作过程是丰富多样的、不断调整的
向 以 群体合作过程 为反映对象 的发展 例如: 电子商务 电子政务 电子服务 虚拟企业 …… 人们的合作过程是丰富多样的、不断调整的 因此,网络环境下的软件 更加 复杂、易变 构造性、演化性 更加突出
18
软件开发基础的发展 从 以单个软件开发为主 向 以集成式开发为主 的发展 例如:业务流程重组
从 以单个软件开发为主 向 以集成式开发为主 的发展 例如:业务流程重组 (BPR:Business Process Reengineering) 企业应用集成 (EAI:Enterprise Application Integration) 等 都需要开发组织具有 “继往开来” 的能力 在这样的背景下 符合标准规范的软件将更加受欢迎
19
软件关注重点的发展 从 以正面功能为核心 向 兼顾侧面约束 的发展 近期出现的
面向 侧面 的编程 (AOP: Aspect Oriented Programming) 特征交互(FI: Feature Interaction) 等 与经典的 问题分离(SOC: Separation Of Concerns ) 等相呼应 有效地处理 交叉(cross cutting)特征 例如: 安全性、可靠性、 同步性 等 这一发展 将使 软件工程师容易地开发、维护应用系统
20
软件运行方式的发展 从 大型机 集中方式 经 PC机的 分散方式 为主 向 “云”的集中模式 + 嵌入式的“端”分散模式 为主 发展
大型机 时代 计算机是少数人员的“计算”工具 软件运行在大型机上 PC机 时代 计算机是许多人的“信息处理”工具 PC 机上的软件是主流 “云”时代 计算资源有集中有分布,互相合作 软件运行在更多类型的计算资源上 提供服务
21
软件提交形式的发展 从 以 产品 为中心 向 以 服务 为中心 的发展 例如:应用服务提供商
(ASP: Application Service Provider) “Web服务”(Web Services) 等 皆体现了软件向服务发展的趋势 SAAS, Cloud Computing 这一发展 将使 软件在 方便使用、安全可靠 等方面 更加人性化
22
软件开销比重的发展 从 开发为主要开销 向 开发、演化开销并重 的发展 最近一段时间 延长软件生命 维护、演化软件 等问题
从 开发为主要开销 向 开发、演化开销并重 的发展 最近一段时间 延长软件生命 维护、演化软件 等问题 同时受到了 学术界与产业界的双重关注 诸如 ASP模式、自适应技术 等 将得到重视
23
二、软件开发 1、软件开发特点 2、软件开发模型 3、开发过程新进展 4、如何理解软件开发的困难
24
1、软件开发特点 软件开发是典型的知识密集型活动 复杂度高 开发周期长 可靠性保证难 随着 软件应用范围的快速扩大
随着 软件应用范围的快速扩大 以及软件运行平台从单机向网络的转变 软件的 规模 越来越大 复杂度 越来越高 软件开发的 高、 长、 难 愈益突出
25
软件开发目标:好、快、省 最终用户认为“好” 编程人员开发“快” 开发运行成本“省” 怎么叫“好”?正确、健壮、快速、安全、……
怎么才能好? 编程人员开发“快” “好”前提下的“快”,二者是一对对立体 怎么才能快? 复用? 开发运行成本“省” 时间成本、人力成本、硬件资源成本、能耗、……
26
2、软件开发模型 瀑布模型 (waterfall model) 螺旋模型 (spiral model)
喷泉模型 (fountain model) 演化模型 (evolutionary model) 各自特点回顾:画图说明!
27
3、开发方法进展 RUP 敏捷开发方法(XP) 基于构件的软件开发 基于侧面的软件开发 测试驱动的软件开发 用例驱动的软件开发
从 CMM 到 CMMI 基于构件的软件开发 基于侧面的软件开发 测试驱动的软件开发 用例驱动的软件开发
30
3.2 计算机科学与技术 3.2.1 艾级高性能计算机技术 针对普惠、绿色、两化融合的战略需求,研究高效易用的高性能计算机(尤其是数据中心计算机)的新原理和核心技术,并研制原理样机。支持科学工程计算与互联网服务(云计算服务)两类应用负载,科学工程计算性能达到艾级(即每秒10**18次运算),系统功耗控制在10 MW之内,系统软件复杂度控制在1000万行源码,原理样机实际速度达到每秒百万亿次(1014次)运算。 3.2.2 面向网络计算的软件方法与技术 针对新型网络化基础平台、新型泛在化与网络化应用模式,以及大规模和融合化的应用系统对软件方法与技术,研究软件模型、编程语言、系统软件、使用模式、开发方法、支撑工具等,实现核心模型基本属性的高可信与适应性、使用模式的服务化与自然化、基础方法的主体化与协同化、开发模型的自治性与成长式、开发方式的复用化与自动化,建立一套新型的面向网络计算的软件方法与技术体系,发展面向网络的中文信息处理和中文数据资源建设技术。 3.2.3 未来互联网与安全 研究:(1)可信可管可扩展的泛在未来网络原理、协议、体系结构;(2)试验平台、基准服务、测试数据,用于研究和检验功能、质量、安全隐私保障、能耗指标;(3)能够为数亿用户服务的统一的通用计算账号,独立于任何客户端设备、任何网络、任何资源、任何地点、任何厂商;(4)支持上亿用户,平均用户实际上网速度超过100 Mbps;(5)发展智能网络与语义网络技术,提升网络服务的效率与易用性。
31
不同方法的量化评估困难 1)实验数据获取困难 “测试”到“代码分析”:获取数据相对容易 2)涉及人的因素太多 评估的客观性(尤其是开发过程)
1)实验数据获取困难 “测试”到“代码分析”:获取数据相对容易 “过程”、“设计”与“需求获取”:量化难 2)涉及人的因素太多 评估的客观性(尤其是开发过程) 3)应用领域过于广泛 不同的方法适用于不同的领域(对比困难) 4)软件开发 的特殊性 软件开发 相当于 传统行业(例如 制造) 的设计?
32
4、如何理解软件开发的困难 软件开发就象…… 写小说? 生产PC?搭积木? 演节目? 拍电影/电视?!
33
拍电影 开发软件 分析:需求、用户 设计实现:结构、编码 测试:减少缺陷 前期:剧本创作、投资 拍摄:场地、演员、道具 后期:剪接、音效
其他共性:拷贝、版本、版权;美国、印度 不同:维护、交互 工程???
34
三、网络环境带来的影响 网络环境的特点: 共享性 开放性 并发性 可伸缩性 容错性 透明性
35
(1) 共享性 一旦授权,可以访问环境中的任何资源: 硬件、软件、数据 资源管理器控制资源的访问 提供命名机制 并 控制并发访问 使得:
资源管理器控制资源的访问 提供命名机制 并 控制并发访问 使得: 不同组织之间的软件可以灵活的交互 SOA
36
(2) 开放性 环境扩展与改进的需要 导致: 软件开发社区 社区开发方法 开放源代码 开源软件的开发
37
(3) 可伸缩性 利用网络环境可以: 为更多的用户服务 响应更快 通常通过增加 更多/更快的处理机 更可靠、更完善的服务实现 典型例子:
通常通过增加 更多/更快的处理机 更可靠、更完善的服务实现 典型例子: GOOGLE:4-5 万台 PC QQ:上万台 PC
38
(4) 容错性 硬件、软件、网络发生错误的不可避免性 网络环境必须维护可用性 容错的实现途径: 恢复(recovery)
冗余(redundancy) “911”的启示
39
(5) 海量数据 大量 页面 大量 代码 大量 业务数据 大量 视频 大量 …… 推动了: 搜索、挖掘、收集等技术的发展 以量促质!
40
面临的挑战性问题: 通信问题 异构问题 定位问题 可靠性问题 安全问题 管理问题 维护问题 …… 质量? 可信? 云!!!
41
总结:硬件环境、基础软件、应用软件与用户(环境)
…… Application 硬件环境
42
问 题 软件作为逻辑制品的劣势与优势是什么? 从单机环境到网络环境,软件发生了什么变化? 网络环境出现后,软件开发发生了什么变化?
Similar presentations