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

与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. 操作系统下cache的几个概念

    Cache是一种容量比较小,但访问速度比较快存储器.由于处理器的速度远高于主存,处理器直接从内存中存取数据要等待一定周期,而Cache位于处理器与主存之间,保存着最近一段时间处理器涉及到的主存块内容. ...

  2. Spring Boot 主类及目录结构介绍

    Spring Boot 与传统项目最大的区别是,传统项目都是打成 WAR 包部署到服务器上面,需要额外的 Servlet 容器, 而 Spring Boot 则可以直接打成 jar 包,并内置集成了 ...

  3. [ASP.NET MVC]笔记(四) UnobtruSive AJAX和客户端验证

    UnobtruSive AJAX和客户端验证 ASP.NET MVC 已经默认开启非侵入试js和客户端验证,在web.config可以看到如下配置: <configuration> < ...

  4. JVM读书笔记之垃圾收集与内存分配

    1 概述 说起垃圾收集( Garbage Collection , GC ) ,大部分人都把这项技术当做 Java 语言的伴生产物.事实上, GC 的历史远远比 Java 久远,1960 年诞生于 M ...

  5. Java实现敏感词过滤 - IKAnalyzer中文分词工具

    IKAnalyzer 是一个开源的,基于java语言开发的轻量级的中文分词工具包. 官网: https://code.google.com/archive/p/ik-analyzer/ 本用例借助 I ...

  6. web进修之—Hibernate 懒加载(6)

    关于懒加载 在关系数据库设计的时候,我们很多时候把表之间的关系设置为强关联(使用外键进行约束),在Hibernate中利用对象的包含关系进行维护(HIbernate本身就是面向对象的数据库操作模式), ...

  7. k8s部署kafka集群

    一.概述 在k8s里面部署kafka.zookeeper这种有状态的服务,不能使用deployment和RC,k8s提供了一种专门用来部署这种有状态的服务的API--statefulset,有状态简单 ...

  8. spring-boot-2.0.3启动源码篇三 - run方法(二)之prepareEnvironment

    前言 此系列是针对springboot的启动,旨在于和大家一起来看看springboot启动的过程中到底做了一些什么事.如果大家对springboot的源码有所研究,可以挑些自己感兴趣或者对自己有帮助 ...

  9. Centos-7修改yum源为国内的yum源

    以centos7为例 ,以 修改为阿里的yum源 1. 备份本地yum源 [root@localhost yum.repos.d]# cp CentOS-Base.repo CentOS-Base.r ...

  10. 详细分析MySQL事务日志(redo log和undo log)

    innodb事务日志包括redo log和undo log.redo log是重做日志,提供前滚操作,undo log是回滚日志,提供回滚操作. undo log不是redo log的逆向过程,其实它 ...