`
yzd
  • 浏览: 1817357 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

软件开发方法杂想

 
阅读更多
作者:fasiondog<br>来源:<a href="http://blog.csdn.net/kongdong/">http://blog.csdn.net/kongdong/</a><br>&lt;meta content="text/html; charset=utf-8" http-equiv="CONTENT-TYPE"&gt;
<title></title>&lt;meta content="OpenOffice.org 2.0  (Linux)" name="GENERATOR"&gt;
&lt;meta content="20060429;240300" name="CREATED"&gt;
&lt;meta content="20060502;505600" name="CHANGED"&gt;
&lt;style type="text/css"&gt;
&lt;!--
@page { size: 21cm 29.7cm; margin: 2cm }
P { margin-bottom: 0.21cm }
--&gt;
&lt;/style&gt;
<p style="margin-bottom: 0cm; color: rgb(0, 0, 255);">自年前写了《破冰》(<a href="http://blog.csdn.net/KongDong/archive/2006/01/19/584356.aspx">http://blog.csdn.net/KongDong/archive/2006/01/19/584356.aspx</a>)以来,很少人理解我所说的和我所困惑的是什么,只有自己寻找答案,当时主要的问题是:</p>
<p style="margin-bottom: 0cm; color: rgb(0, 0, 255);"><font>1</font>、基于“特性”设计的思路不可以完全抛弃,它不利于我们理解系统;</p>
<p style="margin-bottom: 0cm; color: rgb(0, 0, 255);"><font>2</font>、组件化需要实现技术上的突破,否则流程的改进没有方向和支撑,只有更多的困扰。而“过滤树”是破解组件化中大量<font>if else</font>的一种可能技术,当然出来性能问题需要实践才能解决。</p>
<p style="margin-bottom: 0cm; color: rgb(0, 0, 255);"><br></p>
<p style="margin-bottom: 0cm; color: rgb(0, 0, 255);">事有凑巧,就在我还想着“过滤树”究竟如何应用的时候,看到了一本书,里面介绍了“组合过滤器”,深感兴趣,便买回研究了一把,才发现自己所困惑和所想的正是<font>AOP</font>思想的萌芽。这本书介绍的是<font>AOP</font>(<font>Aspect-Oriented Programming</font>)技术,过滤器则是<font>AOP</font>实现的一个重要分支。<font>AOP</font>本身是一种编程技术,它起源于破解代码中缠绕和分散情况的目的,但是它所引入的“维度、分离、合成、系统编织”等观念,对于存粹的系统分层思想是极大的进步,也破除了当前方法和过程在我眼前凝聚的迷雾。<font>AOP</font>的思想已经在角落里偷偷发展了近<font>10</font>年,其基本思想目前正是囤积欲发的时刻,已经形成了不少关于<font>AOSD</font>(面向方面的软件开发方法)。利用<font>AOP</font>中的“维度、分离与合成”的观点,去看待当前系统设计、软件开发、测试、组件、可靠性等等,以及他们的整合,会有柳暗花明的感觉,也是真正理解当前方法和过程中问题的关键。也许,<font>AOP</font>作为一种编程技术,并非是革命性的进步,但它所引入的概念和“分层”思想一样,体现着人们理解、看待系统的基本原理。</p>
<p style="margin-bottom: 0cm;"><br></p>
<p style="margin-bottom: 0cm;">下面是近期学习和思考所得,由于时间的关系,寥寥数笔,无法成文尽述,后续有时间再梳理成文,暂先共享之:</p>
<p style="margin-bottom: 0cm;"><br></p>
<p style="margin-bottom: 0cm;"><font>1</font>、架构是基础,它承载了所有的需求,其重要性毋庸置疑;</p>
<p style="margin-bottom: 0cm;"><br></p>
<p style="margin-bottom: 0cm;"><font>2</font>、系统只有为需求的人创造价值才是有意义的,因此需要从不同利用相关人的“关注点”去理解系统究竟可以做什么;</p>
<p style="margin-bottom: 0cm;"><br></p>
<p style="margin-bottom: 0cm;"><font>3</font>、“关注点”有一个重要的特性——分离,这是理解系统的关键,也解释了以前基于特性设计的存在理由;</p>
<p style="margin-bottom: 0cm;"><br></p>
<p style="margin-bottom: 0cm;"><font>4</font>、“关注点”的分离,应该贯穿需求、分析、设计与实现的全过程,这是理解系统价值以及如何运作发挥作用的唯一途径;</p>
<p style="margin-bottom: 0cm;"><br></p>
<p style="margin-bottom: 0cm;"><font>5</font>、与“分离”相对应的概念是“合成”。分离和合成的概念可以这样理解:建筑师构造了基础的房屋结构,但建筑本身还包含其它许多方面,如电线系统、排给系统、电话线布线等等。现在假设建筑师将基础的结构画在了一张幻灯片上,然后复制这样一张幻灯片给电线布线设计师,电线布线设计师在复制的幻灯片上独立的完成了布线设计。同样,复制基础结构的蓝图给不同领域的设计人员们,最终我们将得到一系列的幻灯片。接着,放映第一张基础结构的幻灯片,然后将第二张叠加上去,接着是第三张,如此下去,知道最后一张幻灯片叠加到最顶端,现在,你看到了什么?</p>
<p style="margin-bottom: 0cm;"><br></p>
<p style="margin-bottom: 0cm;"><font>6</font>、在需求、分析、设计阶段很容易做到“分离”与“合成”。目前支持<font>UML2.0</font>的建模工具使用<font>XML</font>来描述和保存模型,即使工具本身无法很好的支持分离和合成,我们也可以轻易的编写扩展工具来实现其支持。</p>
<p style="margin-bottom: 0cm;"><br></p>
<p style="margin-bottom: 0cm;"><font>7</font>、开发的实现阶段是分离和合成的关键阶段,也是目前组件化的症结所在。</p>
<p style="margin-bottom: 0cm;"><br></p>
<p style="margin-bottom: 0cm;"><font>8</font>、实现阶段的合成技术,如果不能解决,会产生所谓的代码“缠绕(<font>tangle</font>)和分散(<font>scatter</font>)”,意味着新增一个功能,需要涉及修改众多的代码和模块。</p>
<p style="margin-bottom: 0cm;"><br></p>
<p style="margin-bottom: 0cm;"><font>9</font>、“合成”意味着能够容易的叠加不同的关注点(包含功能需求和非功能需求),其需要实现阶段的技术支持。虽然在我们当前的系统中,无法达到完美,但依然有很多技术可以借鉴。比如消息驱动,其本身具备一定的分离与合成特性。</p>
<p style="margin-bottom: 0cm;"><br></p>
<p style="margin-bottom: 0cm;"><font>10</font>、关注点保持分离解释了“特性”设计存在的合理性,虽然并不一定完美。</p>
<p style="margin-bottom: 0cm;"><br></p>
<p style="margin-bottom: 0cm;"><font>11</font>、保持关注点的全程分离也对系统模型的维护有较大的好处。当前基于项目形式的开发方式造成的最大的问题是文档无法检索和维护(因为当前公司基于项目的开发方式既不是模块分离,也不是关注点分离),而分离的思路给予了启迪。以前基于特性设计的最大优点,就是保持关注点的分离,它利于归档和检索,比如《<font>XXX</font>特性设计规格说明书》、《<font>YYY</font>特性说明书》。将每一个特性分离看成不同的部件(<font>Part</font>),那么所谓系统的描述,可以通过配置管理的概念,予以轻易的集成和检索,因为每一个都是独立的配置项,可以轻易的抽离并重新组装系统。另外一种基于系统结构即模块方式的文档开发,是从结构上保持了分离。分离是软件开发中文档编档的重要因素。</p>
<p style="margin-bottom: 0cm;"><br></p>
<p style="margin-bottom: 0cm;"><font>12</font>、分离的概念比分解要广阔的多,也许分解可以算是分离的一个特例。</p>
<p style="margin-bottom: 0cm;"><br></p>
<p style="margin-bottom: 0cm;"><font>13</font>、模块的分离也同样重要,只有系统文档的可理解性和架构的充分结合(可以理解为结构和关注点的分离)才是一个好的开发方法。</p>
<p style="margin-bottom: 0cm;"><br></p>
<p style="margin-bottom: 0cm;"><font>14</font>、分层的概念(含模块化、信息隐藏等)、关注点分离与合成的概念的结合将是系统与软件开发方法中最终要的基础和方向。</p>
&lt;meta content="text/html; charset=utf-8" http-equiv="CONTENT-TYPE"&gt;
<title></title>&lt;meta content="OpenOffice.org 2.0  (Linux)" name="GENERATOR"&gt;
&lt;meta content="20060429;240300" name="CREATED"&gt;
&lt;meta content="20060502;505600" name="CHANGED"&gt;
&lt;style type="text/css"&gt;
&lt;!--
@page { size: 21cm 29.7cm; margin: 2cm }
P { margin-bottom: 0.21cm }
--&gt;&lt;/style&gt;
分享到:
评论

相关推荐

    软件工程-理论与实践(许家珆)习题答案

    答:主要的软件开发方法有:结构化开发方法、Jackson(JSP、JSD)方法、原型化开发方 法、维也纳开发方法(VDM)和面向对象的开发方法。 6. 软件生命期各阶段的任务是什么? 答:软件生命期瀑布模型分为六个阶段: ...

    4412开发板学习笔记---Linux驱动的学习方法

    Linux内核中有上百个驱动,知识点多且杂,对于想学习驱动的同学来说,需要尽快掌握基础知识:如开发板的基本使用,硬件基础知识,开发环境的搭建,Linux常用工具,内核的编译以及烧写,Linux shell命令,C语言基础,...

    3软件工程课程设计.doc

    参考文献 21 设计内容 1.1开发背景 随着计算机及网络技术的飞速发展,Internet/Intranet应用在全球范围内日益普及 ,当今社会正快速向信息化社会前进,信息自动化的作用也越来越大,从而使我们从繁 杂的事务中解放...

    彩艺印刷管理软件

    印刷行业有着“订单数量多、交货期短”的行业特点,如何管理好生产就成为众多印刷企业需面对的难题,信华电脑科技公司针对印刷行业成功开发出一套专业的印刷管理软件——《彩艺印刷管理软件》,帮助印刷企业走上发展...

    土体表面干缩裂隙的形态参数定量分析方法 (2014年)

    为了解土体干缩裂隙演化规律,基于MATLAB软件开发了裂隙图像分析系统,通过对裂隙图像进行二值化、桥接去杂、骨架提取等操作,进而提取出裂隙率、裂隙长度、平均宽度、隙宽分布率、分维等裂隙形态参数,实现了平面...

    杂散光可视化分析模型在高功率激光装置中的辅助设计和应用

    针对高功率激光装置,基于自研鬼像追迹软件(GA)的鬼像分析结果,采用辅助设计方法在装置的三维结构模型中形象、直观地显示鬼像的分布情况,精确计算出鬼像光束传输过程中与装置的干涉情况;并对典型未知的鬼像危害...

    JAVA课程设计-连连看

    面向对象的开发方法是当今世界最流行的开发方法,它不仅具有更贴近自然的语义,而且有利于软件的维护和继承。 学会Java程序开发的环境搭建与配置,并在实际运用中学习和掌握Java程序开发的全过程。进一步熟悉掌握...

    XSCHMBuilder2.62

    本软件能一次将大批量、杂散的word、txt、图片、html文档编译到一个chm文件中,如果您在开发中用到chm,此软件也可以生成开发中用到的ID头文件。您所需做的工作就是创建工程、修改源目录、目标目录,然后执行...

    如何编写Makefile

    杂的功能操作,因为makefile 就像一个Shell 脚本一样,其中也可以执行操作系统的命令。 makefile 带来的好处就是——“自动化编译”,一旦写好,只需要一个make 命令,整个工程完全自动编译,极大的提高了软件 开发...

    如何编写mkefile

    杂的功能操作,因为makefile 就像一个Shell 脚本一样,其中也可以执行操作系统的命令。 makefile 带来的好处就是——“自动化编译”,一旦写好,只需要一个make 命令,整个工程完全自动编译,极大的提高了软件 开发...

    C#播放铃声最简单实现方法

    因为只是做一个软件的闹铃播放效果,到网上找的时候试了几种,哎,都失败了,而且代码挺杂的,最终一句搞定了: 代码如下:// 窗体加载事件 private void TimeCue_Load(object sender, EventArgs e) { //播放铃声...

    基于单片机的便携式粮食水分测试仪的研究

    进而以AT89S52单片机为核心,同轴圆柱型电容器为介电特性检测装置,DS18B20为温度检测元件,应变式传感器为质量检测元件,以Keil C51 为开发软件,设计了 种便携式粮食水分检测仪,并对仪器检测精度进行了检验。

    AOLserver4.5源码+Windows下可执行程序+tcl8.5.7+HTTP Cookie Library

    而使用 Tcl 来写 Web 程序最佳的方法就是在 AOL Server 上面开发,所以便决定先写篇文章来介绍一下 AOL Server,然後再来进行 Tcllib 的使用心得。 这正是这篇文章诞生的缘由!不过我正在烦恼下一篇文章究竟应该先...

    完成Java面向对象程序设计实验课的心得体会.doc

    通过对Java的了解,我发现它确实有很多方便之处,它集抽象性、封装 性、继承性和多态性于一体,实现了代码重用和代码扩充,提高了软件开发的效率。对 于我们这个专业来说学好Java语言是很重要的,所以在实验的过程中...

    基于单片机设计.doc

    熟练利用KELL软件进行软件仿真编程及程序下载的方法; 4. 掌握可调电源设计、AD转换电路的原理及方法,显示电路和AC到DC硬件电路的设计 方法。 3. 设计任务及要求 设计可调电源,通过单片机可以知道电源的电压值。...

    c语言编写单片机技巧

    此外,C语言程序具有完善的模块程序结构,从而为软件开发中采用模块化程序设计方法提供了有力的保障。因此,使用C语言进行程序设计已成为软件开发的一个主流。用C语言来编写目标系统软件,会大大缩短开发周期,且...

    Python-数据库游标对象详解

    常用数据库:MySQL、Oracle、SQLite  但是包嵌入到Python中...  比如Python开发的MySQLdb遵从DB-API, 实现了connect(), connect.cursor()等方法…其他的db类也实现了同样的方法,故可以很容易移植。  DB-API规范

Global site tag (gtag.js) - Google Analytics