第一讲 软东赢体育件开发概述
东赢体育 1968年北大西洋公约组织的计算机科学家在联邦德国召 开会议,讨论软件危机问题,正式提出“软件工程”的概 念。
软件工程即采用工程的概念、原理、技术和方法来开发和 维护软件,将工程管理技术成功的经验和思想与具体软件 的开发过程、研究技术相结合,形成一整套适合于计算机 软件开发的方法、规范和技术。
① ② ③ ④ ⑤ ⑥ ⑦ 对软件开发成本和进度估计常常很不准确 用户对“已完成的”软件系统不满意的现象经常发生 软件产品的质量往往不可靠 软件常常是不可维护的 软件通常没有适当的文档资料 软件成本在计算机系统中所占比例逐年上升 软件开发生产效率提高的速度运远跟不上计算机应用 迅速普及深入的趋势。
软件的研制工作需要投入大量的、复杂的、高强度的脑力 劳动,它投入的成本是比较高的。 软件工作涉及到相当多的社会因素,如软件的开发和运行 涉及到机构设置,体制运作及管理方式等问题,甚至涉及 到人们的观念和心理,这些因素直接影响到项目的成败。
软件开发方法往往依赖于硬件技术,同时效仿硬件技术, 但是又远远落后于硬件技术。 比如至今为止,软件的开发尚未完全摆脱手工艺的方式, 但是硬件技术已经发展到超大规模集成电路阶段,而从 市场上买到的软件,本身是一个完整的系统,不能作为 构件再组成其他程序。
盖一个茅草屋,几个人几天就可以完成。但盖一个摩天 大楼,需要很多人协作,需要可行性分析、设计蓝图、 施工、验收等过程东赢体育,在投入后还要进行维护东赢体育。 建筑师设计大厦会考虑体系结构问题。建造房子时可以 使用预先做好的预制件,而不用一砖一瓦开始做。有时 因为某些原因,可以把用于别的房子的构件,对房子质 量等没有影响。
(2)软件生产与硬件不同,软件开发没有明显的制造过程, 不能完全工程化。 软件成为产品后,其制造只是简单的拷贝而已。 由于软件本身是非常复杂的--实际问题的复杂性、程序 逻辑结构的复杂性,软件执行时经过一个不连续的离散 状态(离散数学)。桥梁是一种类似于连续的系统,可 用微分方程描述。软件不能完全工程化。 容错的概念:设计桥梁要使它能承受可预见的考验。软 件设计的前提是我们并不能预见软件能遇到的任何情况, 在遇到意外时,能够将损失降到最小。
(1)系统软件 操作系统:管理东赢体育、分配、控制系统资源组程序的集合, 提供给用户可操作的基本应用界面。 编译程序:把高级语言转换为计算机可识别并执行的机 器语言 数据库管理系统:存储、管理数据,方便信息数据的使 用 网络通信管理程序:对网络间通信进行控制和管理 诊断程序:检查和判断计算机系统的故障 等等
世界上第一个编软件的人—阿达(Augusta Ada) 19世纪60年代为机械式计算机巴贝奇编写软件 软件是整个计算机系统中具体实现各种功能和操作的核心 部分。 软件=程序方法数据文档 程序是按事先设计的功能和性能要求,执行的指令序 列 方法是提供如何构造软件的技术 数据是使程序能正常操纵信息的数据结构 文档是与程序开发,维护和使用有关的图文材料
20世纪80年代末至今 •网络计算机 •并行计算 •人工神经网络 •专家系统 •强大的桌面系统 •多项开发技术
20世纪70年代中至80年代末 •消费者影响 •低成本硬件 •潜入”智能” •分布式系统
(2) 西部旅行—开发经验 对于一个完全不熟悉旅途和目的地情况的人,在途中会遇 到各种各样的问题,解决这些问题只能依赖别人的经验、 书本知识和自己的判断。如果这些问题解决得好,可能成 功到达目的地,否则就会走弯路,甚至离目的地越来越远, 最后由于时间或经费等原因不得不放弃履行。 如果这个人以前曾经成功地到达目的地,那么他以后再次 到西部旅行时就会熟悉沿途的情况,对可能遇到的风险就 会预先做好防范,成功到达目的地的机会就会大大增加。
(1)软件是一种逻辑实体东赢体育,而不是具体的物理实体,因此它 具有抽象性,质量问题不易暴露.
人们往往忽视软件质量问题及其造成的损失。 桥梁和操作系统的一个重要区别在于,土木工程界和软件 工程界对于崩溃这件事情的态度不一样。1940年Tacoma Narrows大桥坍塌 vs Windows死机 如果一个软件工程师像一般工程师对待桥梁坍塌那样严肃 地对待操作系统崩溃,软件工程的职业水准就会大大提高。
软件开发过程确定以促进开发小组内部合作的活动和组织 的程序,使得能交给客户一个性能优良的产品。 过程模型包括:说明执行活动的次序;说明需要交出什么 样的制品,以及什么时候交出;将活动和制品分配给开发 者;提供监控项目进程、评估产出和计划未来项目的准则; 迭代式和增量式开发 能力成熟度模型CMM(1-5级) ISO9000
由前节可以看出,在信息系统开发中许多关于项目失败、 超出期限和预算、解决方案错误、系统不可维护的例子, 几乎四分之三的软件项目由于上述原因中的一种或多种 而失败。 这些“基本的困难”确定了软件开发中的一个不变得事 实,这个不变事实简要地指明软件是作为一种创造性的
(3)软件不同于机械、电子设备,它不存在磨损和老化问题, 然而它存在退化问题,设计人员必须多次修改东赢体育。 桥梁维护仅限于粉刷、修复小裂缝、重铺路面。修改操作 系统三年修改50%的源代码,把操作系统从一种机器移植 到以一种完全不同的机器,是很自然的。 维护考虑经济问题。新旧技术选择。 只有坏的软件才需要维护? 软件维护成本和时间占整个软件成本和时间的50-60%, 有的甚至80%。
20世纪50年代初至60年代初 •自定义软件 •有限的分布 第二阶段 •面向批处理 20世纪60年代中至70年代末 •软件产品 •数据库 •实时 •多用户
软件的定义的发展 程序的集合:50-60年代 程序+文档:70年代,软件危机以后,认识到 文档的重要性 程序+文档+数据+方法:80年代以后,加强 软件生产的工程化、规范化
客户因素:客户的需要被误解或没有被完全捕捉;客户 需求变化过于频繁;客户没有准备为项目提交足够的资 源;客户不想与开发者合作;客户具有不现实的期望; 系统不再对客户有利。 开发组织:未雇佣最好的开发者;为现有的开发者未提 供继续培训和教育的机会;开发者之间进行信息交换和 交互不够;未通过消除障碍并努力激励开发者;未提供 一个令人鼓舞的工作环境;使个人目标和组织策略及目 标不一致;缺少团队工作;
bug的故事 0金额帐单的故事 美国战略防空司令部的导弹虚惊 Therac—25医用线性加速器致病人死亡 飞毛腿导弹击中沙特兵营
① ② ③ ④ ⑤ ⑥ ⑦ 用分阶段的生命周期计划严格管理 坚持进行阶段评审 实行严格的产品控制 采纳现代程序设计技术 结果应能清楚地审查 开发小组的人员应少而精 承认不断改进软件工程实践的必要性
开发人员需要一种语言来创建可视化系统模型,并与客 户和其他开发人员讨论。 目前通用的语言是UML和支持UML的一些CASE工具如: MagicDraw,Power Designer,Rational Rose
他们成就了我们
我们为他们创造价值