新2会员网址手机客户端 新2会员网址手机客户端 新2会员网址手机客户端

软件工程四年制课程

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

博主研究生期间主要用Fortran做数值计算算法研究。现在工作中会用Python做一些数值计算软件的二次开发和自动化应用。由于博主身处正在经历“软件定义汽车”时代的汽车行业,但博主觉得自己在软件工程方面的知识还是有所欠缺,所以早前在相关领域做了广泛的学习和积累课程表用英语怎么说,这次,我将简单介绍和记录我之前学习的清华大学“软件工程”的视频课程。

当然,我自己写这篇博文,一方面是为了做学习记录,另一方面是课程真的很好。现在有很多视频课程的学习平台。除了慕课和清华学堂,还有哔哩哔哩或其他视频网站。当课程资源如此之多时,人们可能会难以选择。而且,不同课程的教学水平也不一样。有些课程教得很好,很容易理解。当时对比了一下软件工程相关的公开课,发现清华大学的《软件工程》这门课讲的不错。因此,我们也秉承着学习和分享的态度,希望能为同样有兴趣系统学习软件工程的朋友们提供一个参考。

一、课程相关信息 1.1 课程介绍

本课程从软件生命周期的角度阐述软件工程的基本概念、基本原理和基本方法。内容涉及开发管理、需求建模、设计实现和测试维护四大块的相关基础知识,强调软件工程的可测试性、软件架构、模块化和可重用性等基本性质和永久性原则,着重针对软件系统的复杂性和迭代开发方法,强调分析问题和解决问题的能力和软件工程实践训练,培养学生良好的工程开发习惯。学习本课程后,学生可以掌握软件工程的基本知识,

本课程于2019-10-30推出。它应该算是一门新课程,所以课程内容也在一定程度上反映了当前软件工程的新发展和新应用。本课程共分为15章83课。总课时约17小时。课程所在的学堂在线网站如下:

《软件工程》——清华大学课程

1.2 教师团队

以下是官网发布的教师团队:

在这里插入图片描述

本课程的讲师是刘强老师。我在课程学习中发现,其实不止以上两个人在教。在“第四章软件开发流程”课程中,我邀请了前微软Azure工程组首席研发经理、现任CSDN副总裁邹昕介绍了微软的开发流程。总共有3节课。作为一个企业实际发展的例子也是很好的介绍。

“第12章软件交互设计”课程由施元春主讲。对师人美生田先生授课专业、风趣。他还特地查看了老师的资料:

石元春,清华大学计算机系“长江学者”特聘教授,人机交互与媒体集成研究院院长,清华大学全球创新研究院(GIX)院长。主要研究方向为人机交互、普适计算、多媒体、网络教育技术等,主持国家“十三五”重点项目等国家级研发项目。近年来,其科研成果多次获得国际人机交互领域顶级会议最佳论文奖,两次获得国家科技进步奖。

在这里插入图片描述

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(单元测试):是 Python 自己的单元测试框架,用于编写和运行可重复测试。PyUnit 是 xUnit 系统的成员。xUnit 是许多测试框架的总称。PyUnit主要用于白盒测试和回归测试。通过PyUnit可以使测试持久化,测试和开发同步进行,测试代码和开发代码一起发布。

1.4 课程参考资料

虽然这门课没有对应的学习教材课程表用英语怎么说,而且讲师也回应学生的评论没有对应的教材,但是我买了Ian Sommerville的《软件工程》作为主要参考书,基本对应并涵盖了视频。课程知识点。

在这里插入图片描述

另外还有结合《SWEBOK(软件工程知识体系)指南》一起学习。2014年2月20日,IEEE计算机学会发布了第三版SWEBOK(软件工程知识体系)指南。SWEBOK 指南的目的是为软件工程学科的边界提供一致识别的特征,并为支持该学科的知识体系提供指导。SWEBOK Guide将软件工程学科知识划分为10个知识领域,在每个知识领域的描述中解释了各个重要概念的区别,以便读者快速找到自己感兴趣的主题。SWEBOK的目的是划定“属于”的知识 到软件工程学科领域的众多知识中,明确软件工程教育和培训的要求,制定评价原则,寻求世界范围内的认可。它还旨在为从事软件工作的工程师和负责制定有关行业指导原则的政策的官员提供指导。

2. 组织过程资产输入 2.1 编程的学习与实践

前面提到,博主在读博期间主要用Fortran做数值计算算法研究,工作中会用Python做一些数值计算软件的二次开发和自动化应用。还有自己在机器学习方面的学习和实战,可以作为本次学习的基础编程知识输入。

在这里插入图片描述

2.2 PMP项目管理经验

在软件工程中,软件项目管理也很重要。关于项目管理中的专业知识储备,博主在之前的文章《项目管理学习——PMP 5A高分备考心得分享》中已经进行了分享和探讨。PMP认证在IT行业被广泛认可,博主在准备PMP考试的时候公司里的小伙伴大部分都是IT和互联网相关行业的,所以PMP项目管理的知识同样适用于软件项目管理. 关于PMP项目管理相关备考知识的拓展,有兴趣的可以查看博主的备考博文。

3. 软件工程

软件工程学科的定义很多,表达方式也不同,但内容基本相同。这里引用其中的一个作为介绍。《计算机科学与技术百科全书》对学科的定义为:应用计算机科学、数学、工程科学和管理科学的原理开发软件的工程。开发软件产品正在构建一组逻辑指令,以发送信号来控制机器与其他机器、人类和自然世界的交互。与普通工程项目相比,软件项目要复杂很多倍。

软件开发的主要活动大致可以分为:软件需求、软件设计、软件构建、软件测试、软件维护,以及贯穿整个开发过程的软件开发管理。

在这里插入图片描述

3.1 软件生命周期模型

软件生命周期是人们在研究软件生产过程中发现的规律性事实。软件生产有一个生产、使用和消亡的过程,称为软件生命周期。软件生命周期是由软件的功能决定的,从设计、完成开发、投入使用,并在使用过程中不断修改、补充、改进,直至被新的需求所取代,对软件的使用的全过程停止了。一般来说,软件生命周期会包括分析、设计、实施和维护等一系列过程。不同的生命周期划分方法会形成不同的软件生命周期模型。

瀑布模型

在传统的软件开发中,瀑布模型是最常用、最典型的软件生命周期模型。瀑布模型将软件生命周期划分为规划、需求分析、软件设计、编程、软件测试、运维等六大基本活动,并规定了它们自上而下的固定顺序,相互联系,像瀑布一样,落下步步为营,这也是瀑布开发名称的由来。从本质上讲,它是一个软件开发框架,其中开发过程通过一系列阶段按顺序展开,从系统需求分析开始,一直到产品发布和维护。其主要特点是:与一般系统工程一致,使用方便,不需要特殊的技术和工具就可以很好地开发;它的缺点是:很难很好地表达和描述用户需求。

敏捷开发——Scrum

敏捷开发是近年来兴起的一种软件开发和管理思想。它以其灵活性和易操作性引起了软件行业的广泛关注。敏捷开发方法是一组开发方法的总称,主要包括极限编程、Scrum、精益开发和动态系统开发方法(DS-DM)、特征驱动开发(FDD)等,其基本原理包括迭代开发、增量交付、交互式开发和持续集成。

Scrum是目前应用最广、最流行的敏捷思想,它把软件开发团队比作足球队,整个团队都有一个明确的最高目标:发布产品高于一切。团队有高度的自主权。团队成员熟悉开发过程中涉及的各种技术,紧密合作,确保每一次迭代都朝着最高目标前进。并且每隔2到6周,大家就可以看到实际运行的软件,并据此决定是发布这个版本还是继续开发它来增强它的功能。对于功能需求可能经常变化的项目,Scrum 是最理想的选择之一。

在这里插入图片描述

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

产品负责人:负责从开发团队的工作产品中最大化产品价值,必须是一个人。

开发团队:由负责在每个冲刺结束时交付潜在可发布的“完成”产品增量的专业人员组成。

Scrum Master:负责推动和支持Scrum定义的工作事务,帮助团队的每个成员理解Scrum的理论、实践、规则和价值观。

Scrum 事件:Scrum 中使用规范性事件来创建规则并最大限度地减少 Scrum 中未定义的会议需求。Scrum 中定义了四个事件:冲刺计划、每日站立会议、冲刺回顾和冲刺回顾。

Scrum 工件:代表团队工作或价值,提供透明的机会来检查和适应这两个支柱。工件包括产品待办列表、Sprint 待办列表和增量。

Sprint:是Scrum的核心,是Scrum团队工作的时间盒。每个冲刺应保持在 1 周到 1 个月之间。冲刺必须是连续的,一个接一个,从而保证项目有一个稳定、固定的节奏。每个冲刺都以开发计划开始,以对已完成工作的审查和对团队协作方式的额外审查结束。每个 Sprint 都涉及整个 Scrum 团队一起工作以完成整个产品或项目的一个或多个增量。每个完成的增量都必须是潜在可发布的,也就是说,每个增量都必须在 Sprint 结束后经过全面测试和全面批准。下面是Scrum团队的单sprint流程示意图:

在这里插入图片描述

接下来,我们将进一步讨论软件开发的主要活动。当然,教科书和很多资料对这方面的知识都有详细的论述。在这里我将对每个阶段的知识点进行简单的总结和梳理。

3.2 软件要求

一般来说,软件需求更多的定义为“业务知识+问题清单+其他因素”。其中,业务知识包括业务事件、业务实体和业务规则;问题清单是用户在工作中遇到的困难和障碍,也是软件开发需要解决的问题;其他因素包括一些设计限制和非功能性要求。从软件工程的角度来看,决定软件项目成败的最重要因素就是需求。如果需求开发和管理做得好,软件开发成功的概率就会很高。

在这里插入图片描述

3.3 软件设计

软件设计从软件需求说明书开始,根据需求分析阶段确定的功能设计软件系统的总体结构,划分功能模块,确定各模块的实现算法,编写具体的代码,形成具体的软件设计方案。从工程管理的角度来看,软件设计可以分为概要设计和详细设计两个阶段。

在这里插入图片描述

3.4 软件结构

软件构建获得软件的源代码和可执行代码,使软件产品的设计成为现实。软件建设是软件工程体系的重要组成部分。为了实现高质量的软件产品,不仅需要进行编码工作,还必须遵循软件构建的各种原则,良好的软件设计,必须遵循一定的编码原则和规范的编码过程,以及软件测试过程等。所有的软件建设都需要注意。

在这里插入图片描述

3.5 软件测试

开发人员设计完所有模块后,测试人员应对设计好的软件进行综合测试。软件测试的关键目的是及时发现各种问题和错误。但是需要注意的是,测试人员在发现软件的BUG后,不能直接修改。漏洞审核通过后,开发人员需要修改漏洞。修改完所有bug后,软件就可以使用了。正常工作。在正式的测试工作开始之前,要保证测试人员已经全面学习和掌握了相关的功能和业务,只有这样才能确保能够明确软件的不足和缺陷。

在这里插入图片描述

3.6 软件维护

测试完成后,进入维护阶段。现在大部分科技产品都有自己的维修站,主要是因为很多产品在各种软件和产品的具体应用过程中经常会出现不同的故障和问题,工作人员急需反馈各种问题。,及时修复这些问题。这就需要工作人员在使用软件时及时记录各种问题,以便于后续的修改和维护工作,以便相应的工作人员在第一时间找到问题的原因。

在这里插入图片描述

3.7 软件开发管理

在开发软件时,不仅要注重技术的应用,还要加强人员和开发过程的管理,引进先进的管理制度,提高软件开发的管理水平。将软件工程项目管理的理念引入到软件开发中,改变传统的以个人为中心的管理模式,更加注重团队协作。在现阶段的软件开发中,采用管理的概念来管理过程,合理控制开发进度,同时保证软件开发能够达到预期的结果。此外,软件领域的长远发展也可以通过项目管理的方式来实现,避免软件开发风险带来的严重后果。关于项目管理相关知识的探讨,可以参考博主的博文《项目管理&项目经理进阶-PMP 5A高分备考经验分享》。

与普通工程项目相比,软件工程的配置管理更为复杂,这里就来探讨一下。软件配置管理(Software Configuration Management,SCM)是指通过实施版本控制、变更控制程序和使用适当的配置管理软件来确保所有配置项的完整性和可追溯性。配置管理是工作成果的有效保障。简单地说,就是对软件变更的管理,应用于整个软件工程过程,通常由相应的工具、过程和方法组成。

配置管理的目标是记录软件产品的演进过程,保证软件开发人员在软件生命周期的各个阶段都能获得准确的产品配置。配置管理过程是软件产品在不断演进和完善过程中的管理过程。其最终目标是实现软件产品的完整性、一致性和可控性,使产品在很大程度上满足用户的需求。它通过控制、记录和跟踪软件的修改以及每次修改产生的软件组件来实现软件产品的管理功能。

在这里插入图片描述

4.参考学习参考书目清华大学《软件工程》视频课程《软件工程》伊恩萨默维尔主编《SWEBOK指南第3版》《SWEBOK指南第3版》《系统集成项目管理工程师课程第2版》谭志斌主编《项目管理知识体系指南(PMBOK Guide)》

=文件信息=

本学习笔记由博主整理整理,仅供非商业学习交流

由于水平有限,难免有错漏之处,欢迎交流指正

本文如涉及侵权,欢迎给博主留言,将妥善处理