软件工程思想-网络安全焦点自由的信息安全、黑

上传人:ldj****22 文档编号:45680160 上传时间:2018-06-18 格式:PDF 页数:98 大小:1.86MB
返回 下载 相关 举报
软件工程思想-网络安全焦点自由的信息安全、黑_第1页
第1页 / 共98页
软件工程思想-网络安全焦点自由的信息安全、黑_第2页
第2页 / 共98页
软件工程思想-网络安全焦点自由的信息安全、黑_第3页
第3页 / 共98页
软件工程思想-网络安全焦点自由的信息安全、黑_第4页
第4页 / 共98页
软件工程思想-网络安全焦点自由的信息安全、黑_第5页
第5页 / 共98页
点击查看更多>>
资源描述

《软件工程思想-网络安全焦点自由的信息安全、黑》由会员分享,可在线阅读,更多相关《软件工程思想-网络安全焦点自由的信息安全、黑(98页珍藏版)》请在金锄头文库上搜索。

1、 软件工程思想软件工程思想 林锐 序序 软件工程思想讲述“软件开发”和“做程序员”的道理,视野独特, 构思新颖,内容风趣,不落窠臼,令人耳目一新。堪称难得,以至回味无穷。 作者从事了八年的软件开发工作, 在他的博士学位论文完成之际写下了这 本“心之所感” 。虽然它探讨的是软件工程最常见的内容,但他将亲身所历的 感悟写成活 泼 生 动的 文 字 ,将 软 件 工程 的 很 多原 则 和 方法 融 于 笑谈 之 中 , 让 人看得轻松,时有共鸣。尽管很薄,然其内涵不逊于厚近千页的有关教科书。 每次回浙大我都要和林锐相聚,谈学术、论社会,直面人生, “位卑未敢 忘忧国” ,每每至凌晨。前不久我在某大

2、学计算机系作讲座,最后冒昧谈了几 句题外话,其中之一是“学问与明理” 。古人云: “读书明理” ,意即读书要明 白做人的道 理 。 我以 为 其 中的 重 要 内涵 , 是 要有 积 极 的人 生 观 ,以 贡 献 社 会 为己任。这 也 是 我们 的 共 识。 林 锐 曾立 誓 做 一名 “ 真 实、 正 直 、优 秀 的 科 技 人员” 。他在自己困难的时候依然资助数名贫困中学生和大学生;常常躬身拾 捡被乱扔于地的废纸、塑料袋,以示后生。这都会使很多的学人汗颜有加。 简言之,林锐对软件工程实践的积极思考、轻快而不失深邃的文笔及其言 行,都是出色之处。 正由于此,而不仅因为是同行,我才不惭浅

3、陋,接受他的要求,荣幸地成 为本书的第一位读者,并在本来应是名人大家留文的地方谈林说森。 董军,2000 年 2 月于 朝夕室 前前 言言 在 60 年代计算机发展初期,程序设计是少数聪明人干的事。他们的智力与技能超群, 编写的程序既能控制弱智的计算机,又能让别人看不懂、不会用。那个时期编程就跟捏泥巴 一样随心所欲, 于是他们很过分地把程序的集合称为软件, 以便自己开心或伤心时再把程序 捏个面目全非。人们就在这种美滋滋的感觉下热情地编程,结果产生了一堆问题:程序质量 低下,错误频出,进度延误,费用剧增。这些问题导致了“软件危机” 。 在 1968 年,一群程序员、计算机科学家与工业界人士聚集一

4、起共商对策。通过借鉴传 统工业的成功做法,他们主张通过工程化的方法开发软件来解决软件危机,并冠以“软件工 程”这一术语。三十年余年来,尽管软件的一些毛病如人类的感冒一样无法根治,但软件的 发展速度超过了任何传统工业,期间并未出现真真的软件危机。这的确是前人的先见之明。 如今软件工程成了一门学科。 软件工程主要讲述软件开发的道理,基本上是软件实践者的成功经验和失败教训的总 结。软件工程的观念、方法、策略和规范都是朴实无华的,平凡之人皆可领会,关键在于运 用。 我们不可以把软件工程方法看成是诸葛亮的锦囊妙计在出了问题后才打开看看, 而 应该事先掌握,预料将要出现的问题,控制每个实践环节,并防患于未

5、然。研究软件工程永 远做不到理论家那么潇洒:定理证明了,就完事。 我在读大学的十年里有八年从事软件开发,尽管编写了几十万行 C+/C 程序,也经历 了若干次小不点儿大的成功和失败,可老感觉只学了些皮毛,心里慌兮兮的。在博士研究生 毕业前的半年里, 我告戒自己不应该再稀里糊涂地在程序堆里滚爬下去了, 于是就面壁反省, 做了一阵子木讷的和尚。在“打坐”时,每有心得体会便记录下来,不知不觉凑成了八章经, 我就给此经书起名为软件工程思想 。 经典的软件工程书籍厚得象砖头,或让人望而却步,或让人看了心事重重。请宽恕我的 幼稚,我试图用三个问题:是什么、为什么、怎么办,来解释软件工程的道理。所以本书薄 得

6、象饺子皮用来包“思想”这种有味道的“馅” 。本书的八章经分别为: 第一章“软件工程基本观念” ; 第二章“程序员与程序经理” ; 第三章“项目计划与质量管理” ; 第四章“可行性分析与需求分析” ; 第五章“系统设计” ; 第六章“C+ 面向对象程序设计” ; 第七章“测试与改错” ; 第八章“维护与再生工程” 。 附录“大学十年”可以充当饭后的水果。 我偶尔也担心此书写得太肤浅,内容少得可怜。就象一只鸡在水里扑腾了几下,并不能 产生美味的鸡汤。 但是如果您化了几分钟时间翻阅本书的任意章节, 您马上就愿意再化几个 小时一口气读完全书,并且乐得直拍桌子: “好!很好!非常好! ” 您可以把这本科

7、技书当小说看, 但在看书时请不要吃东西, 免得喷了别人或者呛着自己。 如果您买了本书后觉得不值得,我一定赔偿您的损失。 致致 谢谢 本书并不属于我博士学位论文的研究范畴, 但却是我读博士学位三年来写的最有意思的 作品。 首先要感谢我的导师,浙江大学计算机辅助设计与图形学(CAD / 连接服务器 BOOL Disconnect(); / 与服务器断开连接 BOOL PublishData(); / 向服务器发布数据 BOOL QueryData(); / 向服务器查询数据 BOOL SubscribeData(); / 向服务器订阅数据 GROUPIP QueryGroupIP(); / 向服务

8、器查询组播地址 DWORD MulticastMessage(); / 发送组播消息 virtual void MessageResponse();/ 响应组播消息 ; 一、客户程序的“发布”协议 客户机向服务器发布的每个数据报均含有数据类型、工作组名称、数据名称、生命期和 数据长度的信息。报文格式如图 5.16 所示,数据结构见 DataPublish : struct DataPublish BYTE iDataType; / 2 个字节数据类型,宏定义为 DATA_PUBLISH char strGroupName16; / 16 个字节的工作组名字 char strDataName16

9、; / 16 个字节的数据名字 DWORD dwLifeTime; / 4 个字节的数据生命期,以秒为单位 DWORD dwLength; / 4 个字节的数据内容的长度 char *pchContent; / 数据内容 ; 2 字节 16 字节 16 字节 4 字节 4 字节 data type group name data name life time length content 图 5.16 用于发布的报文格式 二、客户程序的“订阅”协议 客户机向服务器订阅数据分两步实现: (1)先调用函数 QueryData 向服务器发送一个 DataQuery 格式的报文,用于查询要订阅的 数据

10、是否存在。 struct DataQuery BYTE iDataType; / 2 个字节数据类型,宏定义为 DATA_QUERY char strGroupName16; / 16 个字节的工作组名字 char strDataName16; / 16 个字节的数据名字 ; (2)服务器接收到查询时,按照 DataQuery 结构中的 strGroupName 和 strDataName 进行 搜索。如果该数据不存在,Server 向 Client 发送一个 FALSE 标志。如果该数据存在,服务器先向客户机发送一个 TRUE 标志,之后立即再向客户机发送该数据(DataPublish 格式

11、) 。 如果客户机得到 TRUE 标志的查询结果, 就调用函数 SubscribeData 来接收服务器发送过 来的数据。 三、客户程序的“组播”协议 客户机先调用函数 QueryGroupIP 向服务器发送一个 GroupAddress 格式的报文, 用于查 询组播地址。服务器返回相应的十进制点分式的 IP 地址。 struct GroupAddress BYTE iDataType; / 2 个字节数据类型,宏定义为 GROUP_ADDRESS char strGroupName16; / 16 个字节的工作组名字 ; 客户机调用函数 MulticastMessage 向指定的组(根据组播

12、地址)播放消息。组播的数据 报结构 DataMulticast 定义如下: struct DataMulticast DWORD dwContentType; / 组播的数据报类型,由用户定义 char *pchContent; / 组播的数据报内容,由用户定义 ; 如果客户机接收到组播的消息,将自动调用函数 MessageResponse 来响应该消息。 MessageResponse 是虚函数,它将根据 dwContentType 信息决定如何处理到来的组播消息, 具体功能由用户定义。 5.5.3.2 CNC 服务器的设计服务器的设计 一、数据结构 CNC 服务器的数据结构主要由三部分组成

13、: (1)一张用于管理组播地址的链表。组播地址由服务器动态生成,客户机可以向服务器查 询任意组的组播地址。 (2)一张用于管理线程指针的链表。服务器采用多线程并发处理技术,使客户机获得最快 的响应。 (3)每个组都有一张用于管理“发布订阅”的数据的 Hash 表。由于同一时刻,系统可 能存在多个生产者与消费者,数据的存入、取出速度成为服务器性能的重要指标。Hash 表 可以提供比链表更快的数据检索速度。Hash 表中的数据项结构见 DataElement : struct DataElement char strGroupName16; / 工作组的名称 char strDataName16;

14、 / 数据的名称 BYTE iStorageType; / 存储类型: STORAGE_FILE 或 STORAGE_MEMORY ColeDateTime TimeToDie; / 作废时刻 BOOL bLock; / 锁定标志: TRUE 或 FALSE DWORD dwLength; / 数据的长度 char *pchContent; / 数据内容 ; 存储类型(iStorageType)的用途:存储类型(iStorageType)的用途:把数据全部保存在内存中将非常消耗服务器的内存 资源,在很多情况下是没有必要的。为了提高内存的使用效率,服务器仅把生命期较短或者 长度较短的数据保存在内

15、存中 (即为 STORAGE_MEMORY 类型) , 而把生命期较长或者长度较长 的数据保存在文件中(即为 STORAGE_FILE 类型) 。 作废时刻(TimeToDie)的用途:作废时刻(TimeToDie)的用途:客户机发布的数据均指定了生命期,服务器在接收到 数据时即可计算出作废时刻。服务器将定期扫描 Hash 表,若发现有数据超出作废时刻(并 且没有被锁定) ,即可删除此数据。 锁定标志(bLock)的用途:锁定标志(bLock)的用途:很多客户机可能同时订阅某个数据,而该数据可能已超出 作废时刻即将被删除。为避免冲突,规定只要有客户机订阅数据,就用 iLock 标志来锁定此 数据,直到订阅完成后才消除锁定。 二、多线程并发技术 服务器有一个主线程和多个子线程。 主线程负责客户机的入连接请求, 然后创建一个子 线程来处理这个 TCP 连接。每个子线程按照 CNC API 的协议与客户机通讯。由于有多个子线 程共享服务器中的数据,多线程对共享资源的同步访问成为实现的难点。CNC 主要采用了关 键区、互斥对象等同步手段解决这个问题。 三、Winsock 的使用 CNC 1.0 运行于 Windows 9x/NT 系统下,底层的网络通讯程序用 Winsock 编写。Winsock 有两种工作方式:阻塞方式和非阻塞方式。阻塞方式的优点是编程简单,可靠性好。缺点是

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号