`
softstone
  • 浏览: 477726 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论
阅读更多

小软件项目开发的管理

(本文转载自软件工程专家网www.21cmm.com

  一个企业的管理,大公司有大公司的方式,小公司也有小公司的方式,如果把别人的 经验生搬硬套到自己身上,可能会适得其反。同样,管理一个软件项目也一样,大项目和小项目的方式不完全一样。但从另一个角度来看,项目的大与小并没有本质的区别,很多方法是共通的。本文的目的是从作者的经验来谈谈小项目开发的管理。

一、小项目的特点

 大家知道,“软件危机”的出现起源于一些大型项目的不断延迟甚至失败。小项目相比之下,具有以下特点:
  1.项目功能相对较少
 2.开发人员较少
 3.开发周期较短
  另外,在现实中,有很多小项目是由一些中小公司进行开发的,这些公司往往人员流动性较大,这也是不容忽视的一个现实.

二、小项目开发中常犯的错误   

  小项目看起来比较简单,比较容易成功,因而人们往往忽视了小项目的管理,其实这是一种误解,从本人的经验看来,小项目开发中容易犯以下的一些错误:
  1、开发之前没有认真地进行项目可行性和工作量的估计。  往往由于项目较小,便很草率地制定一个开发日程表,没有认真地估计项目难度,结果实际完成时间与估计完成时间往往有较大差别。
  2、没有真正的设计过程
  开发人员少,意味着不同人员的程序之间交互、接口相对少一些。开发周期短意味着往往是同样的几个人从头到尾负责一个项目。这两者都让人容易犯些错误。往往是几个人碰一下头,讨论一下最基本的数据结构、函数接口便分头去做自己的工作了,没有一份较正式的文档。

  这种做法潜在的危险之一是有的人可能会对讨论出的接口、结构理解有偏差(应该承认人是会犯错误的)。一个误解可能造成以后的返工。   另一个潜在的危险是由于讨论时忽略了某些情况,等大家都按当时的分工完成属于自己的工作后,才发现各个模块组合起来却形不成一个完整的系统。其根源在于没有一个负责协调的人员不断监控整个开发过程。
  第三个潜在的危险是一旦有人中途退出开发队伍,其他人加入时,新来的人难以理解 以前别人做好的代码,索性自己从头来。另外,没有文档的程序,日后维护和版本升级都比较困难。
  3.不经过单元测试而直接进入系统测试
  造成这一现象的原因是每个模块相对比较简单,但是为了测试一个模块需要建立一些测试环境。例如,为了测试一个函数是否正确,应该用一些测试数据去调用该函数,需要编写一些测试数据。但很多开发人员嫌麻烦,觉得反正其他模块也很快出来了,直接用真正的数据来运行几次就行了。
  殊不知,一旦直接进入系统测试,发现运行结果不正确后需要一步步查找。由于模块间的调用关系,可能查了很久才发现是某个模块的问题。这种方法一来效率比较低,大量的时间用在了将一个错误定位在模块上了。另外由于这种测试不完全,真正运行系统,当 调用某模块时,可能大部分时候都是正常数据,极少出现边界情况,可能某些边界情况容易被忽视,很久之后才被发现。但是如果对每个模块进行单元测试时都进行一下边界测 试,就会很容易消除一些隐患。真可谓欲速则不达也。

三.合理的开发流程

  合理的开发模式,一句话形容就是“麻雀虽小,五脏俱全”,即使是小型项目的开 发,仍然应该遵循软件开发的一般规律,必须的步骤不能省略。但是小项目有它自身的一些特点,实行起来可以相对灵活些。
  以下我从几个方面描述一下我认为比较合理的模式.

1.需求获取

  在进入正式开发之前,必须先从用户处获取准确的需求。在这上面花费相当时间是很必要的。
  软件项目可以大致分为专用软件和通用软件两大类。
  对于专用软件,例如给某单位开发一套该单位专用的系统,一般用户对于软件要完成哪些功能已经有了一个比较清楚的轮廓,而且往往在开发合同中已经大致地规定了。
  但是,开发合同上规定的只是一个大概的框架,在进入开发之前必须与用户进行比较具体的交流和讨论,了解清楚用户心目中的产品究竟是什么样子。这个步骤如果没有好好做,往往到了开发工作的后期才发现开发人员的理解和用户的要求有一些误解,那么必然造成时间上的浪费。
  对于通用软件,在开发之前应该做一定的市场调查工作,一方面是从经济效益考虑,调查产品的潜在市场有多大,另一方面是从技术的角度,必须了解清楚潜在用户对软件的各种技术上的要求,例如,用户现有硬件配置如何,软件配置如何,使用什么网络,使用 什么数据库等等,根据调查的统计结果决定即将开发的软件的一些技术指标。
  为了比较好地与用户进行交流,使用一些工具是很有好处的。   为了讨论用户界面,可以用VB, delphi等做一个原型,根据原型有针对性地与用户讨论需求。(原型开发不仅仅可以用于准确获取用户的需求,开发出来的原型本身可以作为下一步开发的基础,增量式地完成开发)
  为了讨论软件运行的流程,可以采用UML的Use Case图。

2.需求分析

  在了解用户的需求之后,将需求用一种模型来表示,就是需求分析,目前比较流行的 分析方法是面向对象的方法,通过分析用户需求,用类、类之间的各种关系来表示整个系统。
  这部分涉及到具体的方法,在此不详细讨论,但是原则上是提取类->类之间关系,可能需要不断修改而形成一份分析文档。
  我想强调几个问题。
  一是要分清问题域与系统责任。系统责任是指所要开发的软件应该完成的功能,而问题域是包含所有相关的部分。例如你要开发一个程控机计费程序,程控机已经是现成,输出的数据格式也已经是固定的,你的程序仅仅需要从程控机中读取相应的信息,那么,程控机在你的系统里只是一个外部的东西,把它作为一个类也许就是不必要的,仅仅需要一个类来完成读数据的操作。又如,你需要在一个已经存在的数据库上开发一些应用,数据库的格式已经固定,并且已经有一个后台程序在运行,你需要开发一个新的前台程序,这时,服务器程序对你来说就是一个外部的东西。但是,象这种外部的内容必须在分析文档中有一些说明,作为系统的外在约束。   二是需求获取与需求分析的关系。
  用什么方法来完成需求的获取,在很大程度上影响了需求分析的做法。
  例如当初采用Use Case来表示用户需求,那么从各种序列图中选出相互交互的各个实体,就是一个个类。

  三是分析与设计过程的衔接。
  分析过程的内容是用类的结构来表示目标系统,并不设计具体实现,如采用什么编程 语言,在什么操作系统平台上运行等等。这些具体实现是在设计阶段来完成的。面向对象方法的优点是分析、设计、编码过程表示法统一,能比较好的衔接。但是,是把分析和设 计阶段分开,采用瀑布式开发,还是采用其他方式,要看具体的情况。
  对于需求潜在变化不大的项目,可以采用瀑布模型,有一个很明显的设计阶段,这样做的好处是有一份比较完整的分析文档,这样以后如果需要采用不同的编程语言、或者采 用其他的平台时,便可以以这份分析文档作为开发的基础。
  对于需求变化频繁的项目,可能采用少量分析;少量设计少量编码测试的方式更合适,而且随时可能要返回到前面某个一阶段去进行修改。但是这意味着可能没有一份完整的分析文档。
  现在很多CASE工具并不区分分析和设计的阶段。但是,这并不意味着开发就可以对分析和设计不加区分,CASE工具如同一支笔,如何用好还得还人。

3.设计过程

  设计阶段的工作包括:
  对分析模型必要的修改。可能需要对某些类结构进行一些修改,这些修改的原因可能是编程环境的要求,或者为了重用以前的某些工作。
  定义界面部分、数据访问(数据库)部分。
  由于目前很多编程语言都可以可视化地设计界面,所以界面部分工作往往留到了编码阶段来完成。于是设计阶段的工作量并不大。

4.编码

  进入编码工作之后,可能会发现前面分析或设计阶段的某些错误,这时应返回到前面的阶段进行必要的修改。

5.测试

  如前所述,即使是小项目,也应该严格地进行测试。

四、人员的安排

  比较小的项目,往往是几个人来完成,这几个人基本上从头到尾参加开发。在这几个人中,有一位项目负责人,负责分析、设计和协调的工作。由于项目小,项目负责人也要参加编程,那么这人必须把时间合理运用,

  经验告诉我几条原则:
  1.协调几个人的工作比自己完成一段编码更重要.
  由于协调上出了漏洞,可能导致很大的问题,所以项目负责人必须随时监控各开发人员的工作,包括内容是否与要求发生偏差,进度是否滞后等等。
  只有在完成这些工作之后,项目负责人剩下的时间才能用于编程。   2.给每个开发人员明确的任务书.
  不管是用面向对象或者其他方法开发,分析、设计模型只是从功能的角度来描述系 统。但是,具体开发时每个开发人员必须非常明确自己的任务,这些任务应该采用明确的文档来表示。
  3.让大家都大致熟悉设计模型.
  让每个开发人员都清楚自己所做的工作在整个系统中处于什么地位,有时侯可能会发现设计模型中的漏洞,避免了各人的代码编写完毕之后又要修改的后果。

分享到:
评论

相关推荐

    软件开发项目管理制度.pdf

    软件开发项目管理制度是为了规范公司自有软件开发的管理工作,提高软件开发的工作效率和质量,特制定软件项目的立项、开发、测试、发布、备份及软件发布后问题跟踪和处理、设计更改及升级的管理制度,最大限度的满足...

    软件项目开发计划

    本项目涉及的主要文档包括“软件项目开发计划”、“开发进度周报”以及“项目开发总结报告”,这三者构成了软件开发管理的核心组成部分。 1. **软件项目开发计划**:此文档详细阐述了项目的整体目标、范围、时间表...

    软件开发与项目管理课后练习(参考答案)

    软件工程的内容包括开发技术和开发管理两个方面。 四、软件危机 软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。软件危机的原因包括软件产品固有特性(软件的不可预见性、软件的规模大且逻辑...

    软件开发项目管理文档模板.zip

    在软件开发过程中,项目管理是确保项目顺利进行的关键环节。"软件开发项目管理文档模板.zip"这个压缩包提供了一系列在整个软件开发周期中所需的管理模板,对于项目经理来说是一份宝贵的资源。这些模板可以帮助项目...

    软件开发项目考核办法

    从给出的部分内容来看,尽管由于OCR扫描技术的原因导致了一些识别错误,但是从可识别的部分中,我们可以推断该文档涉及了全面的软件开发项目考核体系,包括但不限于研发管理、需求分析、项目实施等阶段,并且引入了...

    软件开发管理规范

    从软件项目的立项、组织架构搭建、开发计划制定到最终的测试与发布,每一个环节都被赋予了明确的指导原则和操作规程。这对于大型组织特别是涉及多部门协作的软件开发项目来说,具有重要的参考价值和实践意义。同时,...

    软件项目管理之学生管理系统课程设计

    项目开发意义是指软件项目的重要性和必要性,包括项目对教育行政管理和教学科研的影响等。 在范围计划中,我们将对学生管理系统项目的范围进行定义和确定,包括项目的目标、任务、进度和资源等方面。我们还将对软件...

    软件项目管理系统开发《论文》

    ### 软件项目管理系统开发的关键知识点 #### 1. 软件项目管理系统的开发背景 在现代软件开发环境中,随着项目复杂度的增加和变更频率的加快,软件项目管理变得至关重要。软件项目的成功与否,很大程度上依赖于其...

    软件开发项目管理手册.pptx

    本手册旨在提供软件开发项目管理的基础知识和实践指南,涵盖项目管理的定义、特征、软件项目的特殊性、项目管理知识体系、软件开发项目管理的范围、过程管理与软件项目管理的关系等方面。 一、项目管理的定义和特征...

    IT项目管理之软件项目质量管理论文

    因此,软件项目质量管理是软件开发项目中不可或缺的一部分。 软件项目质量管理主要包括三个过程域:质量计划、质量保证和质量控制。质量计划是质量管理的第一过程域,它主要结合各个公司的质量方针、产品描述、质量...

    软件开发部规章制度及软件项目管理方法

    【软件项目管理方法】虽然没有详细展开,但通常包括需求分析、项目规划、设计、编码、测试、上线和维护等多个阶段,需要项目负责人有效地分配资源,控制质量,管理风险,确保项目按时按质完成。项目组长负责软件项目...

    软件项目管理教程及案例

    《软件项目管理教程及案例》是一份集合了理论与实践的综合资源,旨在帮助学习者理解和掌握软件项目管理的核心知识。这份资料包涵盖了项目管理的关键领域,包括需求分析、项目规划、进度控制、质量管理、风险管理和...

    软件项目管理规范

    软件项目管理是软件工程和项目管理的交叉学科,涵盖了管理软件产品开发所必须的知识、技术及工具。软件项目管理的概念可以定义为:在软件项目活动中运用一系列知识、技能、工具和技术,以满足软件需求方的整体要求。...

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

    项目管理在软件开发中的实施,涵盖了对人力资源、成本、质量、进度和风险的全面管理,确保软件项目按照预定目标高质量、高效率地完成。同时,它也有助于将开发团队的个体能力转化为企业的整体开发能力,提高软件产品...

    软件项目开发管理系统-软件项目管理论文.doc

    软件项目开发管理系统的应用可以将开发人员的个人能力转化成企业的开发能力,企业的软件开发能力越高,表明这个企业的软件生产越趋向于成熟,企业越能稳定发展,项目开发风险越小。 系统的缺陷和改进建议: * 系统...

    软件项目开发的全套文档.zip

    "软件项目开发的全套文档.zip"包含了整个项目周期中可能涉及的所有关键文档,这些文档是保证项目顺利进行、沟通协调团队、控制质量、管理风险以及满足客户需求的基础。以下是这些文档通常涵盖的主要内容: 1. 项目...

    软件项目管理案例教程完整版

    项目管理涉及计划、组织、领导和控制资源以实现项目目标,而软件项目管理在此基础上增加了对软件开发过程的管理,包括需求分析、设计、编码、测试和维护等阶段。有效的软件项目管理需要对这些阶段进行紧密协调,确保...

    软件项目管理——失败案例分析

    软件项目管理——失败案例分析 软件项目管理是一个复杂的过程,需要合理的时间进度、有效的估算技术、科学的资源分配和严格的质量控制。然而,在软件项目管理中,各种失败案例层出不穷,IBM360系列的经验与教训便是...

Global site tag (gtag.js) - Google Analytics