采用精益和DevOps方法教授精益软件开发
1. 引言
在信息技术教育领域,将精益方法论应用于“精益软件开发”本科课程,同时融入完整的DevOps实践,具有重要意义。软件的开发和交付过程之间可以基于已有的精益实践建立紧密联系,这意味着DevOps方法实现端到端自动化需要对精益原则和思维有深入理解。
很多时候,即使是高级管理人员也会将精益与一些精益实践的应用相混淆。实际上,这些实践可以在任何环境中应用,即便它们最初是在精益组织中提出的。因此,课程的目标是让学生理解精益的核心,使其能够理解精益在新的软件开发环境中的适用性。为了实现这一目标,核心思路是让学生“感受”精益方法,为此设计了一系列活动,将精益理念融入课堂。
课程强调了大野耐一引入、沃麦克在其多本著作中广泛描述的精益管理的两个参考原则:
- 消除浪费:仔细分析围绕产品生产或服务交付的所有活动,判断它们是否有助于实现目标,或者是否是环境规范和法规所要求的。若不满足这两个标准之一,则消除该活动,必要时对剩余任务进行重组。
- 自动化(Autonomation):指法规(希腊语中的“nomos”)自动应用,无需任何特定行动或控制来启动,即内生控制。
2. 课程总体方法
课程旨在用精益方法教授学生精益软件开发,让他们更深入地理解这一主题。很多软件公司声称采用敏捷方法,但实际上并未真正实施,这表明了解精益和应用精益是两回事。课程期望学生能以精益的方式思考和行动,这需要在学习过程中按照精益原则组织活动,否则学生可能会发现课程内容与教学方式存在矛盾,从而错过课程的核心思想。
在教育背景下,消除浪费和自动化有具体含义:
- 消除浪费:
- 充分利用课堂时间。
- 以最高效的方式布置作业。
- 消除学生和教师无用的行政负担。
- 自动化:
- 立即提供评分,即使存在一定不精确性,但能实现即时反馈。
- 共享作业,让学生可以相互比较解决方案和评分。
这些概念催生了以下参考教育活动:
- 定期阅读和观看(如果是视频)家庭作业,思考课程内容。
- 进行重大挑战报告和展示,将精益方法应用于非传统组织环境,并向全班汇报。
- 进行简报报告,学生学习软件工程新主题,复习指定论文,准备并进行展示。
- 课堂参与和测试,丰富讨论,分享见解、经验,提出关键问题并分析材料。
该课程对学生的背景要求较低,即使是编程知识有限的一年级学生也能学习。
3. 正面授课
正面授课由课程讲师指导,多数情况下课程形式非常不拘一格且具有实验性。学生被要求积极参与,进行展示,有时在讨论中发挥主导作用,相互交流和解释课程内容,而非单纯聆听讲师讲解。
正面授课的主题包括:
- 软件指标和非侵入式测量
- 泰勒主义、福特主义和精益思维
- 软件工程中的精益
- 敏捷方法
- 敏捷的问题和阴暗面
- 迈向精益软件开发
- GQM+和经验工厂
课堂通常这样组织:
|时间安排|活动内容|
| ---- | ---- |
|前75分钟|讲师对之前的讲座和展示进行交叉回顾|
|后75分钟| - 在线测验,作为最终成绩的一部分
- 客座讲师展示或在线视频观看
- 个人回顾重大挑战的进展
- 对课堂所学内容进行最终反思|
课堂中消除了一切干扰因素,如不允许在课堂开放区域使用手机,仅在需要时使用笔记本电脑。这里体现了消除浪费和自动化:
- 消除浪费:消除手机和笔记本电脑的干扰,消除等待评分和反馈的时间。
- 自动化:讲师在课程开始时的口头回顾、自动评分的测验、个人对重大挑战的回顾以及课程结束时的最终反思。
4. 即时批改和评分
高效学习活动的关键是即时反馈。在“精益软件开发”这类课程中,很多内容较为模糊,学生可能会对正确与否感到困惑,因此作业的即时批改和评分至关重要。
在课程的每次作业中,学生使用学习管理系统(Moodle)上传解决方案,讲师立即开始评分,结果在同一课堂上即可让学生知晓。但即时评分的主要原因并非如此,更重要的是避免作业提交或任务完成与评分之间的无用时间间隔,这与消除浪费的概念相关,对整体组织有积极影响。在进行即时评分时,会引导学生认识其价值,并解释其与消除浪费这一核心原则的联系。
5. 简报
简报旨在拓宽学生对主题的理解,让学生阅读和展示与精益软件开发相关的工作。特别强调实证研究和展示现有技术根源的历史工作。在简报过程中,学生需要:
- 复习指定论文,学习新主题。
- 准备5分钟的简短展示。
- 进行展示,并接受5分钟的问答环节。
简报有明确要求,需与课堂已讲解内容以及软件开发的整体理论相联系。每份简报的交付物包括:
- 一页的展示摘要。
- 最多5张展示幻灯片。
对摘要和展示的篇幅限制很严格,这有助于学生优先关注价值,区分交付物的价值和文本篇幅。简报的评分标准包括:
- 提交文档和展示的质量。
- 理解的创新性。
- 分析和发现的深度。
这里体现了消除浪费和自动化:
- 消除浪费:简短的展示和复习有助于提取重要思想和概念,学生能在短时间内深入理解主要内容。
- 自动化:5分钟的问答环节实现了内生控制,揭示了分析水平,帮助学生了解需要改进的部分。
6. 与专家的Skype会议
每次与专家的Skype会议按以下方式准备:
- 学生收集专家相关资料,如视频、论文等。
- 会议前一周,学生集体在共享文档中收集向专家提问的问题,该文档由所有学生编辑。专家在会议前可看到这些问题和感兴趣的话题。
会议中,专家可能从一开始就回答问题,有时会进行简短的介绍性发言。专家包括Dave Thomas、Alistair Cockburn等。讨论由课程讲师主持,学生可向讲师发送问题,经讲师允许后向专家提问。
这种教育活动体现了消除浪费和自动化:
- 消除浪费:会议前收集和讨论话题及问题,消除了时间浪费;集体编辑减少了重复工作。
- 自动化:由讲师引导会议,帮助学生专注于与专家的互动和专家的回答,而无需考虑下一个问题。
7. 重大挑战
重大挑战要求学生将精益软件开发概念应用于其他知识密集型行业领域,并在课堂上报告结果。其目的包括:
- 确定所研究行业的目标。
- 确定衡量目标实现程度的具体标准。
- 制定该领域的策略。
- 确定“精益”在该行业的含义。
- 与(精益)软件开发技术进行比较。
- 确定:
- 所研究行业可从(精益)软件开发中学到什么。
- (精益)软件开发可从所研究行业中学到什么。
每个重大挑战由学生两人或三人一组完成。挑战任务采用拉式分配方式,学生可自行组队从可用挑战列表中选择任务,使用维基作为团队编辑平台,并采用先到先得的分配策略。在特定截止日期后,若有未分配的挑战,则由讲师分配。
每个重大挑战需要学生复习现有资料(书籍、科学论文、新闻等),进行实证研究,必要时采访该领域的关键专家。最终成果需通过维基提交,包括最多10页的综合报告和最多10张幻灯片的展示。
重大挑战的评分标准明确:
- 提交文档的质量。
- 发现的创新性。
- 分析所使用资料的广度。
- 分析和发现的深度。
- 从(实证)分析中合理推导发现的明确证据。
同时,学生若想获得最高分,需应用课程中讨论的处理不确定性、不可逆性和复杂项目等原则。
8. 精益方法与DevOps方法的联系
DevOps方法实现端到端自动化需要对精益原则和思维有深入理解。DevOps方法的应用需要自动化,这是精益方法的两大支柱之一。自动化能使法规在需要时自动应用,无需特定行动或控制。例如,实时评分将学生开发解决方案和测试接受解决方案这两个过程紧密联系起来,向学生展示了开发和运营(评分)作为同一(学习)过程两个阶段的清晰示例。因此,精益方法为理解DevOps方法的核心思想提供了关键。
9. 总结与展望
本次课程围绕让学生在学习精益软件开发的过程中体验精益组织这一理念展开。目标是帮助学生为新组织定义合适的精益流程,引入和制度化该流程,并衡量其引入和制度化的结果。同时,努力让学生学会识别“精益”在特定组织中的含义,尤其关注软件开发领域。
目前这项工作才刚刚起步,正在不断进行实验,希望能有其他机构对复制这种教学方法感兴趣,并愿意与有兴趣的教师分享全部经验。
采用精益和DevOps方法教授精益软件开发
10. 课程活动的精益体现总结
为了更清晰地展示课程中各项活动是如何体现消除浪费和自动化这两个精益原则的,我们可以用一个表格来进行总结:
|活动类型|消除浪费的体现|自动化的体现|
| ---- | ---- | ---- |
|正面授课|消除手机和笔记本电脑干扰,消除等待评分和反馈时间|讲师口头回顾、自动评分测验、个人回顾挑战进展、课堂最终反思|
|即时批改和评分|避免作业提交与评分间的无用时间间隔|即时提供评分和反馈|
|简报|简短展示和复习提取关键内容,避免冗长报告|5分钟问答环节实现内生控制|
|与专家的Skype会议|会前收集问题消除时间浪费,集体编辑减少重复工作|讲师引导讨论,学生专注互动|
|重大挑战|拉式分配任务避免资源闲置,明确成果篇幅限制|按既定流程完成挑战和评分|
从这个表格可以看出,课程中的每一项活动都紧密围绕着精益原则展开,通过消除各种形式的浪费和实现自动化控制,提高了教学效率和学生的学习效果。
11. 课程活动流程分析
下面我们用mermaid流程图来分析一下课程中各项活动的大致流程:
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px
classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px
A([课程开始]):::startend --> B(正面授课):::process
B --> C(即时批改和评分):::process
B --> D(简报):::process
B --> E(与专家的Skype会议):::process
B --> F(重大挑战):::process
C --> G{是否达到课程目标?}:::decision
D --> G
E --> G
F --> G
G -->|是| H([课程结束]):::startend
G -->|否| B
这个流程图展示了课程活动的循环过程。从课程开始,先进行正面授课,然后同步开展即时批改和评分、简报、与专家的Skype会议以及重大挑战等活动。每次活动结束后,会评估是否达到课程目标,如果未达到则继续循环进行各项活动,直到达到目标为止。
12. 学生学习效果的评估与提升
为了确保学生能够真正掌握精益软件开发的知识和技能,课程采用了多种方式来评估学生的学习效果。除了前面提到的各项活动的评分标准外,还通过频繁、正式化的学生反馈以及与学生的定期会面来了解课程的进展和学生的学习情况。
学生反馈的方式包括:
- 定期填写调查问卷,对课程内容、教学方法、活动安排等方面进行评价。
- 在课堂上进行小组讨论,分享自己的学习体验和遇到的问题。
- 与讲师进行一对一的交流,提出自己的疑问和建议。
根据学生的反馈,讲师可以及时调整教学策略,优化课程内容和活动安排。例如,如果学生反映某个主题的讲解不够清晰,讲师可以增加相关的案例分析或补充更多的资料;如果学生觉得某项活动的难度过高或过低,讲师可以适当调整活动的要求和难度。
13. 课程的可复制性和推广价值
这种采用精益和DevOps方法教授精益软件开发的课程具有很强的可复制性和推广价值。其原因主要有以下几点:
-
低背景要求
:课程对学生的编程知识和专业背景要求较低,即使是一年级的学生也能参与学习,这使得课程可以在更广泛的学生群体中推广。
-
明确的原则和方法
:课程围绕消除浪费和自动化这两个核心精益原则,设计了一系列具体的活动和教学方法,这些原则和方法具有普遍适用性,可以在不同的教学环境中进行复制。
-
注重实践和体验
:课程通过让学生参与各种实践活动,如重大挑战、简报等,让学生在实践中感受精益方法的应用,这种体验式学习方式能够提高学生的学习兴趣和学习效果,也更容易被其他教育机构借鉴。
为了推广这种教学方法,可以采取以下步骤:
1.
分享经验
:与其他教育机构和教师分享课程的设计理念、教学方法和实践经验,可以通过举办研讨会、发表论文等方式进行。
2.
提供资源
:将课程的教材、案例、活动设计等资源进行整理和公开,方便其他教师参考和使用。
3.
合作交流
:与其他机构开展合作,共同开展教学实验和研究,进一步完善教学方法和提高教学质量。
14. 未来的改进方向
虽然目前的课程已经取得了一定的成果,但仍有一些方面可以进行改进和完善。未来可以从以下几个方向进行探索:
-
增加实践项目的多样性
:目前的重大挑战主要集中在知识密集型行业领域,可以考虑增加一些不同类型的实践项目,如创业项目、社会公益项目等,让学生在更广泛的场景中应用精益方法。
-
强化技术工具的应用
:随着科技的不断发展,可以引入更多的技术工具来辅助教学,如在线学习平台、虚拟实验室等,提高教学的效率和效果。
-
加强国际交流与合作
:与国外的教育机构和企业开展交流与合作,引进先进的教学理念和实践经验,拓宽学生的国际视野。
15. 总结
采用精益和DevOps方法教授精益软件开发是一种创新的教学模式,通过将精益原则融入到课程的各个环节中,让学生在学习过程中亲身体验精益组织的运作方式。课程中的各项活动,如正面授课、即时批改和评分、简报、与专家的Skype会议以及重大挑战等,都紧密围绕消除浪费和自动化这两个核心原则,提高了教学效率和学生的学习效果。
这种教学方法具有很强的可复制性和推广价值,未来可以通过分享经验、提供资源和开展合作等方式进行推广。同时,为了进一步提高教学质量,还可以在实践项目多样性、技术工具应用和国际交流合作等方面进行改进和完善。相信随着不断的探索和实践,这种教学方法将能够培养出更多具备精益思维和实践能力的软件开发人才。
超级会员免费看
2282

被折叠的 条评论
为什么被折叠?



