软件产品广泛服务于各行业,其开发具有高科技、高投入、高产出、高风险的特点。在项目开发和软件应用中,只有将人员能力的发挥与科学技术的使用应用市场的认识进行最佳的融合,才能发挥软件的效益。普通企业虽涉足软件开发业务,但由于业务主导方向不是软件,企业领导往往忽视软件工作的特殊性,对软件的认识停留在“程序员编一些代码”的水平上。对企业内部的软件开发缺乏管理意识,使得软件开发在“认识上”就面临问题。

与IT业的软件开发组织相比较,普通企业中的软件开发工作机构小、人员少。企业里的软件人员待遇低,难以吸引高水平的人才,开发队伍中的人才流失率达到50%以上。由于没有高水平的开发人员和技术管理人员,软件工作状况处于初级的水平,软件开发不能按照软件工程的要求执行。企业既对软件工作没有清晰的投入产出期望值,对效果不满意,同时又对软件工作手足无措。

在这种情况下软件生产的效果不佳,进行改进势在必行。但这种改进既要利于软件开发水平的提高,又要改进整体环境,困难显而易见。要彻底地改进企业软件开发,我们要先总结一下企业里开发软件的几个主要问题。

不恰当的组织结构

某企业的软件开发工作模式如下:当面临软件需求时,成立一个临时项目小组,由提出需求的业务人员为小组组长;指定几个软件程序员为组员;业务人员提出业务设想,程序员整理需求和编程,业务设想不断更新,软件开发随之变化,最后业务人员认为效果满意则采纳,认为不可行或开发出的效果不好则项目自动取消。 这是一个比较典型的、作坊式的企业软件开发的组织模式。

在这个例子中可以看到,许多企业的软件开发模式存在问题,这类项目开发组织机构关系不平衡:开发人员处于被支配地位,利于开发的需求无法得到满足;没有程序开发主要负责人,在技术上缺少整体性考虑和设计,不能按照软件工程执行;操作过程不规范,一个好的业务设想会因为缺少科学的工程过程、充分的可行性研究、完善的产品设计,导致开发出的软件产品与设想的产品功能效果相距甚远。这样的项目组织结构,生产软件的成功率可想而知。

职责分配不当

软件系统建立过程中需要多方面人才:需求方人员、懂得软件项目管理的人员、软件程序员、系统分析员。普通企业中由于对软件生产的不了解,往往由软件需求提出方人员对软件工作直接管理。这个工作显然超过了其能力范围,不符合软件工作的相关原则。业务人员作为项目负责人,既不能合理计划软件开发工作,也不能管理好软件工作中的各种风险。这将使软件开发处于无序的风险之中。

以笔者了解的一个项目为例。该项目的业务负责人既不懂软件也不懂项目管理,但在项目中对于软件开发工作的时间要求、工作分配有绝对的控制权,而开发人员仅成为编程机器,导致开发人员士气低下。该项目差两周就要对外发布时,业务负责人才要求开发人员在一周内完成开发工作。而实际上,开发这个业务的软件需要至少一个半人月的工作量。可想而知,这个项目最终以失败告终。

工作流程不规范

由于企业的软件开发一般是为了对内部业务进行支持,是辅助性的服务工作,所以一般的企业忽略了投资预算和与业务相关联的成本核算。

企业里软件开发的随意性还表现在:没有软件相关的规范管理工作,缺少项目管理的方式方法和应遵守的工程过程,项目成败完全依赖个人因素和项目小组的自行组合能力;缺少高水平的技术人员和管理人员,软件方面开发经验不足,不能把握软件工程各阶段的工作重点,没有完善的需求确认过程和完整的系统设计,造成重复编程和更改大量程序。

有一个实例:某项目开发程序只保存在程序员开发用的计算机中,未加备份。开发过程中,程序员的机器硬盘突然出现故障,软件源文件处于极度危险之中,最后经过硬件厂商做硬盘修复,才避免前功尽弃。

总结

可以说,我们的企业开发软件或多或少在某些地方存在“畸形”的现象。项目人员各居其位、各司其职的完善分工,在现在的企业内部软件项目组里实不多见。

据统计,企业开发软件中能达到投入使用标准的项目不足60%;已经开发但尚未完成或刚试用就宣告终止的项目占23%;使用一到二周时间后就宣告终止的项目占17%。而在60%完成项目中,有95%项目的维护期远超过软件开发期或需要不断升级。其主要原因是需求描述不充分,系统运行后还不断追加功能,开发周期短,没有充分的测试时间等,由此导致项目的软件开发工作几乎没有结束标志。从开发周期的角度来看,投入开发工时6个人月以上的项目的失败率达到50%以上。在所有项目中令用户比较满意的项目不足5%。

总的来说,企业软件开发失败的根本原因在于,没有项目管理概念和软件工程概念。其典型的几个表现是:忽视产品设计阶段的工作;忽视或不执行软件工程过程;没有确定软件开发模型;没有软件产品化过程;缺少有针对性的培训。

而且在这类企业中,高层领导关心的是主营业务,虽然对软件开发不满意,但不能认识到问题的根源所在,改进的愿望不足。他们采取的态度是,只要企业总体利润能够支撑这种方式,就甘愿维持原状而不愿冒险主动投入、改变落后、减少浪费、提高效率,所以对实际中相关工作支持不力。

在这种情况下,软件生产的改进必然是一个艰难而漫长的过程。

在“非软件企业”开发软件的困局 ZT的更多相关文章

  1. 企业信息管理软件 OA、CRM、PM、HR 财务、ERP等

    本文就企业信息管理软件做一个记录. 最近公司要开发物料管理系统....于是查找一些资料 Excel垄断企业信息管理软件二三十年无人撼动:OA.CRM.PM.HR软件不温不火难以普及. 已有的信息化市场 ...

  2. 非root用户安装软件

    下面简要说一下Linux下非root用户安装软件的一般流程: 1. 获取源代码,一般是wget方式,ubuntu可以使用apt-get source来获取源代码. 2. 解压源代码,一般使用tar - ...

  3. JEPF 3.1.2 发布,我们的软件机床(软件快速开发平台)

    JEPF新一代软件快速开发平台(Java Elephant Platform)是一款优秀的平台产品,它本着灵活.快捷开发.高性能.高协作性.高稳定性.高可用性.人性化的操作体验为设计宗旨历经2年研发成 ...

  4. 简单5步说清App软件在线开发、App制作多少钱?

    开发制作一款App,所有人都会首先关心开发一款App多少钱这个问题.从网上的信息来看,花费个几十万是很正常的事情,甚至有人说要花上百万才能制作出一款App.那么App软件的开发制作到底和什么有关?怎么 ...

  5. 软件快速开发平台 JEPF

    JEPF新一代软件快速开发平台(Java Elephant Platform)是一款优秀的平台产品,它本着灵活.快捷开发.高性能.高协作性.高稳定性.高可用性.人性化的操作体验为设计宗旨历经2年研发成 ...

  6. 专注于C#.Net WPF软件开发-软件反编译-软件破解-逆向-靖芯科技-包括安卓APK反编译

    靖芯科技提供.Net软件开发,软件修改定制二次开发,软件破解,反编译,逆向等各项优质服务: 包括安卓APK软件反编译. 包括但不限于C#,WPF,Surface,Winform,Asp.net.JAV ...

  7. Java开发软件安装及配置

    2017-6-1 1.jdk 1.8.0_131 安装JDK 选择安装目录 安装过程中会出现两次 安装提示 . 第一次是安装 jdk ,第二次是安装 jre .建议两个都安装在同一个java文件夹中的 ...

  8. 【python】-- 内置函数、软件目录开发规范(代码编码风格)

    内置函数 一.内置函数表格 二.内置函数演示 1.abs(x) 功能:取数的绝对值 >>> abs(-1) #取-1的绝对值 1 ########################## ...

  9. Python3基础(4)匿名函数、装饰器、生成器、迭代器、内置函数、json&pickle序列化、软件目录开发规范、不同目录间模块调用

    ---------------个人学习笔记--------------- ----------------本文作者吴疆-------------- ------点击此处链接至博客园原文------ 1 ...

随机推荐

  1. 【MySQL】percona-toolkit工具包

    [说明] percona-toolkit工具包同percona-xtrabackup一样都是用Perl写的工具包,percona-toolkit工具包是一组高级的管理mysql的工具包集,可以用来执行 ...

  2. 神经网络架构PYTORCH-几个概念

    使用Pytorch之前,有几个概念需要弄清楚. 什么是Tensors(张量)? 这个概念刚出来的时候,物理科班出身的我都感觉有点愣住了,好久没有接触过物理学的概念了. 这个概念,在物理学中怎么解释呢? ...

  3. ZOJ Problem Set - 3706

    #include <cstdio> #include <cstdlib> #include <cstring> #include <set> #incl ...

  4. 高性能Mysql笔记 — 优化

    性能优化 了解查询的整个生命周期,清楚每个阶段的时间消耗情况 性能分析 慢查询日志--服务器性能分析 参考 慢查询日志是优化很重要的手段,但是开启慢查询日志对性能的影响并不大,所以可以考虑在线上打开慢 ...

  5. JsonBuilder初出茅庐

    互联网这股东风不久前刮到了甘凉国,国王老甘独具慧眼,想赶紧趁着东风未停大力发展移动互联网,因为他笃信布斯雷的理论:“站在风口上,猪都能飞起来”.无奈地方偏僻落后,国内无可用之才啊.老甘一筹莫展的低头凝 ...

  6. jsp、jQuery、servlet交互实现登录功能

    做一个web项目,往往需要有一个登录模块,验证用户名和密码之后跳转页面.为了实现更好的交互,往往需要用到 jQuery 等实现一些友好提示.比如用户名或者密码输入为空的时候提示不能为空:点击提交的时候 ...

  7. Perl面向对象(1):从代码复用开始

    官方手册:http://perldoc.perl.org/perlobj.html 本系列: Perl面向对象(1):从代码复用开始 Perl面向对象(2):对象 Perl面向对象(3):解构--对象 ...

  8. Perl面向对象(2):对象

    本系列: Perl面向对象(1):从代码复用开始 Perl面向对象(2):对象 Perl面向对象(3):解构--对象销毁 第3篇依赖于第2篇,第2篇依赖于1篇. 已有的代码结构 现在有父类Animal ...

  9. NSOperation讲解

    本篇博客转自https://www.jianshu.com/p/4b1d77054b35 1. NSOperation.NSOperationQueue 简介 NSOperation.NSOperat ...

  10. JS_object添加变量属性_动态属性

    总结,给对象动态添加变量属性的方法如下: obj[变量]=变量值; 备注: obj.属性=属性值 ; obj={属性:属性值}; 这两种方式添加的属性都不能使用变量作为属性. 犯过的错误: var t ...