《电子技术应用》
您所在的位置:首页 > 通信与网络 > 业界动态 > 基于结构化方法和螺旋模型实施Web工程的探究

基于结构化方法和螺旋模型实施Web工程的探究

2009-08-25
作者:董寒松1,李 铮2,尤 枫3

    摘  要: 介绍了Web工程及其与传统软件工程的显著区别,讨论了一种具体的、切实可行的实施Web工程的方法。该方法借鉴了传统软件工程的某些思想,对基于Web的应用系统采用结构化的方法进行分析和设计,在整个开发过程中应用螺旋模型,同时融入Web应用的开发特性,最后给出了一个开发示例。
    关键词: Web工程  软件工程  结构化方法  螺旋模型  Web应用

 

    随着网络技术和网络编程技术的不断发展,基于Web方式、以电子商务为典型代表的应用系统越来越普及。尤其在现代企业应用中,各种信息系统在原来的基础上,由基于C/S方式向基于B/S方式转换,逐渐过渡为基于Web的MIS、ERP、EIP乃至CIM的企业业务IT系统,从而使企业管理不再局限于企业内部,而是通过Internet扩展到遍布全球的客户、供应商、合作伙伴等各个环节。
    从近些年来的企业IT进程可以明显看到,投入实际使用的Web应用系统不仅在数量上不断增加,系统规模和复杂程度也在不断提高,使得基于Web的应用越来越显得难以开发、管理和维护。因此,软件开发人员迫切需要一套适用于Web应用系统的方法论来对相应的开发、发布和评估进行指导,研究这一方法论就成为目前备受关注的一个课题。本文将就这一问题展开讨论,提出一种结合传统软件开发方法和模型,同时针对基于Web的特性加以补充完善的新的Web应用系统开发方法,并以一个实际的示例加以验证说明。
1  Web工程简介
    Web工程是用系统的、严密的、可以测量的方法来开发、实施和维护基于Web的应用或基于Web的软件的工程应用[1]。毫无疑问,Web工程包含了程序设计和软件开发,这样就不可避免地会采用某些软件工程的思想和方法,因此,Web工程和软件工程是紧密联系的。但是,Web应用系统又具有基于Web的固有特性,这些特性是传统应用软件所不具备的。所以基于Web的系统开发与传统软件开发不同,需要符合适应于开发要求的另一套独立体系下的规范。因此,Web工程又是不同于软件工程的。
    要准确理解Web工程概念,必须弄清楚两个问题。
    (1)基于Web的应用系统的开发与传统软件开发有着显著不同的特征。比较直观的一些包括:
    ①由于Web应用必定是基于浏览器的“瘦客户”解决方案,客户端更多的是负责信息的展示和布局,应用逻辑和数据都放在服务器端,所以必须是特定的多层体系结构。
    ②Web应用的开发需要更多的协调工作。原因是:开发团队的成员构成更加复杂;由于页面外观的滞后性及Web方式下对某些功能实现的局限,使得客户的需求具有更大的不确定性;大部分基于Web的应用系统都必须在相对更短的时间内完成等等。
    ③Web应用具有不确定的多样用户形式。这里的用户形式不仅指经由Intranet、Internet连接起来的、具有不同技术和能力的多样用户群体,也指在不同的客户终端上因分辨率、浏览器等的不同而造成的情况各异的多样浏览平台。
    ④Web应用的开发要求工程、科学和艺术在更广泛的范围内结合。基于Web的系统更加关注用户的视觉感受。实践表明,具有美感的页面设计是用户衡量整个Web应用系统的一个重要指标,要比传统软件的UI设计在整个系统中占有更重要的地位。因此,Web应用更强调色彩搭配、运用Flash、Midi等多媒体手段丰富用户界面。
    (2)必须认识到基于Web的应用系统和Web站点之间的区别[2]。因为Web工程是用来指导开发和管理Web应用的,而绝非Web站点。Web站点主要为来访的用户提供所需的信息和资料,它的信息流基本是单向的,即从站点到用户;用户根据查找信息的需要来浏览Web页面,页面的访问顺序是不确定的;Web页面大多是静态的HTML文档,且附有大量丰富的图片和动画。而基于Web的应用系统则更侧重于完成某项功能,不以提供信息为惟一目标;由于后台数据库与动态页面相结合提供了用户信息的采集能力,从而使得信息流成为双向的,且页面访问顺序确定。当然,为了达到丰富应用系统人机界面和信息量的目的,在某些实际应用中,Web站点往往会充当Web应用的门户。因此,根据具体需求,也可以在广义上将相关Web站点作为整个应用系统的一部分来理解。
2  利用结构化方法和螺旋模型实施Web工程
2.1 使用结构化分析和设计方法

    Web工程的实施不适合使用面向对象的软件开发方法进行系统分析和设计。正如前文所提到的,一个Web应用系统的开发会遇到许多不可避免的不确定因素,这就很难从客户真实系统中导出对象体系。如果强行按照面向对象的方法对系统进行分析设计,势必要考虑更多内容,而与实际需求不一致时便会导致过度设计甚至重新设计[3],并且,一旦在实施中发现不合理设计,修正的代价就可能极大。同时,由于占有相当比重Web页面开发的Web应用包含大量基于文件的Web资源,缺乏抽象概念,缺乏继承和组装这样的重用机制,这使得面向对象的开发方法显得力不从心。
    另一方面,Web应用强调结构清晰简洁、符合用户思维的功能导航,这与具有“自顶向下、逐步求精”分解方法的结构化分析设计思想相吻合。作为软件工程中技术最为成熟、应用最广且非常有效的一种软件开发方法,结构化方法的理论概念和实践方法已广为人知,并取得广泛的成功。因而使用结构化的方法分析和设计Web应用系统,可以更多地借鉴传统软件系统的成功开发经验,这更利于构成复杂的开发团队中成员之间的沟通,可以更方便地实现下文中将要提到的螺旋模型,从而成功实施Web工程。
    结构化方法是将一个复杂的大型系统自顶向下地分解成一个个简单的系统,用系统工程的思想和工程化的模式对系统进行功能分解和结构设计,从内部功能上模拟客观世界[4]。结构化方法包括结构化分析(SA)方法、结构化设计(SD)方法、结构化编程(SP)方法。根据分析方法的不同,又可分为面向数据流的和面向数据结构的两大类,包括Jackson方法、Warnier方法等多种软件开发方法。本文所探讨的是开发步骤明确、适用范围更广的面向数据流的结构化软件开发方法。
    面向数据流的结构化软件开发方法使用由简单易读的图形符号构成的数据流图表达,根据系统内部的数据传递和变换关系,自顶向下逐层分解,描绘出满足功能要求的系统逻辑模型。设计阶段依据模块独立性准则、软件结构准则(软件结构包括变换型和事务型两种典型类型),将数据流图转换为应用系统的体系结构,进而建立系统的物理模型,实现系统的概要设计。
    这种结构化方法采用先全局后局部、先整体后细节、先抽象后具体逐步求精的设计开发过程,使得整个系统具有清晰的层次结构,符合人类解决复杂问题的普遍规律,而且所需要的时间相对较少,可以显著提高开发效率。
    当然,使用结构化方法绝非是要全部摒弃面向对象的思想和方法。事实上,这里一直强调的是使用结构化方法中的结构化分析和结构化设计,而在编码实现阶段,完全可以借助面向对象的可视化编程工具(如.NET),根据实际需要准确地抽取底层级别的对象并设计基类,从而利用继承、重载等机制高质量地重用代码,简化结构,降低维护难度。这一点在应用螺旋模型的系统开发过程中,不断循环调整结构、优化代码以实现收敛逼近最优结果时显得尤为重要。
2.2 应用螺旋模型
    长期以来,随着大量传统软件系统的开发实践和经验积累,多种软件工程方法被总结出来,专家和工程人员也已经从不同的角度、用不同的方法对它们进行了模型化,从而将相关方法从实践上升到理论。而基于Web的应用系统,同样作为一种软件系统,也可以借鉴应用这些模型,从中吸取有益的经验,以便更有效、更便捷地实施Web工程。螺旋模型正是这样一种同时适用于Web工程的软件开发模式。
    由于软件不同于一般的工业产品,软件开发人员和用户在专业知识和应用领域理解上不可避免地存在差距,用户在开发早期很难清楚地提供系统的完整需求,开发人员也很难在系统开发的需求分析阶段完全正确地领会和定义用户所提出的各项需求。提出开发要求的用户通常只能大概描述软件的目标和功能,开发者根据自己对用户需求的理解做出的软件往往与用户心目中的要求相去甚远。抑或是只有当软件成品摆放在用户面前时,用户才能更加确认需求,进而激发新的需求甚至更改需求。这样的问题在更加注重感官感受的Web工程中出现的可能性更大。这就很容易造成需要付出高昂代价的后期需求变动,甚至导致项目失败。
    应用螺旋模型这一基于原型化开发的进化模型则可以很有效地解决这种问题。顾名思义,这种开发模型是自内向外以螺旋状的形式进化发展,每一个周期都要经过计划、分析、设计实现、用户反馈等环节,每一次循环的结果都生成一个增强的软件版本[5],如图1所示。

 


    从图中可以看到,这种模型不是等一个开发阶段的工作完成以后才开始下一个阶段的工作,而是把传统的分阶段的软件开发方法融入到每一次螺旋循环当中,生成用于验证预定用户需求和可能的设计方案的中间系统原型,并通过用户对原型的意见反馈探索和揭示新的需求。一旦获得新的信息,就对原型进行调整,除了进一步求精外,还追加实现某些新的、已明确的用户需求,从而进入新一轮的螺旋循环,逐步逼近最优结果。需要注意的是,这种循环分析设计活动不仅针对整个应用系统的开发,而且可以同时在不同的模块开发中并行进行。
    应用螺旋模型的开发方法通过与用户共同对系统原型的反复交互改进,在逐步的精确和完善过程中最终完成对系统的开发。其优越性在于不要求应用系统的需求定义必须在系统设计与实现之前完成,而是把这种定义贯穿在整个开发过程中,通过不断交互修改逐步完成对需求的精确定义。这一点也符合了人类“实践-认识-再实践-再认识”的一般认识规律。需要强调的一点是,虽然螺旋模型认为需求分析是个动态的定义过程,但对初始的需求分析仍然需要非常重视。只有做好了初始的需求分析,才能构造好初始的原型,也才能以此为基础启发各方人员对需求进行动态的、更精确定义,为开发成功打好基础。
    应用螺旋模型这种用户驱动的开发模式,满足了Web工程对以用户为中心的开发要求,使用户最大程度地参与到软件的开发过程中并起主导作用,可以在中间系统原型的基础上进一步清楚地阐述自己的微观需求,这样也使开发者可以真正了解用户的需求,并能对用户的动态需求做出及时有效的处理,使开发出来的系统更易于被用户接受,有利于缩短开发周期,降低开发风险。
    考虑到Web工程更强调系统工程性和设计艺术性的结合与平衡,在进行系统开发时,除了横向上应用螺旋模型并行开发各功能模块之外,还应该在纵向上并行开发网页设计和功能实现的工作。
    网页设计和功能实现的并行开发必须应用在每一个功能模块的每一次原型构建中,这是因为在反馈原型或验收项目的初期,用户会更加强调可用功能的表示。实践证明,尽早地在功能实现基础上结合艺术设计的成分并调以恰当比例,能够增加用户对整个系统开发的信心,往往为争取到用户的合作达到事半功倍的效果。同时,网页设计师也可以更早地从用户那里得到更多更明确的关于网页结构、色彩搭配的反馈意见,从而为艺术设计这一很难限定工期的工作争取到更多有效时间。
3  一个实施Web工程的实例
    这里将以一个简化了的、笔者实际参与的B/S结构车辆销售管理系统开发流程为例,简要说明并验证本文所提出的Web工程实施方法。
3.1 第一层螺旋开发
    由于某些客观局限性,用户并没有丰富的管理系统软件使用经验,对于未来将要使用的车辆销售管理系统的轮廓十分模糊,只强调最终报表的生成与使用。在开发人员的帮助下,用户的需求被较明晰地整理为图2所示的结构化的功能模块。
    经过多次讨论,用户对现有功能模块的划分最为认可,认为符合其业务内容及管理,进而明确了每一个功能模块的业务规则和详细内容。
    在确定了需求并完成后台数据库结构设计之后,就可以对整个系统按照螺旋模型进行开发。考虑到客户、车辆、销售、维修四个信息管理模块中有一些在功能实现上的相似,首先对车辆信息管理模块及其相关报表生成进行代表性的开发,包括从设计到编码到测试再到与网页设计的整合,最终完成了整个系统的第一个原型。
    在数据库中填充一些起辅助作用的测试数据,第一个可以运行的系统原型就交付用户验收测试。由于第一层螺旋开发的原型只涉及有限功能模块,而对相关具体业务规则的初始需求分析又较为充分,所以用户对该部分功能的实现和生成的报表也较为满意,仅仅对车辆信息的显示和更新操作页面提出了一些异议,包括页面结构和用户操作上的一些问题。最终修正为如图3所示的分页显示列表,使得所有信息录入后,操作集中在同一个页面内完成。至此,随着根据用户的反馈意见对第一个原型的确定,第一层螺旋开发也就告一段落了。

 


3.2 后续螺旋开发
    基于第一个系统原型,后续开发的目的性也就更为明确了。同时,正如前文提到的,由于其余某些模块与车辆信息管理模块在功能实现方法上有相似之处,这就为后来的开发模式和代码结构都提供了可复用的样本。
    一个具有代表性的例子就是实现通过条件查询得到如图3所示的信息显示列表页面的代码复用。根据需求,客户信息、车辆信息、销售信息和维修信息都需要有分页查询和对某一条具体信息进行更新等操作的功能要求,其页面结构和操作步骤基本相同。这样,就可以借助.NET的编码机制,由图3所在页面的后台代码为基础,设计并实现出这样一个信息查询页面的基类。上述四种信息的查询页面的后台代码均由该页面基类派生,而又不影响页面显示信息的调整,代码量大大减少,从而开发速度和可维护性也就大大提高。
    在第一个系统原型的帮助下,所有模块功能的第二个系统原型得以迅速实现。此时,用户已经可以较为完整地了解整个管理系统了。从宏观的角度上,用户对系统需求有了更明确的认识和要求,从最初的只强调各类销售报表,转变为侧重于整个业务的进销存管理,例如提出将库存信息从车辆信息中独立出来,增加并无报表需求的进价信息管理模块等。
    对追加的需求与用户反复协商讨论并最终明确之后,在第二个系统原型基础上改进的风险分析表明:由于之前对系统很好地进行了结构化分析,并对数据库进行了满足第三范式的设计,使得已有的数据库结构无需做大的改变,仅仅添加一张基本表和若干视图即可。它不会造成高代价的后期重构。所以在新一轮的螺旋开发中仍然可以满足用户的需求,最后顺利地在原定计划期限内高质量地完成了整个项目,交付用户使用并获得认可。
4  总  结
    本文针对目前Web工程的研究和发展现状,提出了一种切实可行的实施方法。该方法结合了现有成熟的软件开发方法和模型,并融入Web应用的开发特点,能够在很大程度上减少基于Web的应用系统的开发风险,同时开发效率更高,系统的重用性、可维护性、可靠性也都大大提高。
参考文献
1   Deshpande Y,Hansen S.Web Engineering:creating a discipline among disciplines.IEEE Software,2001;(2):82~87
2   张骏,王俊峰,张世永.Web应用程序的设计与分析.计算机工程与应用,2000;36(3)
3   Gamma E著,李英军,马晓星,蔡敏等译.设计模式:可复用面向对象软件的基础.北京:机械工业出版社,2000
4   卫宏春.三种主流软件工程方法的比较.微电子学与计算机,2002;19(3)
5   罗晓沛,侯炳辉.系统分析员教程.北京:清华大学出版社,2004

本站内容除特别声明的原创文章之外,转载内容只为传递更多信息,并不代表本网站赞同其观点。转载的所有的文章、图片、音/视频文件等资料的版权归版权所有权人所有。本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如涉及作品内容、版权和其它问题,请及时通过电子邮件或电话通知我们,以便迅速采取适当措施,避免给双方造成不必要的经济损失。联系电话:010-82306118;邮箱:aet@chinaaet.com。