在“非软件企业”开发软件的困局 ZT
软件产品广泛服务于各行业,其开发具有高科技、高投入、高产出、高风险的特点。在项目开发和软件应用中,只有将人员能力的发挥与科学技术的使用应用市场的认识进行最佳的融合,才能发挥软件的效益。普通企业虽涉足软件开发业务,但由于业务主导方向不是软件,企业领导往往忽视软件工作的特殊性,对软件的认识停留在“程序员编一些代码”的水平上。对企业内部的软件开发缺乏管理意识,使得软件开发在“认识上”就面临问题。
与IT业的软件开发组织相比较,普通企业中的软件开发工作机构小、人员少。企业里的软件人员待遇低,难以吸引高水平的人才,开发队伍中的人才流失率达到50%以上。由于没有高水平的开发人员和技术管理人员,软件工作状况处于初级的水平,软件开发不能按照软件工程的要求执行。企业既对软件工作没有清晰的投入产出期望值,对效果不满意,同时又对软件工作手足无措。
在这种情况下软件生产的效果不佳,进行改进势在必行。但这种改进既要利于软件开发水平的提高,又要改进整体环境,困难显而易见。要彻底地改进企业软件开发,我们要先总结一下企业里开发软件的几个主要问题。
不恰当的组织结构
某企业的软件开发工作模式如下:当面临软件需求时,成立一个临时项目小组,由提出需求的业务人员为小组组长;指定几个软件程序员为组员;业务人员提出业务设想,程序员整理需求和编程,业务设想不断更新,软件开发随之变化,最后业务人员认为效果满意则采纳,认为不可行或开发出的效果不好则项目自动取消。 这是一个比较典型的、作坊式的企业软件开发的组织模式。
在这个例子中可以看到,许多企业的软件开发模式存在问题,这类项目开发组织机构关系不平衡:开发人员处于被支配地位,利于开发的需求无法得到满足;没有程序开发主要负责人,在技术上缺少整体性考虑和设计,不能按照软件工程执行;操作过程不规范,一个好的业务设想会因为缺少科学的工程过程、充分的可行性研究、完善的产品设计,导致开发出的软件产品与设想的产品功能效果相距甚远。这样的项目组织结构,生产软件的成功率可想而知。
职责分配不当
软件系统建立过程中需要多方面人才:需求方人员、懂得软件项目管理的人员、软件程序员、系统分析员。普通企业中由于对软件生产的不了解,往往由软件需求提出方人员对软件工作直接管理。这个工作显然超过了其能力范围,不符合软件工作的相关原则。业务人员作为项目负责人,既不能合理计划软件开发工作,也不能管理好软件工作中的各种风险。这将使软件开发处于无序的风险之中。
以笔者了解的一个项目为例。该项目的业务负责人既不懂软件也不懂项目管理,但在项目中对于软件开发工作的时间要求、工作分配有绝对的控制权,而开发人员仅成为编程机器,导致开发人员士气低下。该项目差两周就要对外发布时,业务负责人才要求开发人员在一周内完成开发工作。而实际上,开发这个业务的软件需要至少一个半人月的工作量。可想而知,这个项目最终以失败告终。
工作流程不规范
由于企业的软件开发一般是为了对内部业务进行支持,是辅助性的服务工作,所以一般的企业忽略了投资预算和与业务相关联的成本核算。
企业里软件开发的随意性还表现在:没有软件相关的规范管理工作,缺少项目管理的方式方法和应遵守的工程过程,项目成败完全依赖个人因素和项目小组的自行组合能力;缺少高水平的技术人员和管理人员,软件方面开发经验不足,不能把握软件工程各阶段的工作重点,没有完善的需求确认过程和完整的系统设计,造成重复编程和更改大量程序。
有一个实例:某项目开发程序只保存在程序员开发用的计算机中,未加备份。开发过程中,程序员的机器硬盘突然出现故障,软件源文件处于极度危险之中,最后经过硬件厂商做硬盘修复,才避免前功尽弃。
总结
可以说,我们的企业开发软件或多或少在某些地方存在“畸形”的现象。项目人员各居其位、各司其职的完善分工,在现在的企业内部软件项目组里实不多见。
据统计,企业开发软件中能达到投入使用标准的项目不足60%;已经开发但尚未完成或刚试用就宣告终止的项目占23%;使用一到二周时间后就宣告终止的项目占17%。而在60%完成项目中,有95%项目的维护期远超过软件开发期或需要不断升级。其主要原因是需求描述不充分,系统运行后还不断追加功能,开发周期短,没有充分的测试时间等,由此导致项目的软件开发工作几乎没有结束标志。从开发周期的角度来看,投入开发工时6个人月以上的项目的失败率达到50%以上。在所有项目中令用户比较满意的项目不足5%。
总的来说,企业软件开发失败的根本原因在于,没有项目管理概念和软件工程概念。其典型的几个表现是:忽视产品设计阶段的工作;忽视或不执行软件工程过程;没有确定软件开发模型;没有软件产品化过程;缺少有针对性的培训。
而且在这类企业中,高层领导关心的是主营业务,虽然对软件开发不满意,但不能认识到问题的根源所在,改进的愿望不足。他们采取的态度是,只要企业总体利润能够支撑这种方式,就甘愿维持原状而不愿冒险主动投入、改变落后、减少浪费、提高效率,所以对实际中相关工作支持不力。
在这种情况下,软件生产的改进必然是一个艰难而漫长的过程。
在“非软件企业”开发软件的困局 ZT的更多相关文章
- 企业信息管理软件 OA、CRM、PM、HR 财务、ERP等
本文就企业信息管理软件做一个记录. 最近公司要开发物料管理系统....于是查找一些资料 Excel垄断企业信息管理软件二三十年无人撼动:OA.CRM.PM.HR软件不温不火难以普及. 已有的信息化市场 ...
- 非root用户安装软件
下面简要说一下Linux下非root用户安装软件的一般流程: 1. 获取源代码,一般是wget方式,ubuntu可以使用apt-get source来获取源代码. 2. 解压源代码,一般使用tar - ...
- JEPF 3.1.2 发布,我们的软件机床(软件快速开发平台)
JEPF新一代软件快速开发平台(Java Elephant Platform)是一款优秀的平台产品,它本着灵活.快捷开发.高性能.高协作性.高稳定性.高可用性.人性化的操作体验为设计宗旨历经2年研发成 ...
- 简单5步说清App软件在线开发、App制作多少钱?
开发制作一款App,所有人都会首先关心开发一款App多少钱这个问题.从网上的信息来看,花费个几十万是很正常的事情,甚至有人说要花上百万才能制作出一款App.那么App软件的开发制作到底和什么有关?怎么 ...
- 软件快速开发平台 JEPF
JEPF新一代软件快速开发平台(Java Elephant Platform)是一款优秀的平台产品,它本着灵活.快捷开发.高性能.高协作性.高稳定性.高可用性.人性化的操作体验为设计宗旨历经2年研发成 ...
- 专注于C#.Net WPF软件开发-软件反编译-软件破解-逆向-靖芯科技-包括安卓APK反编译
靖芯科技提供.Net软件开发,软件修改定制二次开发,软件破解,反编译,逆向等各项优质服务: 包括安卓APK软件反编译. 包括但不限于C#,WPF,Surface,Winform,Asp.net.JAV ...
- Java开发软件安装及配置
2017-6-1 1.jdk 1.8.0_131 安装JDK 选择安装目录 安装过程中会出现两次 安装提示 . 第一次是安装 jdk ,第二次是安装 jre .建议两个都安装在同一个java文件夹中的 ...
- 【python】-- 内置函数、软件目录开发规范(代码编码风格)
内置函数 一.内置函数表格 二.内置函数演示 1.abs(x) 功能:取数的绝对值 >>> abs(-1) #取-1的绝对值 1 ########################## ...
- Python3基础(4)匿名函数、装饰器、生成器、迭代器、内置函数、json&pickle序列化、软件目录开发规范、不同目录间模块调用
---------------个人学习笔记--------------- ----------------本文作者吴疆-------------- ------点击此处链接至博客园原文------ 1 ...
随机推荐
- Scala - 快速学习08 - 函数式编程:高阶函数
函数式编程的崛起 函数式编程中的“值不可变性”避免了对公共的可变状态进行同步访问控制的复杂问题,能够较好满足分布式并行编程的需求,适应大数据时代的到来. 函数是第一等公民 可以作为实参传递给另外一个函 ...
- 1 分钟教会你用 Spring Boot 发邮件
Spring Boot 提供了一个发送邮件的简单抽象,使用的是下面这个接口. org.springframework.mail.javamail.JavaMailSender Spring Boot ...
- 剑指offer【07】- 斐波那契数列(java)
题目:斐波那契数列 考点:递归和循环 题目描述:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0),n<=39. 法一:递归法,不过递归比较慢, ...
- Android--Menus
前言 本篇博客讲解一下菜单Menu的使用.菜单在windows应用中使用十分广泛,几乎所有的windows应用都有菜单,Android中也加入了菜单的支持.从官方文档了解到,从Android3.0(A ...
- 不得不提的volatile及指令重排序(happen-before)
微信公众号[程序员江湖] 作者黄小斜,斜杠青年,某985硕士,阿里 Java 研发工程师,于 2018 年秋招拿到 BAT 头条.网易.滴滴等 8 个大厂 offer,目前致力于分享这几年的学习经验. ...
- C#.Net Core 操作Docker中的redis数据库
做软件开发的人,会在本机安装很多开发时要用到的软件,比如数据库,有MS SQL Server,MySQL,等,如果每种数据库都按照在本机确实有点乱,这个时候我们就想用虚拟机来隔离,这样就不会扰乱本机一 ...
- Hadoop-HDFS
HDFS - 写文件 1.客户端将文件写入本地磁盘的N#x4E34;时文件中 2.当临时文件大小达到一个block大小时,HDFS client通知NameNode,申请写入文件 3.NameNode ...
- 读写锁ReentrantReadWriteLock:读读共享,读写互斥,写写互斥
介绍 DK1.5之后,提供了读写锁ReentrantReadWriteLock,读写锁维护了一对锁:一个读锁,一个写锁.通过分离读锁和写锁,使得并发性相比一般的排他锁有了很大提升.在读多写少的情况下, ...
- Go实用开源库收集
框架 https://github.com/go-martini/martini 图形验证码 https://github.com/dchest/captcha ORM https://github. ...
- IPv6笔记
单播地址包含的几种类型:1.AGUA地址:2000::到3FFF:FFFF:FFFF:FFFF:FFFF..... 一个接口可以拥有若干个AGUA地址2.Link-Local 地址:FE80::/10 ...