黄 杰,高 珍,范鸿飞
(1.同济大学 软件学院,上海 201804;2.同济大学 计算机与信息技术国家级实验教学示范中心,上海 201804)
“软件工程”概念源于1968 年秋NATO 科技委员会组织的软件工程学术会议,会议主席Bauer 教授定义软件工程是“为了经济地获得可靠的、可以在真实机器上运行的软件,而制定和使用的健全的工程原理和方法,”[1]。半个世纪以来,人们在软件工程领域取得的进展极大丰富了软件工程的内涵,但是软件生产者和使用者对软件工程“经济性”的要求非但没有减少,反而愈加受到业界和学界的重视[2-4]。在电气和电子工程师协会(IEEE)发布的《软件工程知识体系》(SWEBOK 2014)中,软件工程经济学已经独立成为一个核心知识域(KA),其定义是“关于在商业环境中软件工程项目决策的学科领域。软件产品、服务及解决方案的成功均有赖于良好的业务管理”[5]。
在教育界培养软件工程人才的供给端,教育部发布的《普通高等学校本科专业类教学质量国家标准》(2018)[6],将工程经济学列为计算机类软件工程专业的核心课程之一。教育部高等学校软件工程专业教学指导委员会组织编写的《中国软件工程知识体系》(C-SWEBOK)[7],也已将软件工程经济学作为该知识体系中的一个独立知识域。中国工程教育专业认证协会发布的《工程教育认证标准》(2017 修订稿),要求大学工科毕业生必须达到“理解并掌握工程管理原理与经济决策方法,并能在多学科环境中应用”之能力标准[8]。针对这项认证要求,软件工程专业细化的工程认证指标点有3 项,即“具备运用工程原理和经济决策方法分析软件工程系统方案及其可行性的能力”“具备将专业知识运用于管理具有多学科特征的系统方案的能力”和“具有约定和管理变化需求的能力”。目前国内高校软件工程专业普遍将软件工程经济学作为知识模块嵌入在软件工程或软件项目管理等课程中授课。同济大学(2013 年起)、华南理工大学(2014 年起)及四川大学(2015 年起)等高校,相继试点开设软件工程经济学课程。华南理工大学左保河教授于2017 年起在“好大学在线”开设软件工程经济学MOOCs 课程[9]。
在产业界吸纳软件工程人才的需求端,根据上海交通大学2015 年对上海地区ICT 企业问卷调查的统计数据显示[10],企业对于毕业生缺乏“设计中考虑经济的原则”和“管理知识的应用”之评价,分别位列企业对人才知识与能力度量(期望值与实际值)差距最大项的第2 位和第3 位。这反映出处于幼年期的软件工程经济学教学之产出与产业界对软件工程专业人才所应具备的本专业经济学知识及应用能力的需求之间存在“鸿沟”。
关于学界和业界对软件工程专业人才经济学知识及能力“鸿沟”之成因,主要来源于以下两个方面。
比较《中国软件工程知识体系C-SWEBOK》(2019)与教育部《普通高等学校本科专业类教学质量国家标准》(2018)可以发现,这两个标准在软件工程专业经济学知识域的教学标准上存在明显差异,前者是软件工程经济学独立知识域,后者则推荐将工程经济学作为专业核心课程(结合《高等学校软件工程专业规范》(2011)之相关描述:工程经济学可用于任何工程教学,但可以将其裁剪以适合软件工程教学)[11]。目前国内高校的软件工程经济学课程教学基本上采用后者的标准,即将工程经济学知识域裁剪拼贴后用于软件工程经济学课程教学,由此产生课程讲授的知识与中国软件工程知识体系之间存在不一致。不仅导致课程教学内容相比中国软件工程知识体系对应知识域内容的短斤缺两,而且课程教学内容极度地缺乏与软件工程知识体系内相关知识域或知识点的有效融合。
软件工程经济学虽发端于工程经济学且两者联系紧密,但是两者知识域的起源或研究对象有着本质性的不同。软件工程经济学起源于软件,软件是人类智力劳动的成果。软件具有无形、接近零成本复制且复制质量无损等区别于传统工业产品(实体)的显著特征,研究对象性质的差异导致了这两个学科的知识域结构及内容之差异。例如,传统行业的“边际成本递增”经济学规律,在软件行业则呈现出“边际成本递减”规律;又如传统工业产品(如汽车)在使用过程中逐步磨损且可以用备用部件更换磨损件,产品的生命周期成本曲线是“浴盆曲线”,而软件则不存在备用部件,软件的缺陷暗示了设计缺陷或是从设计转化到机器可执行代码过程中的错误,软件的生命周期成本曲线是“风帆曲线”。知识域结构及内容的差异使得软件工程经济学在软件成本测量、软件定价(策略)、软件设计、软件配置管理以及软件项目效益评价等领域的原理与方法彻底改写了传统工程经济学的原理与方法,因此不能简单地将工程经济学内容在裁剪后用于软件工程经济学教学,而是必须立足于软件工程学科本体,综合运用计算机科学与技术、经济学、管理学、法学及会计学等多学科知识的交叉融合,脚踏实地构建软件工程经济学知识体系,解决“软件工程+”多学科知识交叉融合深度与广度不足的问题。
现有多数高校软件工程经济学课程偏重于工程经济学理论与方法的传授,缺少与业界软件工程最佳实践相结合的教学内容。例如,在供给与需求知识点教学中,缺失反映软件市场特征的网络平台教学内容,而网络平台恰恰是软件引领的新兴市场区别于传统市场供给与需求之最明显特点;又如在软件成本测算知识点教学中,停留在讲解经验估算法、功能点(FP)及代码行(LOC)等测量方法层面,未能将《软件工程 软件开发成本度量规范》(GB/T36964—2018)等来自于我国软件及信息技术行业最新实践成果整合进教学内容,而该标准正是我国软件及信息技术行业推荐采用的现行标准,是毕业生走上职业岗位必须掌握的知识;再如在软件项目的效益/效果分析知识点教学中,缺少结合中国会计准则开展教学,不仅会导致软件项目经济效益分析准确度误差,而且严重削弱了软件工程专业学生在面临创新创业机遇时采用业界通行的经济分析方法设计与选择最佳方案及创业融资的能力。
软件工程经济学作为一门以“软件工程+”多学科知识交叉融合为基础和特征的软件工程专业课程,其教学内容一则必须体现多学科知识的交叉整合,二则教学内容必须紧跟软件技术发展及行业需求的演进,及时吸纳来自国内外业界一线的最佳实践成果,如此才能符合培养学生达成“理解并掌握工程管理原理与经济决策方法,并能在多学科环境中应用”之国家工程教育认证标准。
鉴于目前多数大学本科生在入学前缺少经济学基本知识的学习与积累,特别是考虑到我国高中教育普遍缺乏类似欧美高中教育中的商业与经济基础课程,可以设计在软件工程经济学课程教学中引进课内实验教学手段,降低课程中部分知识点的学习门槛,提供学生动手实践虚拟实验项目,增强学生学习新知识的信心和获得感;逐步增加课内实验教学知识点,精心设计模拟场景的实验案例,让学生通过亲身实验,体验及快速掌握软件工程经济学主要知识点。同时,基于实验项目敏捷灵活的特点,每年迭代2~3 个实验项目,用业界新方法、新参数重构实验项目。软件工程经济学“理论+实验”教学框架详见表1。
(1)理解软件设计的工作分解结构(WBS)方法,综合运用软件研发成本国标及至少两种软件工程量估算方法,估算小型软件系统项目工程量,编制该项目工程量文件。
表1 软件工程经济学“理论+实验”教学框架表
(2)理解软件市场及软件平台经济的特点,基于软件产品工程量测算结果,结合本地区软件产业生产率等参数,测算软件项目投资;根据软件项目融资方式,测算资金时间价值,推荐合理的项目投融资方案。
(3)理解软件项目财务评价在软件工程项目决策中的作用,设计市场策略及软件定价,构建软件项目财务评价模型,具备计算软件项目盈利能力与偿债能力的能力。
(4)理解软件项目风险特点,测算风险指标,具备设计合理的项目风险防控预案能力。
实验1:软件项目工程量测算实验。根据实验指导书提供的小型软件系统项目需求,运用工作分解结构方法,分解该系统至粒度合理的模块;选择至少两种软件工程量估算方法(必须包含一种功能的方法),估算各模块工程量并计算软件项目的总工程量;归纳总结实验过程及全部数据信息;撰写实验报告,按时提交实验指导教师。
实验2:软件项目投资度量实验。依据实验1 测算所得的软件项目工程量,按照实验指导书要求,合理选择上海地区软件生产率指标(包括软件过程各岗位、各工种绩效指标以及平均工资),计算软件项目造价;规范编制软件项目造价文件;撰写实验报告,按时提交实验指导教师。
实验3:资金时间价值测算实验。按照实验指导书及实验指导教师的要求,依照软件项目需求,利用Excel 函数及电子表格软件工具,结合项目筹资方案,合理选择及运用资金时间价值计算公式,进行资金等值计算实验(包括现值、终值及年金);并根据计算结果,分析且推荐一个软件项目投资管理的最佳方案;撰写实验报告,按时提交实验指导教师。
实验4:软件项目财务评价实验。按照实验指导书要求及实验指导教师的要求,收集拟开发软件项目的业务目标;调研该软件项目的目标市场结构及经济环境等多维度信息;基于对上述信息的分析,设计拟开发软件项目的市场策略与软件产品或系统的定价方法;设计构建软件项目的财务评价模型;根据实验期间的国民经济经济参数,测算实验项目的盈利能力和偿债能力;撰写实验报告,按时提交实验指导教师。
实验5:软件项目风险分析实验。根据实验指导书及实验指导教师的要求,诊断候选软件项目财务状况及风险类型,设计项目财务风险分析方案、风险预警机制及风险防控方法;合理选择风险计算方法;诊断软件项目风险来源(如筹资风险、投资风险及经营风险等);推荐合理的软件项目风险防范预案;撰写实验报告,按时提交实验指导教师。
在课程中采用“理论+实验”探究式教学法可以取得良好效果。教师在课程授课过程中应充分尊重学生的主体地位,注重发挥学生学习的主观能动性。教师在教学过程中作为教学过程的引导者与组织者,努力寻找教学内容与教育对象之间最佳结合点,研究学生的思维方式及其解决问题的思维习惯,借助实验项目和案例引导,使学生将直接经验与所学的知识间建立起映射关系,并力求在此基础上深化应用相关知识。例如,讲解“需求、供给与均衡”知识点时,以嘉定校区校园内的自行车租赁业务案例为引导,模拟当学生作为唯一消费者时,在开学或毕业季与正常学期之间的自行车供需变化情况,进而当允许教师加入这个市场后因购买力不同而对这个局部市场租赁价格产生的影响,继而当租赁价格上升后校区管理者对价格采取控制措施后,对需求及消费者的影响,最后假设开放这个市场引进外来竞争者或者出现自行车替代产品后对供需双方的影响。学生们通过切身经验体会,逐渐理解这组概念。
在实验教学中也布置一定数量的课外阅读作业,加深学生对所做实验的原理及其应用之掌握,教师也可以从学生提交作业中获得反馈信息改进教学。例如,课内做完“供给—需求”实验后,布置一篇书面作业,要求学生课外阅读并描述他所发现及理解的软件产业特征。作业提交后,选取有创业意向学生、正在校外企业实习学生以及在校学习学生多篇有代表性的作业,请学生们上讲台宣讲他们通过实践体会到的或者通过阅读所发现的软件产业特征。书本理论与实习实践结合,让学生自觉主动地探索、交流并认识到软件产业特征。通过这种方式,学生的主体地位和自主学习能力都得到了培养。
软件工程经济学作为一门理论与实验相结合的特色课程,基于试卷的考核方式不足以准确地测量学生对于课程理论知识和实践能力掌握的程度,设计采用“课堂问答+实验+课程设计项目”三段式组合的考核方式,以评价学生在该课程全过程学习中的成绩。课堂问答和课内实验两部分成绩占总成绩50%,课程设计项目占总成绩50%。
课内实验和课程设计项目是作为必须完成的课程考核项目,每位学生必须提交全部课内实验项目报告和一项课程设计项目,其中课程设计项目以小组方式开发,允许最多3 位学生组成小组共同完成。课程设计项目选题由学生自主选择,大多数学生会选择自己感兴趣或者在外实习单位的课题或者创新创业课题作为课程设计项目,个别学生若觉得选题困难也可以通过与教师沟通讨论确定项目选题。课程设计项目需要在学期末以小组项目答辩方式获得成绩,在答辩考核过程中将着重考查小组成员将经济学思维用于软件工程研究对象的分析建模能力、选择合理方法与合适的参数估算软件项目投入产出的计算能力以及小组管理与成员合作能力等。
使用软件工程经济学“理论+实验”教学框架授课后,学生运用经济学理论和软件工程方法解决问题的综合能力得到明显提升,贡献了一批优秀作品,例如,“个性餐饮服务系统可行性研究报告”依据现场问卷调查收集数据结合专业经济测算,设计的星巴克专卖店客户推荐系统得到了顾客首肯;“智能资产配置投资平台系统”将人工智能技术应用于优化金融工程算法,设计开发出智能投顾系统,成功地发掘出一批符合条件的潜在客户,并为他们提供符合其投资习惯与风控级别的投资产品。
软件工程经济学教学对教师很有挑战。教师不仅要有扎实的软件工程学科知识功底,还需具备学习与深刻理解经济、管理等学科相关知识以及运用于软件项目设计开发及运维的能力。要教好软件工程经济学这门课程,应基于大学生特点低门槛起步、增量迭代提升,以增强学生从经济视角剖析和解决软件工程问题的能力。统筹考虑课程理论教学与实验教学安排,精心设计实验项目及知识点间的衔接,使学生在学中做、做中学的过程中,增强学习新知识的获得感。