软件工程经济学是关于在商业环境中做出与软件工程相关的决策。软件产品、服务和解决方案的成功取决于良好的业务管理。然而,在许多公司和组织中,软件业务与软件开发和工程的关系仍然很模糊。这个知识领域(KA)提供了软件工程经济学的概述。
经济学是研究价值、成本、资源及其在特定环境或情况下的关系的学科。在软件工程学科中,活动有成本,但是产生的软件本身也有经济属性。软件工程经济学提供了一种系统地研究软件和软件过程属性的方法,将它们与经济度量联系起来。在软件组织范围内和整个生产或收购业务的综合范围内做出决策时,可以权衡和分析这些经济指标。
软件工程经济学关注的是使软件技术决策与组织的业务目标相一致。在所有类型的组织中,无论是“营利性”、“非营利性”还是政府组织,这都意味着可持续地留在企业中。在“营利性”组织中,这还涉及到实现投资资本的有形回报,包括资产和使用的资本。本KA是以一种独立于焦点、产品和服务组合或资本所有权和税收限制的方式针对所有类型的组织而制定的。
像“我们应该使用特定组件吗?”从技术角度看可能很容易,但可能对软件项目和最终产品的业务生存能力产生严重影响。工程师们常常想知道这些问题是否适用,因为他们是“唯一的工程师”。经济分析和决策是重要的工程考虑因素,因为工程师能够从技术和商业角度评估决策。这个知识领域的内容对于软件工程师来说是一个重要的主题,即使他们从未真正参与到具体的业务决策中;他们将对业务问题和技术考虑因素在做出业务决策中所起的作用有一个全面的看法。许多工程建议和决策,如制造与购买,具有深刻的内在经济影响,应予以明确考虑。
本KA首先涵盖了软件工程经济学的基础、关键术语、基本概念和常用实践,以说明软件工程中的决策如何包括或应该包括业务视角。然后,它提供了一个生命周期的观点,强调了风险和不确定性管理,并说明了如何使用经济分析方法。一些实际考虑最终确定了知识领域。
软件工程经济学专题分类
软件工程经济学的主题分类如图12.1所示。
金融学是经济学的一个分支,涉及资源的分配、管理、获取和投资等问题。财务是每个组织的一个要素,包括软件工程组织。
金融领域涉及时间、金钱、风险等概念,以及它们之间的相互关系。它还涉及如何花钱和预算。公司财务是为一个组织的活动提供资金。一般来说,这涉及到平衡风险和盈利能力,同时试图使组织的财富和股票价值最大化。这主要适用于“营利”组织,但也适用于“非营利”组织。后者需要资金来确保可持续性,同时不以有形利润为目标。要做到这一点,一个组织必须
会计是金融的一部分。它允许那些资金被用来管理一个组织的人知道他们投资的结果:他们得到了预期的利润吗?在“营利性”组织中,这与有形的投资回报率有关(见第4.3节,投资回报率),而在“非营利”组织和政府组织以及“营利性”组织中,这意味着可持续地留在企业中。会计的主要作用是衡量组织的实际财务业绩,并将有关企业实体的财务信息传达给利益相关者,如股东、财务审计员和投资者。沟通通常是以财务报表的形式进行的,财务报表以货币的形式显示要控制的经济资源。选择对用户既相关又可靠的正确信息是很重要的。信息及其时间安排部分受风险管理和治理策略的控制。会计系统也是一个丰富的历史数据来源估计。
控制是财务和会计的一个要素。控制包括衡量和纠正财务和会计绩效。它确保组织的目标和计划得以实现。控制成本是控制的一个专门分支,用于检测实际成本与计划成本的差异。
现金流是资金在一定时期内流入或流出企业、项目或金融产品的流动。现金流实例和现金流的概念用于描述提案的业务视角。为了对任何具体的提案做出有意义的商业决策,需要从商业角度对提案进行评估。在开发和发布产品X的提案中,新软件许可证的付款就是一个传出现金流实例的例子。要执行这项建议就需要花钱。产品X上市后第11个月的销售收入就是一个现金流实例。因为执行了这个提议,钱会源源不断地进来。
现金流一词是指随着时间的推移,由于执行某一特定提案而产生的一组现金流实例。实际上,现金流是该提案的完整财务状况。出了多少钱?什么时候出去?有多少钱进来?什么时候送来?简单地说,如果方案A的现金流比方案B的现金流更理想,那么在所有其他条件相同的情况下,组织实施方案A比实施方案B更好。因此,现金流是投资决策的重要输入。现金流实例是指在特定时间,由于某些活动的直接结果而流入或流出组织的特定金额的资金。
现金流图是一张现金流的图片。它给读者一个快速概述的财务状况的主题组织或项目。图12.2显示了一个提案的现金流图示例。
如果我们假设候选解决方案同样能很好地解决给定的技术问题,那么组织为什么要关心选择哪一个呢?答案是,不同解决方案的成本和收益通常有很大差异。一个商业的、现成的Object Request Broker产品可能要花费几千美元,但是开发一个提供相同功能的国产服务可能要花费几百倍的成本。
如果候选解决方案都从技术角度充分解决了问题,那么选择最合适的替代方案应该基于商业因素,例如优化总体拥有成本(TCO)或最大化短期投资回报(ROI)。生命周期成本(如缺陷纠正、现场服务和支持持续时间)也是相关的考虑因素。在选择可接受的技术方法时,这些成本需要考虑在内,因为它们是终生投资回报的一部分(见第4.3节,投资回报)。
一个系统的决策过程将实现透明度,并允许以后的理由。许多组织的治理标准要求从至少两个备选方案中进行选择。系统过程如图12.3所示。它从手头的一个业务挑战开始,描述了确定替代解决方案、定义选择标准、评估解决方案、实施一个选定解决方案以及监视该解决方案性能的步骤。
图12.3显示了主要是逐步和连续的过程。真正的过程更具流动性。有时这些步骤可以按不同的顺序进行,而通常几个步骤可以并行进行。重要的是要确保没有一个步骤被跳过或缩减。同样重要的是要理解,同样的过程适用于所有级别的决策:从决定是否应该完成一个软件项目这样大的决策,到决定在软件模块中使用的算法或数据结构。区别在于这个决定在财务上有多重要,因此,在做出这个决定时应该投入多少精力。项目级决策在财务上意义重大,可能需要付出相对较高的努力才能做出决策。选择一个算法通常在财务上不那么重要,并且保证做出决策所需的努力水平要低得多,即使使用的是相同的基本决策过程。
通常情况下,如果一个组织愿意,它可以执行多个提案,而且提案之间通常存在重要的关系。也许只有同时执行方案X,才能执行方案Y。或者如果执行了方案Q,方案P可能无法执行,如果执行了方案P,方案Q也无法执行。当存在互斥的路径时,选择就容易多了,例如,A、B、C或任何被选择的路径。在制定决策时,建议将任何一套给定的提案及其各种相互关系转变为一套相互排斥的备选方案。然后可以在这些备选方案中作出选择。
从抽象意义上讲,决策过程无论是财务决策还是其他决策都是关于价值最大化的。应始终选择使总价值最大化的备选方案。基于价值的比较的财务基础是比较两个或多个现金流。有几种比较基础,包括
根据货币的时间价值,只有当两个或两个以上的现金流在同一时间点上相等时,它们才是等价的。只有当现金流在同一时间范围内表达时,比较现金流才有意义。
请注意,价值不能总是用金钱来表示。例如,一个项目是否是一个品牌名称可以显著影响其感知价值。不能用金钱来表达的相关价值,还需要用类似的词语来表达,这样才能客观地评价。
通货膨胀描述了物价的长期趋势。通货膨胀意味着同样的东西比以前要贵。如果一项商业决策的规划期限超过几年,或者如果通货膨胀率每年超过几个百分点,那么它可能会导致提案价值的显著变化。因此,目前的时间价值需要根据通货膨胀率和汇率波动进行调整。
折旧包括将有形资产的成本分摊到若干时间段;折旧用于确定资本化资产的投资如何计入几年的收入。折旧是确定税后现金流的一个重要部分,这对于准确处理利润和税收至关重要。如果一个软件产品是在开发成本发生后出售的,这些成本应该在以后的时间段内资本化和折旧。每个时间段的折旧费用是开发软件的资本化成本除以软件销售的时间段数。软件项目建议书可以与其他软件和非软件建议书或替代投资方案进行比较,因此确定这些其他建议书如何折旧以及如何估计利润是很重要的。
政府征税是为了支付所得税,所得税可能占公司毛利润的很大一部分。不考虑税收的决策分析可能导致错误的选择。税前利润高的提案在税后看来几乎没有那么有利可图。不考虑税收也会导致人们对拟议产品的利润预期过高。
金融学和商业决策中最基本的概念之一就是货币具有时间价值:它的价值随时间而变化。现在一笔特定金额的钱几乎总是有不同的价值,而不是在其他时间相同金额的钱。这个概念从最早的人类历史记录开始就存在了,通常被称为时间价值。为了比较提案或投资组合要素,应将其成本、价值和风险与净现值进行标准化。需要根据历史数据考虑货币兑换随时间的变化。这在各种跨界发展中尤其重要。
过程、活动或任务的经济效率是指在完成过程、活动或任务时实际消耗的资源与预期消耗或期望消耗的资源的比率。效率意味着“做正确的事情”。一个有效率的行为,就像一个有效率的行为一样,会产生结果,但会把必要的努力保持在最低限度。可能影响软件工程效率的因素包括产品复杂性、质量要求、时间压力、过程能力、团队分布、中断、特性转换、工具和编程语言。
有效性就是产生影响。它是实现的目标与确定的目标之间的关系。有效性意味着“做正确的事情”。有效性只看是否达到既定目标,而不看如何达到目标。
从经济学的角度来看,生产率是产出与投入的比率。输出是交付的价值。输入包括生成输出所花费的所有资源(例如,努力)。生产力从价值导向的角度将效率和效益结合起来:生产力的最大化就是以最低的资源消耗创造最高的价值。
产品是在将产品要素(或投入)转化为产出的过程中创造的经济产品(或产出)。当产品售出时,它是一种可交付物,为用户创造了价值和体验。产品可以是内部交付(如内部IT解决方案)或外部交付(如软件应用程序)的系统、解决方案、材料和服务的组合,既可以是现有的,也可以是另一产品的组件(如嵌入式软件)。
项目是“为创造独特的产品、服务或结果而进行的临时努力”。1在软件工程中,不同的项目类型是不同的(例如,产品开发、外包服务、软件维护、服务创建等)。在其生命周期中,软件产品可能需要许多项目。例如,在产品构思阶段,可能会执行一个项目来确定客户需求和市场需求;在维护期间,可能会执行一个项目来生产下一个版本的产品。
一个项目是“一组相关的项目、子项目和项目活动,以协调的方式进行管理,以从单独管理中获得无法获得的利益”。项目通常用于识别和管理在数年的时间范围内对单个客户或市场的不同交付。
投资组合是“为实现战略目标而作为一个整体管理的项目、计划、子投资组合和运营”。投资组合用于对业务线或组织内的所有资产进行组合,然后同时进行管理。查看整个投资组合可以确保考虑决策的影响,例如资源分配到特定项目,这意味着相同的资源不可用于其他项目。
软件产品生命周期(SPLC)包括定义、构建、操作、维护和退役软件产品或服务及其变体所需的所有活动。“操作”、“维护”和“退役”的SPLC活动通常发生在比初始软件开发更长的时间框架内(软件开发生命周期SDLC见软件工程过程KA中的软件生命周期模型)。此外,SPLC的操作-维护-退役活动通常比SDLC活动消耗更多的总工作量和其他资源(参见维护KA)。软件产品或相关服务所贡献的价值可以在“操作和维护”的时间框架内客观地确定。软件工程经济学应该关注所有SPLC活动,包括初始产品发布后的活动。
项目生命周期活动通常涉及五个过程组:发起、计划、执行、监视和控制以及结束[4](参见软件工程管理KA)。软件项目生命周期中的活动经常以各种方式交错、重叠和迭代[3*,c2][5](参见软件工程过程)。例如,SPLC中的敏捷产品开发涉及多个迭代,这些迭代产生可交付软件的增量。SPLC应包括风险管理和与不同供应商(如有)的同步,同时提供可审计的决策信息(例如,遵守产品责任需求或治理法规)。软件项目生命周期和软件产品生命周期是相互关联的;一个SPLC可以包括几个SDLC。
做一个商业决策从一个提议的概念开始。提案与在项目、产品或投资组合级别实现业务目标有关。提案是一个正在考虑的单独的选项,比如是否执行特定的软件开发项目。另一个建议可能是增强现有的软件组件,还有一个可能是从头开始重新开发相同的软件。每个提案都代表一个选择单元,您可以选择执行该提案,也可以选择不执行。商业决策的全部目的是根据当前的商业环境,找出哪些建议应该执行,哪些不应该执行。
投资者做出投资决策,将资金和资源用于实现目标。投资者要么在组织内部(如财务、董事会),要么在组织外部(如银行)。目标与一些经济标准有关,如实现高投资回报、加强组织能力或提高公司价值。应考虑商誉、文化和能力等无形因素。
当一个组织选择投资于一个特定的提案时,资金就会被捆绑在这个提案中,这就是所谓的“冻结资产”。冻结资产的经济影响往往从一开始就很高,并随着时间的推移而降低。另一方面,与提案相关的要素的运营和维护成本往往开始较低,但随着时间的推移而增加。提案的总成本,也就是说,拥有和经营一个产品就是这两个成本的总和。早期,冻结资产成本占主导地位;后来,运营和维护成本占主导地位。有一个时间点,成本之和最小化;这被称为最小成本寿命。
为了恰当地比较一个使用寿命为四年的提案和一个使用寿命为六年的提案,需要考虑将六年提案缩短两年或将四年提案的利润再投资两年的经济影响。规划期,有时称为研究期,是考虑提案的一致时间框架。软件生命周期之类的影响将需要考虑到建立规划范围中。一旦规划期建立起来,就可以使用多种技术将具有不同生命周期的提案放入该规划期。
价格是为了交换货物或服务而付出的。价格是财务建模的一个基本方面,也是营销组合的四个P之一。其他三个P是产品、促销和地点。在这四个P中,价格是唯一的创收要素;其余的是成本。
定价是金融和营销的一个要素。它是一个决定一个公司用产品交换什么的过程。定价因素包括制造成本、市场布局、竞争、市场状况和产品质量。定价基于固定金额、数量中断、促销或销售活动、特定供应商报价、装运或发票日期、多个订单的组合、服务选项和许多其他因素对产品和服务应用价格。只有在项目启动阶段进行消费者定价,并且是“go”决策的一部分时,消费者的需求才能转化为需求。
成本是用来生产某种东西的钱的价值,因此,不再可用。在经济学中,成本是一种因决策而放弃的选择。
沉没成本是指在某一特定时间之前的支出,通常用于从过去的支出中抽象出决策,这会在展望未来时造成情感障碍。从传统经济学的观点来看,沉没成本不应该被考虑在决策中。机会成本是为了追求另一种选择而必须放弃的另一种选择的成本。
成本核算是财务和产品管理的一部分。它是根据费用(如生产、软件工程、分销、返工)和目标成本来确定成本的过程,以便在市场上具有竞争力和成功。目标成本可以低于实际估计成本。这些成本的计划和控制(称为成本管理)是重要的,应始终包括在成本核算中。
成本计算中的一个重要概念是总拥有成本(TCO)。这尤其适用于软件,因为在最初的产品开发之后,与SPLC活动相关的成本并不明显。软件产品的总体拥有成本定义为获取、激活和保持该产品运行的总成本。这些成本可分为直接成本和间接成本。TCO是一种会计方法,对做出正确的经济决策至关重要。
绩效衡量是一个组织建立和衡量用于确定计划、投资和收购是否达到预期结果的参数的过程。它用于评估绩效目标是否实际实现;控制预算、资源、进度和决策;以及改进绩效。
挣值管理(EVM)是一种基于创造价值来衡量进度的项目管理技术。在某一特定时刻,将项目迄今取得的成果与该日期的预计预算和计划进度进行比较。进度将给定时间点已消耗的资源和已取得的成果与同一日期各自的计划值联系起来。它有助于在早期阶段识别可能的性能问题。EVM的一个关键原则是通过比较计划与实际进度、预算与实际成本来跟踪成本和进度差异。EVM跟踪比传统的成本和进度跟踪(只关注已交付的文档和产品)更早地发现偏差,从而允许更正。
终止是指终止一个项目或产品。终止可以在产品寿命结束时预先计划(例如,当预见到产品将达到其寿命时),也可以在产品开发过程中自发终止(例如,当项目绩效目标未实现时)。在这两种情况下,都应仔细准备决定,始终考虑继续与终止的备选方案。必须估算不同替代品的成本,包括替代品、信息收集、供应商、替代品、资产和为其他机会利用资源等主题。沉没成本不应该被考虑在这样的决策中,因为它们已经被花费,不会作为一种价值重新出现。
当一个组织已经有了一个特定的资产,并且他们正在考虑用其他的东西来替换它时,就会做出替换决策;例如,在维护和支持一个遗留软件产品还是从头开始重新开发它之间做出决定。替换决策使用与上述相同的业务决策过程,但还有其他挑战:沉没成本和残值。退休的决定也与完全退出一项活动有关,比如当一家软件公司考虑不再销售软件产品,或者一家硬件制造商考虑不再生产和销售一种特定型号的计算机时。退休决策会受到技术依赖性和高退出成本等锁定因素的影响。
软件工程经济学中的目标主要是业务目标(或业务目标)。业务目标将业务需求(如增加盈利能力)与投资资源(如启动项目或推出具有给定预算、内容和时间的产品)联系起来。目标适用于运营规划(例如,在给定日期达到某个里程碑,或将软件测试延长一段时间以达到所需的质量水平,参见软件测试KA中的关键问题)和战略级别(例如在规定的时间段内达到某个盈利能力或市场份额)。
估算是对实现既定目标所需的资源和时间的有充分依据的评估(参见软件工程管理KA中的工作量、进度和成本估算,以及软件维护KA中的维护成本估算)。软件评估用于确定项目目标是否能够在进度、预算、特性和质量属性的约束条件下实现。估计通常是内部生成的,不一定在外部可见。估计不应该完全由项目目标驱动,因为这可能使估计过于乐观。估算是一项周期性的活动;在项目期间,应不断地修改估算。
计划描述了为达到项目目标所必需的活动和里程碑(参见软件工程管理KA中的软件项目计划)。计划应该与目标和估计相一致,这不一定是容易和明显的,例如当一个软件项目具有给定的需求时,所需的时间将超过客户所预见的目标日期。在这种情况下,计划要求对最初的目标、估计以及潜在的不确定性和不准确之处进行审查。以实现双赢为基本原理的创造性解决方案被用于解决冲突。
为了有价值,规划应该考虑到项目约束和对利益相关者的承诺。图12.4显示了目标最初是如何定义的。根据最初的目标进行估计。这个计划试图与目标和估计相符。这是一个迭代过程,因为初始估计通常不满足初始目标。
估算用于分析和预测实现需求所需的资源或时间(参见软件工程管理KA中的工作量、进度和成本估算,以及软件维护KA中的维护成本估算)。有五种估算技术:
没有单一的估计技术是完美的,所以使用多重估计技术是有用的。由不同技术产生的估计之间的收敛性表明估计可能是准确的。估计数之间的差距表明某些因素可能被忽略了。找出导致价差的因素,然后再次重新估计,得出收敛的结果,可以得到更好的估计。
由于在项目启动和规划过程中存在许多未知因素,因此估算具有内在的不确定性;这种不确定性应该在业务决策中加以解决。解决不确定性的技术包括
优先排序包括根据共同标准对备选方案进行排序,以提供尽可能最佳的价值。在软件工程项目中,软件需求通常被优先排序,以便在进度、预算、资源和技术的限制下为客户提供最大的价值,或者提供构建产品增量,其中第一个增量为客户提供了最高的价值(参见软件需求KA中的需求分类和需求协商以及软件工程过程KA中的软件生命周期模型)。
当决策者可以为不同的可能结果分配概率时,使用风险技术下的决策(参见软件工程管理KA中的风险管理)。具体技术包括
当决策者由于所需信息不可用而无法为不同的可能结果分配概率时,使用不确定性技术下的决策(参见软件工程管理KA中的风险管理)。具体技术包括
图12.5描述了从一组相互排斥的备选方案中确定最佳备选方案的过程。决策标准取决于业务目标,通常包括投资回报率(见第4.3节,投资回报率)或所用资本回报率(ROCE)(见第4.4节,所用资本回报率)。
营利性决策技术不适用于政府和非营利组织。在这些情况下,组织有不同的目标,这意味着需要一套不同的决策技术,如成本效益或成本效益分析。
最低可接受回报率(MARR)是组织认为是良好投资的最低内部回报率。一般来说,当有另一个已知回报率为20%的活动时,投资回报率为10%的活动是不明智的。MARR是一种声明,表明一个组织有信心至少能达到这样的回报率。MARR代表组织的投资机会成本。通过选择投资于某些活动,组织明确地决定不在其他地方投资同样的钱。如果组织已经确信它可以获得一些已知的回报率,那么只有在回报率至少如此高的情况下,才应该选择其他替代方案。考虑机会成本的一个简单方法是在商业决策中使用MARR作为利率。在MARR评估的一个备选方案的当前价值显示出该备选方案比在MARR投资的价值多多少少(以当前现金计算)。
投资回报率(ROI)是衡量一家公司或业务部门盈利能力的指标。它的定义是一项投资的收益或损失(无论是已实现的还是未实现的)与投资金额的比率。投资回报率的目的各不相同,例如,包括为未来的投资和收购决策提供理由。
资本回报率(ROCE)是衡量公司或业务单位盈利能力的指标。它的定义是税前毛利润(EBIT)与总资产减去流动负债的比率。它描述了使用资本的回报。
成本效益分析是评估单个方案最广泛使用的方法之一。任何效益成本比低于1.0的提案通常可以不经进一步分析就被拒绝,因为它的成本高于效益。具有较高比率的提案需要考虑投资的相关风险,并将收益与以保证利率投资的选择进行比较(见第4.2节,最低可接受回报率)。
成本效力分析类似于成本效益分析。成本效力分析有两种版本:固定成本版本使给定成本上限的收益最大化;固定效力版本使实现固定目标所需的成本最小化。
盈亏平衡分析确定了开发产品的成本与产生的收入相等的点。这样的分析可用于在不同估计成本和收入的不同提案之间进行选择。考虑到两个或多个方案的估计成本和收入,盈亏平衡分析有助于在其中进行选择。
商业案例是从不同角度(成本、收益、风险等)为决策者总结和解释商业提案的综合信息。它通常被用来作为投资决策过程的依据。与单纯的利润损失计算不同,业务案例是由产品经理拥有并用于支持实现业务目标的计划和分析的“案例”。
到目前为止讨论的主题都是基于一个单一的决策标准:金钱。选择具有最佳现值、最佳投资回报率等的备选方案。除了技术上的可行性,金钱几乎总是最重要的决策标准,但并不总是唯一的标准。通常还有其他的标准,其他的“属性”,需要考虑,而这些属性不能用金钱来衡量。多属性决策技术允许在决策中考虑其他非财务标准。
有两类多属性决策技术在如何使用决策中的属性方面有所不同。一个家庭是“补偿性的”,或者说是单一维度的技术。这个家族把所有的属性都压缩到一个单一的功绩数字上。这个族被称为补偿性的,因为对于任何给定的选择,一个属性中较低的分数可以通过其他属性中较高的分数来补偿或交换。补偿技术包括
•无量纲缩放
•加法加权
•层次分析法。
相比之下,另一个家族是“非补偿性”技术,或者说是全尺寸技术。此族不允许在属性之间进行权衡。在决策过程中,每个属性都被视为一个单独的实体。非补偿技术包括
•主导地位
•令人满意
•词典编纂。
优化分析的典型用途是研究一系列值的成本函数,以找到总体性能最佳的点。软件经典的时空权衡就是一个优化的例子;运行速度更快的算法通常会占用更多的内存。优化平衡了更快运行时的价值和额外内存的成本。
实物期权分析可以用来量化项目选择的价值,包括推迟决策的价值。这样的选项很难精确计算。然而,意识到选择具有货币价值,可以洞察决策的时机,例如增加项目人员或延长上市时间以提高质量。
通常软件工程项目和产品对于应该实现的目标并不精确。软件需求是明确的,但是增加一点功能的边际价值是无法衡量的。结果可能是延迟交货或成本过高。“足够好”原则将边际价值与边际成本联系起来,并为确定交付物“足够好”时的标准提供指导。这些标准取决于业务目标和不同备选方案的优先级,例如软件需求排名、可测量的质量属性或与产品内容和成本相关的进度。
竞赛原则(减少事故和控制的本质)是一个流行的规则对好足够的软件。事故意味着不必要的管理费用,如镀金和返工,由于后期缺陷消除或太多的要求变化。本质是顾客为之付出的代价。软件工程经济学提供了定义标准的机制,这些标准决定了可交付成果何时“足够好”才能交付。它还强调,这两个词都是相关的:“好”和“足够”。质量不足或数量不足是不够的。
敏捷方法是“足够好”的例子,它试图通过减少延迟返工的开销和因添加对用户具有低边际价值的特性而产生的镀金来优化价值(参见软件工程模型中的敏捷方法和软件工程中的方法KA和软件生命周期模型)过程(KA)。在敏捷方法中,详细的计划和冗长的开发阶段被增量计划和频繁交付的小增量可交付产品所取代,这些产品由用户代表进行测试和评估。
经济摩擦是阻止市场进行完美竞争的一切因素。它涉及距离、交付成本、限制性法规和/或不完善的信息。在高摩擦市场,客户没有太多的供应商可供选择。在一家企业里呆了一段时间,或者在一个好的地方开了一家商店,这就决定了经济状况。新的竞争者很难创业和竞争。市场发展缓慢,可以预见。无摩擦市场恰恰相反。新的竞争对手不断涌现,客户反应迅速。市场是不可预测的。理论上讲,软件和IT是无摩擦的。新公司可以很容易地创造产品,而且通常比老公司的成本低得多,因为他们不需要考虑任何遗留问题。营销和销售可以通过互联网和社交网络进行,基本上免费的分销机制可以使企业逐步走向全球。软件工程经济学旨在为判断一个软件企业的表现以及一个市场的实际自由度提供依据。例如,当应用程序必须通过应用程序商店销售并遵守该商店的规则时,软件应用程序开发商之间的竞争就会受到抑制。
生态系统是由在特定领域工作的所有相互依赖的利益相关者、业务单位和公司组成的环境。在一个典型的生态系统中,有生产者和消费者,消费者为消费的资源增值。请注意,消费者不是最终用户,而是使用产品来增强产品的组织。例如,软件生态系统是应用程序的供应商,与在不同地区进行安装和支持的公司合作。任何一个都离不开另一个。生态系统可以是永久的,也可以是暂时的。软件工程经济学提供了评估建立或扩展生态系统的替代方案的机制,例如,评估是与特定分销商合作,还是由在某个地区提供服务的公司进行分销。
离岸外包是指在企业的母国以外进行销售和营销以外的业务活动。企业通常要么在低成本国家设立离岸分支机构,要么要求国外的专业公司执行各自的活动。因此,不应将离岸外包与外包混为一谈。公司内部的离岸外包被称为俘虏离岸外包。外包是以结果为导向的与供应商的关系,供应商为企业执行业务活动,而传统上,这些活动是在企业内部执行的。外包是独立于现场的。供应商可以住在企业附近或离岸(外包离岸)。软件工程经济学提供了基本的标准和业务工具来评估不同的采购机制并控制其性能。例如,使用外包供应商进行软件开发和维护可能会降低每小时的软件开发成本,但由于对监控和通信的需求增加,会增加小时数和资本支出。(有关离岸外包和外包的更多信息,请参阅《软件维护手册》管理问题中的“外包”。)