1、软件无处不在软件无处不在软件的定义软件=程序+数据+文档程序:计算机可以接受的一系列指令,运行时可以提供所要求的功能和性能。数据:使得程序能够适当地操作信息的数据结构。文档:描述程序的研制过程、方法和使用的图文资料。数据软件的本质特性一架客机由数百万个单独的部件组成,需要上千一架客机由数百万个单独的部件组成,需要上千人组装,但通常都能够按时按预算交付使用。人组装,但通常都能够按时按预算交付使用。微软于微软于1989年年11月发布的月发布的Word最初版本,花费了最初版本,花费了55 人人 年年,大 约 有大 约 有 249,000行源代码行源代码,却晚了,却晚了4年交付使用。年交付使用。开发软
2、件与建造客开发软件与建造客机机 有什么本质的区有什么本质的区别别软件的本质特软件的本质特性性软件的本质特性Fred Brooks是北卡罗莱纳大学的计算机科学教授,曾担任IBM OS360系统的项目经理,在计算机体系 结构、操作系统和软件工程方面做出了里程碑式的 贡献,于1999年荣获计算机领域最具声誉的图灵奖。软件的本质特性:复杂性Linux内核有630个函数,存在1814个函数调用。注:图中将函数表示为节点,调用关系表示为边。vsprintfis_digitva_argstrlennumberskip_atoiprintk函数 vsprintf 向控制台输出字符、数字和字符串,它调用了 is
3、_digit、strlen、number 等多个函数,函数在动态执行过程中呈现出更为复杂的状态。软件的本质特性:复杂性Google搜索引擎建立在遍布全球30多个站点、超过100万台服务器 的云计算设施上。Amazon拥有28个云计算中心,在 全球的服务器总量超过150万台。阿里云是国内最大的云计算平台,拥有近百万台服务器,分布在北 京、上海、深圳、香港和美国等。软件的本质特性:一致性 软件不能独立存在,需要依附于一定的环境(如硬件、网络以及其他软件)软件必须遵从人为的惯例并适应已有的技术和系统 软件需要随接口不同而改变,随时间推移而变化,而这些变化是不同人设计的结果发送请求用户请求转发请求返回
4、数据返回数据回复消息辅助服务器微信服务器抢票主服务器其他系统软件的本质特性:可变性20112014 2011.1.21,微信1.0发布(文字短信、QQ好友、头像)2011.2,支持多人会话 2011.3,增加图片功能 2011.5.10,微信2.0发布(语音对讲、QQ邮箱提醒)2011.8,微信2.5发布(查看附近的人、语音记事本)2011.10.1,微信3.0发布(摇一摇、漂流瓶)2011.12,微信3.5发布(二维码扫描、自定义表情)2012.4.19,微信4.0发布(朋友圈、开放API、地理位置)2012.7.19,微信4.2发布(视频、网页版、朋友圈回复)2012.8.18,微信公众平
5、台开放 2012.9.25,微信4.3发布(摇一摇传图、解绑、扫一扫)20122013 2013.1.21,微信4.5发布(语音聊天室、摇一摇搜歌、语音提醒、位置导航)2013.8.5,微信5.0发布(折叠公众账号、游戏中心、新版扫一扫、微信支付)2014.1.26,微信5.2发布(聊天记录搜索、银行卡新 增服务、图片墙、提醒)2014.5.8,微信5.3发布(面对面建群、收藏内容添 加标签、外文翻译)2014.8.14,微信5.4发布2010.11.20微信正式立项软件的本质特性:可变性人们总是认为软件是容易修改的,但忽视了修改所带来的副作用不断的修改最终导致软件的退化,从而结束其生命周期修
6、改失效率实际曲线 理想曲线时间由于修改造成失效率的提高软件的本质特性:不可见性软件产品 软件是一种“看不见、摸不着”的逻辑实体,不具有空间的形体特征 开发人员可以直接看到程序代码,但是源代码并不是软件本身 软件是以机器代码的形式运行,但是开发人员无法看到源代码是如何执行的用户需求软件的本质特性:不可见性软件人员太像软件人员太像“皇帝的新衣皇帝的新衣”故事中的裁缝了。当我来检故事中的裁缝了。当我来检查软件开发工作时,所得到的回答好象对我说:我们正忙查软件开发工作时,所得到的回答好象对我说:我们正忙于编织这件带有魔法的织物。只要等会儿,你就会看到这于编织这件带有魔法的织物。只要等会儿,你就会看到这
7、件织物是及其美丽的。件织物是及其美丽的。但是我什么也看不到,什么也摸不但是我什么也看不到,什么也摸不到,也说不出任何一个有关的到,也说不出任何一个有关的 数字,没有任何办法得到一数字,没有任何办法得到一些信息说明事情确实进行得非常顺利,而且我已经知道许些信息说明事情确实进行得非常顺利,而且我已经知道许多人最终已经编织了一大堆昂贵的废物而离去,多人最终已经编织了一大堆昂贵的废物而离去,还有不少还有不少人最终什么也没有做出来人最终什么也没有做出来。软件的本质特性:不可见性 软件所具有的复杂性、一致性、可变性、不可见性等特性,使得软件开发软件所具有的复杂性、一致性、可变性、不可见性等特性,使得软件开发 过程变得难以控制,开发团队如同在焦油坑中挣扎的巨兽。过程变得难以控制,开发团队如同在焦油坑中挣扎的巨兽。