分析软件工程经济学的发展现状
分析软件工程经济学的发展现状 软件是相关程序、过程和文档的完整集合,而工程则是科学与数学的应用, 并使物质的属性、自然能源在结构、机械、产品、系统和过程上变得对人类有益 要做到对人类有益,软件开发及其软件系统必须是在社会能负担得起的成本基础 上满足人的需求,毕竟软件开发是一种社会行为软件成本估算将一般的经济学分 析概念、技术和特殊的软件工程世界联系起来通过成本估算,可以使项目的管理 者对软件的成本及其变化趋势做到正确把握,从而为进一步的决策提供科学而直 观的依据。软件工程的目的是通过有关学科的应用使人们开发出来的软件系统成为 对用户有用的产品。然而软件工程效果不仅取决于计算机科学、软件工程方法学 以及软件工具与环境的使用,还取决于它是否满足经济学和社会效益的需要。软 件工程经济学就是依据经济学的观点来研究如何有效地分析、开发、发布软件产 品及其支持用户使用等,为软件的成本进度估算提供必要的手段和方法,并妥善 地协调技术、经济和人之间的关系。
1.软件工程面临的经济学问题 纵观软件工程全过程,都或多或少与经济学有关从经济学的角度来看,也 都不同程度地存在以下问题:
(1)项目负责人没有可靠的依据来确定每个软件阶段和每个软件开发活 动需要多长时间和多大的工作量,因此,也就难以判断软件开发是否按计划进行, 甚至意味着项目从一开始就失控了。
(2)软件分析人员难以在分析设计阶段做出现实的软硬件比较分析,导 致设计中硬件成本降低,最终却以更高的软件成本为代价。
(3)软件开发人员无法使相关经理、客户或销售人员相信他们承诺的预 算与时间进度表是现实的。
(4)项目组内部对软件开发过于乐观,而对外则在竞争性的软件合同竞 标中报出低价,最终必然导致费用超支或性能折衷 (5)软件开发的成本很高,且难以控制严重时,导致整个项目失败(被 迫取消或放弃)的指导,使得项目最终达不到预期的目的,甚至还有可能导致用户成本上升、可靠性或服务质量下降、需要増加额外的人员、员工的工作积极性 下降、员工的流动性上升等。因此,在实际的软件工程中,不仅包括软件开发的 方法和技术问题,还包括很多经济学方面的问题,如使用、预算、进度以及决定 用户需求的相对优先级等问题实践证明,好的软件工程必须协调好人与经济的问 题。
2.软件工程经济学的研究内容 2.1 软件工程经济学研究的基本问题 软件工程经济学是软件工程学科与经济学(微观经济学)有机结合的产物, 它利用经济学中成熟的概念、技术和方法为软件工程决策服务因此,软件工程经 济学面临的问题是如何利用成本估算等技术来帮助项目管理者做出正确的选择, 以及利用何种经济学方法帮助人们做出正确的决策。因此,软件工程经济学研究 的基本问题是:
(1)成本、工作量生产率等因素的估算技术与方法以及估算模型的建立 与使甩这是一个核心问题(2)软件工程中不同决策的“成本效益”分析,及其与 此相关的规模经济与不经济问题(3)多目标决策分析,以便识别目标、调协与 决策相互冲突的目标、管理多个同时存在的目标等。(4)成本、工作量、人力 分布及其资源配置问题(5)不确定性的处理和风险分析问题(6)进度估计和工 期控制问题(7)数据收集与管理以及模型的校准等问题(8)相关工具问题 2.2 成本估算的方法、理论与模型 软件生命周期中包括了若干个主要的阶段与活动软件成本估算的方法之 一就是建立一个回归模型(线性的、非线性的或有参的、无参的等)。对模型的 基本要求是它能够描述软件成本和成本驱动因子间的关系,并用这一模型对样本 数据进行拟合,得出其参数值模型建立后,应对其可用性进行评价,并按如下几 个方面进行:(1)定义:模型明确定义了它要估算的成本;
(2)精确性:估算 结果接近项目的实际花费;
(3)客观性:模型避免了将大部分软件成本因子归 属于难以校准的主观因素;
(4)建设性:帮助用户理解需要做的工作;
(5)详 尽:模型能适应哪些软件系统的估算,能给出阶段和活动的细分结构;
(6)稳 定性:输入的细微变化引起输出的变化很小;
(7)范围:模型涵盖了需要估计 成本的软件项说明;
(9)可预期性:模型可避免引入那些直到项目结束才能知 道的信息;
(10)精简性:模型可避免哪些冗余的或者对结果没影响的因素已有的软件成本估算方法有算法模型、专家判断•类比推理帕金森原理、价格策略、 自顶向下、自底向上等这些方法都有其特点,但没有一种可选方法在所有方面都 比其他方法好,他们的优缺点互补。
2.3 成本估算要注意的问题 针对软件工程经济学中的成本估算需要特别注意以下几个方面:(1)软 件的成本和进度估算非常复杂,涉及的因素很多。面对不同的开发环境、管理方 式、开发模式,要选择不同的估算模型,即便是同一估算模型,具体使用时也要 根据经验和具体情况进行校准(2)好的估算模型并不能保证能做出好的成本估 算,因为它很可能是一个“垃圾输入-立圾输出”的工具:如果输入不着边际,那 么输出也就离谱(3)影响成本估算的风险因素包括:对目标系统的功能需求、 开发环境等情况的了解程度;
所运用历史数据及模型参数的可靠性;
系统分析中 的逻辑模型的抽象程度、业务处理流程的复杂程度及软件的可度量程度;
软件新 技术对成本估算方法的影响;
用户在软件开发中的参与程度,开发队伍的素质及 所采用开发模式对开发成本的影响;
对软件开发队伍复杂因素的认识程度;
软件 开发人员的稳定性;
软件开发进度、时间等非技术性因素的变更所带来的风险等。
(4)软件成本估算并非完全资金意义上的估算。项目成本中相当一部分为支付 开发人员脑力劳动报酬的费用,而这部分费用因软件开发机构的不同而存在着很 大的差别。(5)软件产品及其开发过程的特殊性决定了软件开发成本的估算方 法既不同于制造业产品的成本估算方法,也不同于建设项目的财务评价方法(6) 软件成本估算技术研究的重大突破需要坚实的理论基础缺乏大量的实验作基础, 要开展理论研究显然也是不切实际的。
过去的若干年里,人们在成本、进度估算方面做了很多工作,提出了一系 列的方法与模型,典型的模型有SDCTRWWolvertonCOCOMO等等这些模型各有 特点,同时也存在局限性与不足实际应用时,至少还要做好以下两方面的工作:
一是模型 做好本地化工作。
2.4 分析技术 2.4.1 成本效益分析 软件工程经济学在做成本效益分析时,应注意其特殊1性因为作为软件工 程项目的效益,除了经济效益外,还有一个很重要的社会效益问题,它需要协调 人与经济的关系软件工程中的规模经济指通过投资生产专用工具来获得大型项目的规模经济,如测试工具、诊断工具、文档工具、预处理程序等。而在小项目 中这些工具的成本很难收回。另外,我们应更关注软件项目的“规模不经济”问题 特别地,项目中的人越多,个体之间的分歧、编程风格差异和工作习惯上冲突的 机会就会越多,这些将降低团队的整体生产率。对此,我们应该认真分析软件工 程经济学中导致规模不经济的主要原因,并提出相应的对策。
2.4.2 净值和边际分析 本文指的“净值”与经济学中通常所讨论的“净值”不同,本文指的净值方法 假设所有收益相关的组成部分(雇员的需求满足,客户的良好愿望,用户的信息 保密,对操作员的易用性)都被转换成货币的形式边际分析用来分析自变量每増 加一单位将如何影响和决定因变量的量值本文运用成本驱动因子的敏感性分析 方法。
2.4.3 现值技术现值概念 为决策者提供了一个一致的框架,能将软件工程未来不同时刻发生的现金 流换算成单一的现值货币。现值分析主要应用于可行性分析阶段,在可选的系统 方案之间做出生命周期的成本比较,以便做出成本效益最好的决策另一个与此相 关的决策是购买系统硬件设备的时间问题买早会导致设备闲置和资金被占用;
反 之导致软件开发成本的増加与进度的推迟除利率之外,这种决策还应考虑到税、 保险实施和维护等费甩通常,这些因素可合并成一个复合的贴现率来分析。
2.4.4 风险分析项目 风险存在于项目的始终,并且许多项目失败于不恰当的风险管理据文献记 载,软件系统中的风险可以检测到,90%的风险可以避免,风险管理的投资回报 率一般在在收益和风险之间取得平衡是决策中的重要问题风险分析可帮助人们 做出稳妥的决策方案,风险分析可按如下步骤进行:首先,依据项目计划基本模 型,利用各种概率分布函数描述项目中任务的不确定性;
其次,可采用蒙托卡罗 和拉丁海波库比等抽样技术,随机地从每个不确定因素中抽取样本,进行计算, 模拟各种不同的不确定性组合,获取各种不同组合下的计算结果;
最后,借助于 统计学原理,对于这些结果数据进行分析,找出项目变化的规律,确定最大值、 最小值、平均值、标准差、方差、偏度等,并在此基础上对每个不确定性因素可 能对项目进展影响程度作敏感性分柝其它分析方法和技术可用于软件工程的经 济学分析方法还有系统分析、均衡分析和约束优化等。3.软件工程经济学的特殊性问题 3.1 软件工程管理的特殊性 软件工程管理和其它工程管理相比有其特殊性传统项目的学科基础只需 依赖某些基本原理集和自然法则就能控制系统的行为并指导开发过程,而软件是 知识产品,软件开发者的自由度较大,进度和质量都较难度量,生产效率也较难 保证,并且软件系统的复杂程度也是超乎想象的因此软件仍然是在危机中生存和 发展,生存源自于时代的需求,发展得益于人们的不懈努力。所以必须认识到软 件工程与传统工程的本质区别从经济学角度看,软件具有如下的特点:(1)软 件是由许多人共同完成的、高强度智力劳动的结晶,是建立在知识、经验和智慧 基础上的具有独创性的产物软件具有价值和使用价值(2)软件产品是无形的, 通过载体进行交易。软件的交换价值,是载体自身价值与软件价值之和,主要是 软件的价值。(3)软件产品的复制(批量生产)相应简单,其复制成本与开发 成本相比,几乎可以忽略不计。(4)软件产品一般没有有形损耗,仅有无形损 耗(5)软件维护在其生命周期中占有重要地位,是软件价值的増值过程。
3.2 与定量经济学的区别 有关研究表明,解决问题的人类经济学方法与经典的材料经济学方法之间 有着显著差别。软件工程经济学不能局限于纯定量的、最大利润的材料经济学范 畴,而要在更广阔的人类经济学背景下思考问题从面向生产到面向服务的经济转 变的全球趋势对每个行业提出了新的要求和挑战,软件工程更是如此此所以,软 件工程经济学强调人类经济学方法就显得非常重要,它需要扩展纯定量的•面向 货币的材料经济学方法,并在设计决策时认真考虑经济和人这两个重要的因素。
3.3 成本估算的准确性 影响成本估算准确性的因素主要有以下方面:(1)项目的复杂程度虽然 有一些定性的方法可用来度量工程的复杂度,但只能用在设计阶段或代码实现阶 段,很难用于计划阶段目前只能用一些主观的方法来估计一个项目的复杂程度 (2)工程规模。随着软件规模的増大,各模块之间的相关性急速地増加。(3) 结构确定性程度它是指用户需求的明确程度、功能模块划分的难易程度以及所要 处理的信息的层次特性结构的不确定性越大,估算的风险就越大(4)可供使用 的历史数据不全(5)软件需要创造性以及人与人之间的合作,但个人或团队的行为通常很难预料。(6)软件缺乏相关的定量的历史经验基础,小规模的受控 实验意义不大(7)过去的若干年里,大量有价值的研究和数据收集已为适当准 确的成本估算模型提供了一定的基础,但仍然需要进一步改进。
4.结束语 作为交叉学科,软件工程经济学既要借鉴经济学中成熟的经验技术和方法 为软件工程决策服务,也要充分认识到软件工程本身的特殊性,更要关注人与经 济的协调性尽管国内学者在该领域已经做了不少工作,但总的来说还不够,也欠 系统,希望引起人们足够的重视。
作者:唐培和(广西工学院计算机工程系,广西柳州545006)