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

  • 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 教师团队

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

本课程主讲老师为刘强老师,随着自己在课程的学习中发现,授课其实并不止以上两位,课程中《第4章 软件开发过程》请来前微软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(unittest): 是 Python 自带的单元测试框架,用于编写和运行可重复的测试。PyUnit 是 xUnit 体系的一个成员,xUnit 是众多测试框架的总称,PyUnit 主要用于进行白盒测试和回归测试。通过 PyUnit 可以让测试具有持久性,测试与开发同步进行,测试代码与开发代码一同发布。

1.4 课程参考教材

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

除此之外,还有结合《SWEBOK(Software Engineering Body of Knowledge)指南》一起学习。2014年2月20日,IEEE计算机协会发布了软件工程知识体系 SWEBOK(Software Engineering Body of Knowledge)指南第3版。SWEBOK指南的目的是为软件工程学科的边界提供一致确认的特征,为支持该学科的主体知识提供指导。SWEBOK 指南把软件工程学科的主体知识分为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 工件:代表着团队工作或者价值,赋予审视和适应两大支柱一个透明的机会。工件包括产品任务列表 (Product Backlog)、冲刺任务列表 (Sprint Backlog)、产品增量 (Increment)。
冲刺(Sprint):是 Scrum 的核心,也是 Scrum 团队工作的一个工作时间盒,每次冲刺都应保持在 1 周到一个月之间。冲刺必须是连续的,一个接一个的,从而保证一个稳定的、固定的项目节奏。每次冲刺都以开发计划为起点,以评审已完成的工作和额外的评审团队协作的方式为终点。每次冲刺都由整个Scrum 团队共同完成整个产品或项目的一个或多个增量。每个完成的增量必须是潜在可释放的,也就是每一个增量必须是在冲刺结束后经过充分测试和充分认可的。以下为Scrum 团队单次冲刺过程示意:

下面我们进一步对软件开发的主要活动稍加论述,当然教材及很多材料对这些知识有详细的论述,我这里就简单汇总整理一下各阶段的知识点。

3.2 软件需求

通常来看,软件需求更多的被定义为“业务知识+问题列表+其他因素”。其中业务知识包括业务事件、业务实体和业务规则;问题列表就是用户在工作中遇到的困难和障碍,这也是软件开发需要解决的问题;其他因素包括了一些设计约束和非功能方面需求。从软件工程的角度看,决定软件项目成败与否最主要的因素是需求,需求开发和管理工作做得好,软件开发成功的几率就大。

3.3 软件设计

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

3.4 软件构造

软件构造得到软件的源代码和可执行代码,使软件产品的设想变为现实,软件构造是软件工程体系中的重要一环。为了实现高质量的软件产品,不仅需要有编码工作,还必须遵守软件构造的各种原则,具有良好的软件设计,遵守一定的编码原则以及规范的编码过程,具有软件测试的过程等,以上这些都是软件构造需要关注的。

3.5 软件测试

在开发人员设计完成所有模块之后,测试人员应当对设计完成的软件展开全面测试。展开软件测试的关键目的,便是及时将存在的各种问题和bug 等找出来。然而需要注意的是,在将软件中 bug 找出来之后,测试人员不能对其展开直接修改,需要在其经过审核后,由开发人员对 bug 进行修改,待所有 bug 完成修改后,才可以使软件正常工作。在正式测试工作开始前,应当确保测试人员对相关功能、业务加以全面学习、掌握,随后才能确保其能够明确软件中的不足与缺陷。

3.6 软件维护

测试完成之后便进入了维护阶段。如今大部分科技产品均拥有各自维修站,这主要是由于在各类软件、产品的具体运用过程中,许多产品常常出现各不相同的故障、问题,而工作人员亟需将各类问题反馈上去,及时维修这些问题。这就需要工作人员在对软件进行使用的时候,及时记录各类问题,从而便于后续的修改以及维修工作,使相应工作人员能够在第一时间找到问题的原因。

3.7 软件开发管理

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

4.参考学习的书目教材

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

=文档信息=
本学习笔记由博主整理编辑,仅供非商用学习交流使用
由于水平有限,错误和纰漏之处在所难免,欢迎大家交流指正
如本文涉及侵权,请随时留言博主,必妥善处置
版权声明:非商用自由转载-保持署名-注明出处
署名(BY) :zhudj
文章出处:https://zhudj.blog.csdn.net/

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

  1. 心得丨吴恩达Deeplearning.ai 全部课程学习心得分享

    选自Medium作者:Ryan Shrott    机器之心编译 本文作者,加拿大国家银行首席分析师 Ryan Shrott 完成了迄今为止(2017 年 10 月 25 日)吴恩达在 Courser ...

  2. 【干货】PMcaff干货课程学习精彩分享:Apple Watch 技术特性详解

    昨天PMcaff给大家推荐了Apple Watch的发布会,好多小伙伴们在后台留言,所以PMcaff小咖今天给大家找来一篇干货,看完感觉还不错,在这里分享给大家. 作为苹果主推的智能穿戴产品,Appl ...

  3. 高级软件工程《软件工程(C编码实践篇)》课程学习心得及内容总结

    李伯威+原创作品转载请注明出处+<软件工程(C编码实践篇)>MOOC课程http://mooc.study.163.com/course/USTC-1000002006 一.心得体会 首先 ...

  4. 清华大学计算机学院软件工程,中国“软件工程”专业最好的3所大学,都是985,清华大学上榜...

    中国"软件工程"专业最好的3所大学,都是985,清华大学上榜 上大学的目的是什么?很多同学会说,为了学更多的知识,毕业之后找到一份好工作.哪怕不回报国家的栽培,也要对得起自己大学四 ...

  5. 《Mall商城的设计与实现》软件工程综合实践 课程设计

    <Mall商城的设计与实现>软件工程综合实践 课程设计 目录 1.绪论 1.1.课程设计的意义 1.2.本课程设计的主要工作 2.相关技术简介 2.1.前端技术 2.2.MySQL数据库 ...

  6. TPAMI 2021 | 清华大学朱文武团队:首篇课程学习综述

    ©作者 | 机器之心编辑部 来源 | 机器之心 来自清华大学的研究者王鑫.陈禹东.朱文武撰写了一篇名为<A Survey on Curriculum Learning>的课程学习综述论文, ...

  7. 计算机软件与理论主修课程,软件工程专业主修课程

    了解了一个专业的大概意思其实还远远不够,在选择专业的时候我们需要比对每个专业的具体课程,看看这些主干的课程主要是学什么,难度如何,适不适合自己.北极星择校网的小编为您整理了软件工程专业主修课程.感兴趣 ...

  8. PHP学习课程和培训方向学习路线分享

    PHP学习课程和培训方向学习路线分享 php语言的优越性,集结了很多的开发爱好者,无论行业前景和个人发展来说,php正飞速的发展,php在不断兼容着类似closures和命名空间 等技术,同时兼顾性能 ...

  9. 计算机应用综合实践课程报告,南通大学继续教育学院软件工程综合实践课程报告书——生产信息化工作管理系统...

    内容简介: 南通大学继续教育学院软件工程综合实践课程报告书--生产信息化工作管理系统,共38页,9911字 目录 一 前言(1) 二 需求分析(2) (一)系统需求(2) (二)功能需求(2) 1 生 ...

  10. 电子科技大学软件工程860考研上岸初试经验分享

    一.背景简介 本人本科就读于某二本院校软件工程专业,在校期间并未参加任何竞赛以及科研项目,只是飘过了四级并且在考研的时候顺便飘过了六级而已.于2021年报考电子科技大学信息与软件工程学院软件工程研究生 ...

最新文章

  1. mysql删除delete语句
  2. 10个关于linux中Squid代理服务器的实用面试问答
  3. 【HDU - 3714 】Error Curves (三分)
  4. 《天天数学》连载18:一月十八日
  5. Activity简介
  6. JVM垃圾收集器基本思想
  7. 中国建设银行-跨境易支付
  8. ansys软件linux安装教程,ansys 15 for linux 安装纪录
  9. 辐射4核能选项用计算机失败,辐射4NMM安装framework失败解决方法一览_游侠网
  10. 揭开JS加密解密的神秘面纱(1)
  11. SQLite3 学习3
  12. 支付宝出安全漏洞,买了账户安全险的也要小心
  13. DRV8825步进电机驱动详细说明书————含接线图
  14. 一晚迎来十三年里最大单日涨幅,告别2021,中概股终于触底?
  15. python实验七答案_python程序设计实验答案
  16. RTP H264 NAL
  17. 【工作记录】配置高效科研工作软件
  18. 如何显示密件抄送人员地址_发送电子邮件时,抄送和密件抄送有什么区别?
  19. k8s containerd对接harbor私有仓库
  20. 简单卷、跨区卷、带区卷、镜像卷和 RAID-5 卷

热门文章

  1. 模块已加载,但找不到入口点DLLRegisterServer
  2. Better man 中文歌词
  3. word2016 图片去底灰_打印图片怎样去灰色底
  4. Metasploit之——社会工程学工具包
  5. 海康威视在linux下使用笔记——ros驱动相机
  6. 【老鸟进阶】deepfacelab错误人脸图片快速处理
  7. 鸡兔同笼php编程,C语言鸡兔同笼问题
  8. Iometer存储测试工具参数说明-5 存储规格选项
  9. 重庆市中职计算机一级考试,重庆市计算机一级考试题库答案
  10. 关于H无穷鲁棒控制算法实现条件及广义矩阵P的子矩阵的构建规则