乐于分享
好东西不私藏

别再只看水暖电,软件价值评估的高地你不占领,就拿不回来了(一)

别再只看水暖电,软件价值评估的高地你不占领,就拿不回来了(一)
此篇,我将结合北京软件造价评估技术创新联盟的所学,用直白易懂的方式及案例,让您了解到软件的正式定义与特点、软件工程的发展史以及何为软件危机。
不是炒冷饭。关于信息化预算话题,我曾经根据贵州省相关规范文件,在2024年3月到5月,对信息化预算进行了系列介绍。2024年来,我经手的信息化项目的工程造价已逾2亿元(不含决策评估项目)。
现在我已经把它们加入到“信息化预算”合集,你可以通过第一章 信息化建设项目的特点轻松的找到他们并连续阅读。
对于信息化项目的重要性,我也在视频号此篇中市场结构性调整_业务雪崩式骤减_你必须要抓住信息化这根稻草有过介绍。感兴趣的朋友可以了解以下。
本次之所以旧事从提,是源于之前的预算教程,仅仅介绍了预算之“术”,而未触及信息化预算、尤其是定制化软件评估的“道”。通过近期的学习,把自己的一些所得,再次分享给大家。

 1 何为软件

1983年IEEE为软件下的定义是:计算机程序、方法、规则、相关的文档资料以及在计算机上运行程序时所必需的数据。
软件不是程序,而是程序、数据以及开发、使用和维护程序需要的所有文档的完整集合。程序是为了解决某个特定问题而用程序设计语言描述的适合计算机处理的语句序列,方法和规则通常是在文档中说明并在程序中实现的。
软件是一种特殊的产品,与传统的工业产品相比,它具有以下一些独特的特点:
(1)软件是一种逻辑产品,而不是具体的物理实体,具有抽象性,人们可以把它记录在纸上,保存在计算机内存、磁盘和光盘等存储介质上,但却无法看到软件本身的形态,必须通过观察、分析、思考、判断以及通过计算机的执行才能了解到它的功能和作用。
(2)软件产品的生产主要是开发研制,没有明显的制造过程。软件开发研制完成后,通过复制可以产生大量软件产品,所以对软件的质量控制,必须着重在软件开发方面下功夫。
(3)软件产品在使用过程中,不存在磨损、消耗、老化等问题。但软件在运行时,为了适应软件硬件、环境以及需求的变化而进行修改、完善时,会引入一些新的错误,从而使软件退化,在修改的成本变得让人们难以接受时,软件就被抛弃,生存期停止。
(4)软件产品的开发主要是脑力劳动,还未完全摆脱手工开发方式,大部分产品是“定做的”,生产效率低。
(5)软件产品的成本相当昂贵,软件费用不断增加,软件的研制需要投入大量的人力、物力和资金,生产过程中还需对产品进行质量控制,对每件产品进行严格的检验。
(6)软件是复杂的。从需求的确定,到软件开发设计、软件生产、投入使用、维保支持直至退役,软件是人类有史以来生产的复杂度最高的产品,是一个庞大的逻辑系统。软件开发,尤其是应用软件的开发常常涉及其他领域的专门知识,一个合格的软件开发人员,不但要精通软件的编程,同时也要成为对象领域的半个业务专家,这就对软件开发人员提出了很高的要求。
 2  软件工程的发展史

软件工程是随着计算机系统的发展而逐步形成的计算机科学领域中的一门新兴学科。软件工程的发展经过了三个时代。

1、程序设计时代

1946年到1956年为程序设计年代。这个时代人们用很大力气研究和发展计算机硬件,经历了从电子管计算机到晶体管计算机的变革,然而对计算机软件的研究和发展却不够重视。当时,由于硬件的价格昂贵,运行速度低,内存容量小,所以当时的程序员非常强调“程序设计技巧”,把缩短每一个微秒的CPU时间和节省每一个二进制存储单元,作为程序设计的重要目标,但设计的程序难读、难懂、难修改。

2、程序系统时代

1956年到1968年为程序系统时代,或者程序+说明时代。在这个时代硬件经历了从晶体管计算机到集成电路计算机的变革,CPU速度和内存容量都有了很大的提高,从而为计算机在众多领域中的应用提供了潜在的可能性。这个时代的另一个重要特征是出现了“软件作坊”。这是因为随着计算机应用的普及和深化,需要的软件往往规模相当庞大,以致单个用户无法开发,此外许多不同的部门和企业往往需要相同或者类似的软件,各自开发就会浪费很大人力。在这种形势下,“软件作坊”就应运而生了。不过这个时代的开发方法基本上沿用了程序设计时代的开发方法,但开始提出了结构化的方法。随着计算机应用日益普及,软件需求量急剧增长,用户的需求和使用环境发生变化时,软件可修改性很差,往往需要重新编制程序,其研制时间很长,不能及时满足用户要求,质量得不到保证,开发人员的素质和落后的开发技术不适应规模大、结构复杂的软件开发,因此产生了尖锐的矛盾,所谓的“软件危机”便由此产生了。

IBM公司的360 OS和美国空军后勤系统,在开发过程中都花费了几千人/年的工作量,最后以失败告终。其中360 OS由4000个模块组成,共约100万条指令,花费了5000人/年的工作量,经费达数千万美元,拖延几年才交付使用,交付使用后每年发现近100个错误,结果以失败告终。360 OS开发负责人Brooks生动描述了研制过程中的困难和混乱:“……像巨兽陷入泥潭作垂死挣扎,挣扎得越猛,泥浆就沾得越多,最后没有一个野兽能逃脱淹没在泥潭中的命运……程序设计就像这样的泥潭,一批批程序员在泥潭中挣扎……没有料到问题会这样棘手……”。比360 OS更糟的软件系统并不少,即花费大量的人力、物力、财力结果半途而废,或者说完成之日就是遗弃之时。这就是人们常说的“软件危机”。

3、软件工程时代

1968 年至今为软件工程年代,或者程序+文档时代。这个时代硬件发展的特点是集成电路计算机发展到超大规模集成电路计算机,高性能低成本的微处理机大量出现,硬件速度的发展已经超过人们提供支持软件的能力。然而,硬件只提供了潜在的计算能力,对于复杂的大型软件开发项目,需要十分复杂的计算机软件才能实现。也就是说,如果没有软件来驾驭和开发的这种能力,人类并不能有效地使用计算机。在这个时代,软件维护费用、软件价格不断上升,没有完全摆脱软件危机。

瞿中, 宋琦, 刘玲慧等著.软件工程.人民邮电出版社.2016:14.

 3 软件危机

“软件危机”是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。软件危机主要包含了两方面的问题:一是如何开发软件以满足软件日益增长的需求;二是如何维护数量不断增长。

换言之软件危机是指软件开发过程中出现的成本超支、进度延迟、质量低下、难以维护等一系列严重问题,导致软件项目频繁失败或无法满足需求。其中成本超支问题,是导致软件不能顺利交付进而开发失败一个主要原因。主要表现在:

(1)对软件开发成本和研制进度的估计常常很不精确。经费预算经常突破,完成时间一拖再拖。这种现象降低了软件开发组织的信誉,而且有时为了赶进度和节约成本所采取的一些权宜之计又往往影响了软件产品的质量,从而不可避免地会引起用户的不满。

(2)“已完成”的软件不能满足用户要求。软件开发人员常常在对用户需求只有模糊的了解,甚至对所要解决的问题还没有确切认识的情况下,就匆忙着手编写程序了。软件开发人员和用户又未能及时交换意见,使得一些问题不能得到及时解决,导致开发的软件不能满足用户要求,使得开发失败。

(3)软件产品质量差,可靠性得不到保证。软件质量保证技术(审查、复审和测试)还没有坚持不懈地应用到软件开发的全过程中,提交给用户的软件质量差,在运行中暴露大量问题。

(4)软件产品可维护性差,软件开发人员在开发过程中按各自的风格工作,各行其是,没有统一、公认的规范和完整规范的文档,发现问题后进行杂乱无章的修改。程序结构不好,运行时发现错误也很难修改,导致维护性差。

(5)软件成本在计算机系统总成本中所占的比例逐年上升。由于微电子技术的进步和生产自动化程度的不断提高,硬件成本逐年下降,然而软件开发需要大量人力,软件成本也随着通货膨胀以及软件规模和数量的不断扩大而持续上升。

(6)软件开发生产率提高的速度远远跟不上计算机应用速度普及深入的趋势。软件的发展跟不上用户的要求。软件产品“供不应求”的现象使人类不能充分利用现代计算机硬件提供的巨大潜力。

后续,我还将对软件危机的解决途径、软件成本的计划与控制、软件估算概述、标准功能点软件估算思路及快速功能点法陆续为大家加以介绍,敬请关注。


关于“造价师郑在宇”

贵州省建筑设计研究院有限责任公司(贵州省贵阳市观山湖区林城西路28号)副主任工程师 一级注册造价工程师  数据分析师 软件工程造价师

 zhengyu_victor@foxmail.com

团队核心价值

 全  —— 全周期覆盖,深度参与项目核心环节

具备从项目立项、可行性研究、决策评估到最终结算、审计的**全流程闭环工作经验**,熟悉各阶段造价逻辑与风险节点,能为项目提供贯穿始终的专业支撑。

 重  —— 重点项目背书,管控能力可追溯 

深度参与多个省级重点建设项目的全过程造价管控,项目成果可通过官方平台或案例库查询验证,积累了应对大型复杂工程的实战经验与风险化解能力。

 专  —— 聚焦造价核心,以专业创造项目价值 

专注于造价领域深度耕耘,通过“前期精准造价管控”与“全过程咨询深度参与”,从成本优化、资源配置等维度挖掘项目潜在价值,助力项目实现效益最大化。

 精  —— 对标行业标杆,迭代成长为专业典范

学习行业优秀,融入行业优秀,成为行业优秀。持续学习行业前沿技术与优秀实践,将先进经验融入团队作业标准,以“成为行业优秀”为目标,推动自身与团队专业能力的迭代升级。

更多业务交流与咨询,欢迎后台私信或留言。