`
sumongh
  • 浏览: 226452 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

谈企业应用项目的软件开发过程

阅读更多

    谈企业应用项目的软件开发过程
                                             ——一个PRM系统实施的经验与教训
  

本文以一个PRM项目为例, 探讨了目前国内软件开发企业在软件开发过程中,尤其是企业应用系统项目开发中,面临的问题以及如何利用敏捷软件开发方法的解决方案。

  一、 项目与公司背景

  该项目是一个PRM (Partner Relationship Management)系统,为世界著名的快速消费品品牌在中国大陆的合作伙伴提供订单管理以及其它辅助功能。该系统原来是基于PHP实现的,已经运行将近2年的时间,但是由于系统功能问题,需要对系统进行重新开发,新的系统基于J2EE框架实现。

  项目预期情况如下:

    项目开始时间: 2002年7月1日

    预期交付时间: 2002年9月1日

    项目金额: 70万RMB

  项目开发商是亚洲领先的电子商务解决方案供应商,在J2EE架构的项目执行方面有丰富的经验,结合RUP与Web Software Engineering形成了自己的一套电子商务项目实施方法论,并在多个项目中成功进行实施。

  二、 项目实施情况

  项目由于客户预算等原因,原有的软、硬件系统继续使用,同时,应用系统平台也采用开源项目。

  项目部署时的系统情况如下:

    硬件:

    操作系统: Solaris

    主频: 400M

    内存: 1G

    硬盘: 20G

    应用平台:

    Web服务器: Apache 1.3.21

    应用服务器: Tomcat 4.0.6

    数据库服务器: Oracle 8.1.7

  项目人员配置与项目规模:

    项目团队

    项目经理: 1

    技术经理: 1(兼)

    客户经理: 1

    开发人员: 4

    测试人员: 2

    HTML人员: 1(兼)

    项目规模

    Use Case: 32

    代码行数: 65000

    JSP页面: 198

  项目真实执行情况:

    开始日期: 2002/7/1

    交付日期: 2002/9/2

    验收日期: 2003/5/8

    维护时间: 230 人小时

    目前项目盈利: 20000

  目前,项目由于性能问题,仍然没有验收,维护时间日益增长,目前仍然有30万左右的尾款没有收到;更为严重的是,目前项目开发商正在投标的另一快速消费品行业著名客户的合作伙伴与该客户有很大的重叠,因此,对于潜在项目的招标造成一定的影响。

  三、 经验与教训

  从项目规模中可以看出,该项目的时间还是比较紧张的;另外一方面,项目交付是在合同规定日期之前完成,而且通过了所有的功能测试。从一定意义上的讲,项目的开发是取得了一定的成功的。

  3.1 经验

  在项目开发前,项目开发商已经通过其它项目,实施了以XP为代表的敏捷软件开发方法的部分最佳实践,并取得了很大的成功。因此,在该项目的执行过程中,项目开发商继续采用了XP的部分实践以及其它软件开发方法中的推荐做法[1][2]:

  每日晨会:在项目实施过程中,每天早晨开发小组都要参加一个持续15分钟左右的会议,由项目经理主持,听取每个成员的进度,并根据进展情况,对于进度和资源进行调整。

  由于会议是每天进行的,PM很容易从中获得真实的项目情况-"掀开地毯下面的东西"[4],从而对风险有了较好的控制。

  交叉审核:项目组在最初的时候原本是想采取"成对编程"的实践,但是没有获得物理和管理上的支持,因此,只能采取交叉审核的方式进行。

  需求获取:由PM和一名对于原有系统较熟悉的开发人员进行需求获取和SRS (Software Requirement Specification) 的撰写。技术经理和其它开发人员进行需求的审核。

  分析与设计:由一名开发人员进行系统框架的设计,其它人员进行审核;在系统框架设计进行过程中,由于系统去除订单处理以外的其它部分比较独立,因此,将其它模块分配给开发人员,而将核心部分交与技术经理进行分析与设计。开发人员在每个迭代周期内,都会在分析与设计做完后,每2人一组进行审核。

  编码:每天下班前,2人一组,对对方的代码进行Review,发现问题及时解决。代码Review的时候,语法与规则的检查,通过Check Style的工具进行;开发人员将审查的重点放在功能实现与性能优化等方面。

  测试:在需求文档形成以后,2个测试人员分布编写分配模块的Test Case;而在具体测试的时候,两人交叉测试对方的模块和更新文档。

  在系统开发Verification的各个阶段,都有Check List,详细的信息请查看参考文献[3]。

  测试先行:测试在软件开发中的重要作用已经得到了越来越多的重视,但是,由于习惯势力的影响和对于"Test-Driven Development"的不熟悉,开发小组并没有实施完全意义上的测试先行。

  对于系统框架的核心类设计过程中,项目小组采取了TDD的方式进行开发。在后续的系统开发中,每个开发人员在进行开发前,首先要完成一个功能测试 ( Function Test ) 列表,将要完成的Use Case中的主要业务逻辑以及关联逻辑都要罗列出来,在提交测试人员进行集成测试之前,开发人员需要保证完成Function List中的所有选项。

  在每个开发人员的模块完成并通过个人的功能测试后,测试人员进行集成测试,同时编写测试脚本,并通过自动测试工具 (Rational Robot) 进行记录。每天下班之前,测试人员会启动测试工具,进行回归测试。在第二天向PM和技术经理提交测试报告并将Bug提交至Bug Trace系统(Rational Clear Quest),由PM进行Bug的分发。每个开发人员需要在下一个迭代周期完成前,修正前一个迭代内分配的Bug。

  持续集成:在测试先行的基础上,开发一组平均每天都会进行已经完成模块与以后系统的集成。集成由专门的人员,在开发人员将已经通过功能测试的源码Check in到源码控制系统 (ClearCase) 中以后进行,在部署应用结束以后,通知测试人员进行集成测试。

  小步发布:项目有专门的测试与发布服务器,每天都有集成的系统在运行和接受测试。由于没有现场客户,对于已经发布的系统,是由"客户领域专家"(这个项目是由Business Development人员来充当这个角色)来进行审查的。他对于系统的意见和发现的问题,在经过PM和技术经理审核后,进入ClearQuest,分配给开发人员进行修改。

  由于项目一开始就注意组织内部以及与客户的沟通和交流,同时采用了很多敏捷软件开发过程的实践,项目如期交付使用。

  3.2 教训

  项目在交付以后,最初的两个订货季节没有出现功能与性能上的问题。但是,由于合同中有数据迁移的条款,在项目交付2月后,项目开发商将旧应用系统中的数据导入新系统以后,在下一个大的订货季节中,持续的出现性能上的问题。在代码修改和硬件环境提高以后,系统性能目前获得了一定的改善。

  从项目验收日期的日益推迟中,我们可以看出,该项目还是有很多地方做的不够,例如:

  系统二次开发效应:"第二个系统效应"是Brooks在《人月神话》中提出的一个普遍的问题,一般而言,第二个系统会倾向于过分设计[4]。

  对于这个项目而言,没有犯这个错误,却发生了另外一种情况:旧系统中,对于订单信息以及产品信息的展示,不管是多是少(系统页面最多显示上千条记录),都是在一个页面中显示。这对于没有明显的层次结构,直接在Script中调用数据库记录的PHP来说,性能还是可以接受的。但是,新系统的设计中客户提出考虑系统用户习惯一致性的问题,就照搬了旧系统的页面设计;同时,在架构设计上,对于这种页面显示大量数据的情况,也没有给予充分的考虑,为后来的性能问题,埋下了伏笔。

  教训一:没有考虑新平台的影响,照搬旧系统的功能以及页面设计。

  非功能性需求:项目合同中主要描述的是系统功能性的需求,而没有非功能性需求的规定;同时,在需求获取解决,也没有明确的了解系统的性能指标等非功能性需求。主要原因在于项目开发商之前没有大规模业务系统开发的经验,对于非功能性需求没有足够的重视;同时,在测试阶段,也没有对于系统负载和性能做过测试。

  因此,在项目交付以后,由于旧系统数据迁移后,数据量有了很大的增长,同时,在秋季的定购高峰中,有大量的并发用户访问,出现了下列问题:

  数据库死锁;

  大量数据计算与显示页面速度很慢,页面要经过5~10分钟才能够完全显示;

  上述两种情况在少量负载的单元测试和集成测试中是不可能出现的。

  教训二:对于企业应用系统,尤其是业务系统,没有切实注意负载、性能等非功能性需求。

  效率与设计:在J2EE中,已经成功的运用了很多设计模式的思想,为系统的开发提供了一个很好框架。但是,在项目的架构设计中,除了考虑可维护性、可复用性等问题以外,还要考虑代码执行效率的问题[5]。

  随着计算机硬件技术的发展,"莫尔定律"被一再的验证,系统硬件的价格逐渐降低。对于很多使用J2EE架构或者JAVA技术的项目来说,解决性能与效率问题的解决方案就是增加硬件方面的投入。而实际上,软件开发过程中优劣算法之间的差距是靠硬件的投入平衡不了的。

  该项目在系统维护期间,对代码进行走查,修改了很多对于性能有影响的语句;同时,在框架设计中,尤其是数据库操作方法,利用Cache原理,从一定程度上解决了性能的问题。

  教训三:系统框架设计只考虑面向对象和可维护性,没有在完美的设计与高效率的代码之间做出权衡。

  数据库设计:JAVA是纯粹的面向对象语言,利用J2EE开发的项目,也强调首先进行OOAD的分析,首先有对象,然后再有数据库的设计。DBA在项目中的作用,已经远远没有传统的结构性编程中重要。而实际情况却是远非如此:大部分的业务系统,如果要对系统的性能做出优化,对数据库层或者SQL语句进行优化是关键的步骤之一。

  对于这个PRM系统,在数据库的设计上并没有经过DBA的审查就开始进行开发;而在性能问题出现以后,客户增加了512M的内存,也没有请求DBA对Oracle的参数做相应的调整,造成了很大的资源浪费。

  在项目维护过程中,依靠DBA的帮助,开发商对于数据库系统参数、索引、存储过程和SQL语句都做了一定的调整,这对于系统性能的提高起了很大的作用。

  教训四:在面向对象的软件系统构建中,忽视数据库设计以及DBA的重要作用。

  客户参与:在传统的软件开发过程中,一般情况下,客户在签订合同后,项目交付前是很少有机会看到系统的,这样就造成了系统交付后,客户抱怨很多的情况;而在以XP为代表的敏捷软件开发方法中,强化了客户在软件开发中的重要作用,XP更是提出了"现场客户"的实践,将客户作为项目小组的一员,客户对于项目的发布计划、内容和优先级等方面有绝对的控制权。

  对于这个PRM项目,由于客户的原因,不可能采取"现场客户"的实践,但是,开发商的BD对于该客户十分熟悉,完全可以作为客户代表参与到项目中来,因此,开发商将客户经理作为项目组的一员。

  实际情况是:开发过程中,客户经理由于业务拓展的原因,并没有在项目上分配多少时间进行审查;而客户在交付前也没有花费很多的时间研究系统,也没有提交很多的反馈报告。在系统交付出现性能等问题后,客户经理与开发人员一起对于系统需求进行审查,提出了很多有参考性的意见。如果从一开始,就强化"现场客户"的最佳实践,就可以很早发现问题。

  教训五:客户或者客户经理对于项目的参与力度不够。

  四、 结论

  在基于J2EE的企业应用项目开发中,要注意以下问题:

  权衡系统设计与性能指标,关注非功能性需求;

  采取敏捷软件开发过程,关注人(客户和开发人员)在项目实施中的重要作用,如果可以的话,联合实施XP的所有实践;

  五、 参考文献

  [1] Agile Software Development Alistair Cockburn

  [2] Extreme Programming Explained - Embrace Change Kent Beck

  [3] Software Verification and Validation for Practitioners and Managers Steven R. Rakitin

  [4] The Mythical Man-Month Frederick P. Brooks Jr.

  [5] Expert One-To-One J2EE Design and Development Rod Johnson
 
 



分享到:
评论

相关推荐

    谈项目管理在软件开发项目的应用

    项目管理在软件开发项目中的应用已经成为现代信息技术产业中不可或缺的一部分,尤其对于软件企业而言,它不仅提升了企业管理效能,还直接关系到企业的利润最大化。本文主要探讨项目管理的内涵,分析其在软件开发项目...

    谈企业项目管理软件开发的问题与对策软件开发与项目管理.pdf

    然而,企业在实施项目管理软件开发过程中,往往面临一系列问题,需要采取有效的对策来解决。 首先,我们需要理解项目管理的基本概念。项目管理是指在特定的约束条件下,通过有效的计划、组织、协调和控制,确保项目...

    软件项目管理论文:敏捷在软件开发中的应用

    通过实际软件开发的案例分析软件生产的价值观,得出敏捷方法在软件开发中的价值。关键词:敏捷开发;增量;迭代;用户故事;文档;软件工程;精益生产从广义上来给敏捷开发下定义,敏捷开发(agiledevelopment)是一...

    浅谈公有制企业中小型软件团队的项目管理实践.pdf

    软件配置管理方面,需要确保软件开发过程中的配置管理,包括版本控制、变更管理和文档管理等。 本文讨论了软件项目管理知识在大型国有化工企业中的应用,结合软件项目管理相关理论,讨论了开发人员管理、软件质量...

    浅谈计算机应用软件开发中编程语言的选择研究中英文对照.doc

    在此背景下,合理选择编程语言成为软件开发过程中一个至关重要的环节。 #### 1. 常用编程语言分析 理解各种编程语言的特点及其优缺点,是选择合适编程语言的基础,也是确保软件开发项目顺利实施的关键。 ##### ...

    浅谈计算机应用软件开发中编程语言的选择研究中英文对照.pdf

    浅谈计算机应用软件开发中编程语言的选择研究 随着信息技术的飞速发展,计算机应用软件已经深入到我们生活的各个领域,从个人娱乐、办公自动化到工业自动化、云计算等,无处不在。软件开发企业面临着激烈的市场竞争...

    浅谈软件开发管理策略

    软件开发项目的成功不仅仅依赖于技术实力,更重要的是管理方法的应用。项目管理是指在项目活动中运用一系列的知识、技能、工具和技术,以满足或超过相关利益者对项目的要求。其核心在于通过对时间、质量和成本的有效...

    浅谈Java手机应用开发课程建设.pdf

    在教学方法和手段中,我们充分利用学校教学资源,使用多种教学方法,包括软件开发流程的项目教学,学生边开发软件边学习技术,让学生体会程序员的工作过程,提高学生对工作岗位的认识。此外,我们还设计并创新教学...

    浅谈石油企业信息系统开发项目的进度管理.pdf

    石油企业信息系统开发项目进度管理,是指在石油企业信息技术开发过程中,针对信息系统建设进度的计划、监控和调整等一系列活动的管理。信息系统建设是石油企业现代化管理的重要组成部分,它直接关系到企业的战略发展...

    项目管理浅谈,从理论到实践讲解项目管理在开发中所起到的作用

    项目管理的现状显示,它已广泛应用于各行各业,特别是在软件开发中。随着计算机和网络技术的进步,项目管理软件工具不断涌现,如VSS用于文档和源代码管理。这些工具为软件项目管理提供了便利,帮助规范开发过程,...

    软件开发毕业论文题目汇编.docx

    34. 软件开发信息管理系统的设计与实现:构建一套用于管理软件开发过程的系统。 35. 构件化的软件开发技术分析:分析基于组件的软件开发方法和技术。 36. 讨论计算机软件开发中影响软件质量的因素:研究影响软件...

    浅谈软件项目管理的决策支持系统.pdf

    软件项目管理决策支持系统是现代科技发展中的一个重要工具,它在软件开发和企业管理中起着至关重要的作用。软件项目管理涉及多个活动,包括管理活动和工程活动,如项目立项评审、计划评审、配置管理(SCM)以及各种...

    应用集成开发平台

    在当今信息化社会,软件系统的复杂性和多样性日益增强,应用集成开发平台成为了解决这一问题的重要工具。本文将深入探讨一个名为"应用集成开发平台"的解决方案,它以其易用性、高效性和强大的功能,为IT专业人员提供...

    浅谈企业办公自动化管理中的计算机软件应用.pdf

    企业办公自动化管理是指在企事业单位内部利用计算机软件和网络技术,实现办公流程的自动化处理,从而提高工作效率和管理水平的一系列管理活动。随着信息技术的不断进步,办公自动化软件的应用已成为现代企业提升竞争...

    浅谈JAVA软件开发的几大误区.pdf

    Java软件开发是现代软件行业中广泛应用的一种技术,以其跨平台、高效和安全性著称。然而,在实际的开发过程中,许多开发者存在一些误区,这些误区可能导致软件性能下降、开发效率低等问题。本文将探讨Java软件开发中...

    大数据挖掘与分析在项目管理中的机遇与应用——以Python技术为例.pdf

    大数据挖掘与分析技术在项目管理中的应用已经成为了企业和管理科学领域研究的热点,尤其是在当前数据爆发式增长的背景下,其对项目管理的冲击和带来的机遇愈发明显。本文通过案例分析的形式,主要以Python技术为工具...

    软件企业的人才需求:兼谈软件人才的成长之路PPT

    3. **团队协作**:软件开发往往是团队合作的结果,因此良好的沟通技巧、团队精神和协作能力对于软件人才来说至关重要。 4. **学习能力与创新思维**:在快速变化的IT行业中,持续学习和适应新技术的能力是保持竞争力...

Global site tag (gtag.js) - Google Analytics