软件工程——清华大学《软件工程》课程学习与分享

软件工程——清华大学《软件工程》课程学习与分享

  • 1. 课程相关信息
    • 1.1 课程简介
    • 1.2 教师团队
    • 1.3 课程编程语言
    • 1.4 课程参考教材
  • 2. 组织过程资产输入
    • 2.1 编程的学习与实践
    • 2.2 PMP项目管理经验
  • 3. 软件工程
    • 3.1 软件生命周期模型
    • 3.2 软件需求
    • 3.3 软件设计
    • 3.4 软件构造
    • 3.5 软件测试
    • 3.6 软件维护
    • 3.7 软件开发管理
  • 4.参考学习的书目教材

博主在研究生时期主要用Fortran做数值计算方面的算法研究,现在工作上会用到Python做一些数值计算软件二次开发及自动化的应用。由于博主处在的汽车行业正经历“软件定义汽车”的时代浪潮中,但博主自觉自己在软件工程方面的知识还有所欠缺,所以早前就有在相关方面做拓展学习和积累,本次就简单介绍与记录下自己之前学习的清华大学的《软件工程》的视频课程。
当然自己写此篇博文,一方面是为了做学习记录,另一方面是课程讲的确实挺好。现在的视频课程的学习平台很多,除了慕课和清华学堂,还有b站或其他视频 站,课程资源繁多琳琅满目的时候,很有可能让人看花了眼难以选择。而且不同课程授课水平各不一样,有些讲的好,通俗易懂旁征博引,有些课程可能就略显照本宣科,还是需要做一番筛选的。自己当时就软件工程课程相关公开课做过比较,对比下来发现清华大学的这么《软件工程》课程讲的不错。所以也秉承着学习分享的态度,希望为同样有兴趣系统学习软件工程的小伙伴们做个参考。

1. 课程相关信息

1.1 课程简介

本课程从软件生命周期的角度讲解软件工程的基本概念、基本原理和基本方法,内容涉及开发管理、需求建模、设计实现和测试维护等四大部分的相关基础知识,强调软件工程的根本性和永久性原则,诸如可测试性、软件体系结构、模块化和可复用性等,关注软件系统的复杂性问题以及迭代式的开发方法,重视分析问题与解决问题的能力以及软件工程实践训练,培养学生良好的工程化开发习惯。经过本课程的学习,学生能够掌握软件工程的基础知识,从工程学角度认识软件在大型复杂系统中的设计和应用,具备作为软件工程师从事软件开发所需的专业能力。
该课程于2019-10-30上线,应该算是新编课程,所以课程的内容一定程度上也结合反映了当下软件工程的新发展及应用的,课程总共分为15个章节,共计83堂课,总课时约为17小时。课程所在的学堂在线 址如下:
《软件工程》——清华大学课程

1.2 教师团队

以下是官 上贴出的教师团队:

1.3 课程编程语言

本课程中相关软件工程的知识介绍,主要是以编程语言Python来配合讲解, 使用的Python IDE(集成开发环境)是Pycharm。相关的代码分析工具为 Pylint,单元测试工具使用的是PyUnit。
对博主而言,自己熟悉的Python编程语言,且常用的Python IDE就是Pycharm,相关工具Pylint/ PyUnit也会用到,博主的博客专栏《机器学习实战之路》就是基于此开发环境实现。所以本课程要求的相关知识基础方面,还算与博主这块较为匹配的。
不过不同于自己博客专栏《机器学习实战之路》的论述,机器学习专栏更多的是定位在开发技术人员的分享学习,对于广大的程序员开发同胞来说,Python和Pycharm等这些概念是无需多言的。不过《软件工程》本课程的定位在于全面系统的介绍软件工程,相当于一门专业导论课,所以博文在此也简要介绍一下Python和Pycharm等概念:
Python:由荷兰数学和计算机科学研究学会的Guido van Rossum 于1990 年代初设计,作为一门叫做ABC语言的替代品。 Python提供了高效的高级数据结构,还能简单有效地面向对象编程。Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和快速开发应用的编程语言, 随着版本的不断更新和语言新功能的添加,逐渐被用于独立的、大型项目的开发。由于Python的众多优势, Python早已广泛应用于人工智能、机器学习、深度学习、大数据、 站Web开发、搜索引擎、云计算、科学计算等领域。
PyCharm:是来自JetBrains公司的全功能python开发环境。在涉及人工智能和机器学习时,它被认为是最好的 Python IDE。最重要的是,Pycharm 合并了多个库(如 Matplotlib 和 NumPy),帮助开发者探索更多可用选项。PyCharm支持很多的第三方web开发框架,比如Django、 Pyramid、web2py、google app engine 和 Flask,这些也使得它成为了一个完整的快速应用集成开发环境。这也是本课程《软件工程》使用PyCharm做为Python IDE的原因之一。
Pylint:是一个 Python 代码分析工具,它分析 Python 代码中的错误,查找不符合代码风格标准(Pylint 默认使用的代码风格是 PEP 8)和有潜在问题的代码。
PyUnit(unittest): 是 Python 自带的单元测试框架,用于编写和运行可重复的测试。PyUnit 是 xUnit 体系的一个成员,xUnit 是众多测试框架的总称,PyUnit 主要用于进行白盒测试和回归测试。通过 PyUnit 可以让测试具有持久性,测试与开发同步进行,测试代码与开发代码一同发布。

1.4 课程参考教材

虽然本课程中没有给出对应学习的教材,且主讲老师也在回复学生的评论中说没有对应教材,不过自己买了本Ian Sommerville的《软件工程》作为主要参考书,基本上对应与覆盖视频课程的知识点。

2.2 PMP项目管理经验

在软件工程中,软件项目管理也是十分重要的。关于项目管理方面的专业知识储备,博主在上一篇《项目管理学习——PMP 5A高分通过备考经验分享》已经进行过分享论述,PMP认证在IT行业广泛受到认可,博主当时备考PMP的那一批小伙伴中,大部分就是来自IT互联 相关的行业,所以PMP项目管理的知识在软件项目管理中是同样适用的。关于PMP项目管理相关备考知识的展开,有兴趣的可以查看博主的备考博文。

3. 软件工程

软件工程学科的定义有很多种,表述各有不同,但其蕴含的内容是基本相同的。在此引用其中的一种来进行介绍,《计算机科学技术百科全书》对该学科的定义是:应用计算机科学、数学、工程科学及管理科学等原理开发软件的工程。开发一个软件产品是构建一套符合逻辑的指令,通过发送信 来控制某个机器与其它机器、人与自然界的互动。软件项目较之普通的工程项目,其复杂程度高出很多倍。
软件开发的主要活动大致可以分为:软件需求,软件设计,软件构造,软件测试,软件维护,还有整个开发过程中的软件开发管理。

Scrum团队:由一位产品负责人(Product Owner)、开发团队(Development Team)和Scrum Master三部分共同组成。Scrum团队是自组织和跨职能的。Scrum团队模型旨在优化灵活性、创造性及生产力。

产品负责人:负责从开发团队工作产品中最大化产品价值,且必须是一个人。
开发团队:由专业人员组成,负责每个冲刺结束时,交付潜在可发布的“已完成”的产品增量。
Scrum Master:负责推进和支持Scrum定义的工作事务,帮助团队中每个成员理解Scrum理论,实践,规则和价值观。

Scrum事件:Scrum中使用规定的事件来创建规则,并最小化对Scrum 中未定义的会议需求。Scrum 中定义了四个事件:冲刺计划、每日站立会、冲刺评审、冲刺回顾。
Scrum 工件:代表着团队工作或者价值,赋予审视和适应两大支柱一个透明的机会。工件包括产品任务列表 (Product Backlog)、冲刺任务列表 (Sprint Backlog)、产品增量 (Increment)。
冲刺(Sprint):是 Scrum 的核心,也是 Scrum 团队工作的一个工作时间盒,每次冲刺都应保持在 1 周到一个月之间。冲刺必须是连续的,一个接一个的,从而保证一个稳定的、固定的项目节奏。每次冲刺都以开发计划为起点,以评审已完成的工作和额外的评审团队协作的方式为终点。每次冲刺都由整个Scrum 团队共同完成整个产品或项目的一个或多个增量。每个完成的增量必须是潜在可释放的,也就是每一个增量必须是在冲刺结束后经过充分测试和充分认可的。以下为Scrum 团队单次冲刺过程示意:

3.3 软件设计

软件设计是从软件需求规格说明书出发,根据需求分析阶段确定的功能设计软件系统的整体结构、划分功能模块、确定每个模块的实现算法以及编写具体的代码,形成软件的具体设计方案。从工程管理的角度,可以将软件设计分为概要设计和详细设计阶段。

3.5 软件测试

3.7 软件开发管理

在进行软件开发时,不但要注重技术的应用,还应该加强人员和开发过程的管理力度,引入先进的管理体系,提高软件开发管理水平。软件开发中引入软件工程项目管理理念,改变传统的以个人为中心的管理模式,更注重团队协作。在现阶段的软件开发阶段,采用管理学的理念进行过程管理,合理的把控开发进度,同时确保软件的开发能够达到预期效果,此外,通过项目管理手段也能够实现软件领域的长远发展,避免软件开发风险造成的严重后果。关于项目管理相关知识的论述,可以参考博主前面写的博文《项目管理&项目经理进阶——PMP 5A高分通过备考经验分享》。
相比于普通的工程项目,软件工程的配置管理更为复杂,在此稍加展开论述。软件配置管理(Software configuration management,SCM)是指通过执行版本控制、变更控制的规程,以及使用合适的配置管理软件,来保证所有配置项的完整性和可跟踪性。配置管理是对工作成果的一种有效保护。简单而言就是管理软件的变化,它应用于整个软件工程过程,通常由相应的工具、过程和方法学组成。
配置管理的目标是记录软件产品的演化过程,确保软件开发者在软件生命周期中各个阶段都能得到精确的产品配置。配置管理过程是对处于不断演化、完善过程中的软件产品的管理过程。其最终目标是实现软件产品的完整性、一致性、可控性,使产品极大程度地与用户需求相吻合。它通过控制、记录、追踪对软件地修改和每个修改生成的软件组成部件来实现对软件产品的管理功能。

软件工程——清华大学《软件工程》课程学习与分享

4.参考学习的书目教材

  1. 清华大学《软件工程》视频课程
  2. 《软件工程》Ian Sommerville 著 彭鑫 译
  3. 《SWEBOK指南 第3版》
  4. 《系统集成项目管理工程师教程 第2版》 谭志彬 主编
  5. 《项目管理知识体系指南(PMBOK指南)》

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年4月3日
下一篇 2022年4月3日

相关推荐