高级软件工程课程总结
高级软件工程课程总结
彭天勇+SA17225270 原创作品转载请注明出处
《软件工程(C编码实践篇)》MOOC课程
1 .课程总结
《高级软件工程》是软件工程硕士的高阶课程,对于我这样一个本科非计算机类的学生来说学习起来难度感觉还是很大的。在此之前,我对软件工程的了解很少,甚至并不具备基本的软件工程思想。幸好选了孟老师这门课程,老师课上的讲解很精彩,采取线上补基础,线下老师继续深入讲解的模式,可以最大化的照顾学生基础参差不齐的现状,只要跟着老师的步伐走,至少可以入软件工程的这个门,可以在以后编代码的时候能够拥有工程化的思想,我觉得这是这门课给我最大的收获。老师不必在乎少数人的反对,可以继续坚持自我的创新,最后非常感谢老师能够这么尽职尽责的为我们准备线上线下的课程和实验。
(SoftwareEngineering ,简称为
SE)
是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科。它涉及到程序设计语言,数据库,软件开发工具,系统平台,标准,设计模式等方面。随着
软件行业的飞速发展,软
件复杂性在飞速增长,随之出现了一系列的问题,比如说:软件成本极高、开发周期长、维护工作量大等。软件工程
研究和应用如何以系统性的、规范化的、可定量的过程化方法去开发和维护软件,以及如何把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来的学科。它涉及到程序设计语言、数据库、软件开发工具、系统平台
、标准、设计模式
等方面。
实验总结
2.1
实验列表
[实验五:用 callback 增强链表模块来实现命令行菜单小程序
V2.8]( )
实验六:函数的可重入性( reentrant )及线程安全
上面列出了网易云课堂上所有实验的列表,由于每一部分都涉及到不同的软件工程相关的只是的应用,所以在接下来的部分对各个实验的内容和只是进行简要的分析,如果需要更详细的示例,可以在超链接中点开实验报告进行查看。
2.2 实验详解
关键词: linux 环境、代码库管理
实验一的内容非常简单,只是实现一个简单的 hello world 程序,但是在第一次试验中使用了
linux
编程环境,
linux
基本命令对于今后的学习会有很大的帮助。
关键词:代码规范性、代码编排风格
本次试验通过一个简单的命令行菜单小程序来引导我们保持代码书写的规范性,遵守
简明、易读、无二义性
的
代码风格
,
注意书写代码时候的
缩进、命名、注释等代码编排的风格规范。
关键词:内部模块化
实验三是在实验二的基础上进一步的改进,在这一部分,主要强调的内容是注意代码的业务逻辑和数据存储之间的分离,即将系统抽象为两个层级:菜单业务逻辑,和菜单数据存储,使用不同的源文件实现,所以会有 2 个
.c
和一个
.h
作为接口文件。
这部分很关注
代码设计规范的方法
中的内部模块化的方法,内部模块化的方法在软件开发中是利器,使得程序的整个结构体系更加的清晰,便于代码的阅读和后期的功能补充,而且在整个过程中简化了程序员对于代码的理解过程,所以在后续的程序开发中要尤其注重在这方面的提高。
关键词:可重用链表、接口设计
实验四仍然是在上一个实验的基础上进一步改进,在实验四中,要求使用用可重用的链表模块来实现命令行菜单小程序,执行某个命令时调用一个特定的函数作为执行动作,
链表模块
能够简化对于
命令行菜单小程序的
功能调用,如果在遇到较大规模的软件,可重用链表模块能够使得整体结构更加清晰。
[实验五:用 callback 增强链表模块来实现命令行菜单小程序
V2.8]( )
关键词: callback 回调、数据隐藏
实验五是在实验四的基础上进一步进行改进,在这一部分,是为了学习 callback 函数,它是一种实现模块通用性的实现机制,能够实现模块解耦功能,
利用 callback 函数参数使
Linktable
的查询接口更加通用,同时我们也必须要
注意接口的信息隐藏
。
实验六:函数的可重入性( reentrant )及线程安全
关键词:函数可重入性、线程安全
可重入( reentrant )函数可以由多于一个任务并发使用,而不必担心数据错误。相反,不可重入(
non-reentrant
)函数不能由超过一个任务所共享,除非能确保函数的互斥(或者使用信号量,或者在代码的关键部分禁用中断)。可重入函数可以在任意时刻被中断,稍后再继续运行,不会丢失数据。可重入函数要么使用本地变量,要么在使用全局变量时保护自己的数据。
线程安全问题都是由全局变量及静态变量引起的。若每个线程中对全局变量、静态变量只有读操作,而无写操作,一般来说,这个全局变量是线程安全的;若有多个线程同时执行读写操作,一般都需要考虑线程同步,否则就可能影响线程安全。如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。
可重入的函数不一定是线程安全的
,
可重入的函数在多个线程中并发使用时是线程安全的,但不同的可重入函数(共享全局变量及静态变量)在多个线程中并发使用时会有线程安全问题(可能是线程安全的也可能不是线程安全的)读写锁可以有效解决这里的线程安全问题
。
关键词: Makefile 方法、
fgets()
、
menu
子系统
实验七仍然是在之前的实验基础上进行的新功能的添加, Makefile方法能够减轻执行程序时繁琐的指令输入过程,menu子系统的引入,能够支持带参数的复杂命令,在用户代码中 定义一个带参数的复杂命令。 getopt()用来获取命令参数, 实现对指令的调用; gets()方法有缓冲区溢出的问题,为了防止缓冲区溢出攻击的危险,使用fgets()方法更好。
3 .课程总结
3.1 学习完《软件工程(C编码实践篇)》课程后您最大的收获是什么?
通过这门课程我了解到 ,做软件开发并不是单纯的的写代码,还必须具备一些工程化的思想和方法,从中我学习到了 问题解决方法论、软件生命周期、软件开发过程、图形化描述方法训练、工作量评估和项目管理、项目管理工具和软件测试技术方面的知识。
老师在课上的讲解很精彩,网易云课堂的线上课堂我觉得很好。 使得我从简单的代码书写到对软件工程有一个宏观的视角,这种思考问题的方式对今后的软件开发大有裨益。 虽然课程结束了,但我还希望继续学习老师线上的另外两门课,希望老师下学期也能够免费开放给我们学习。
3.2 学习完《软件工程(C编码实践篇)》课程后您最大的遗憾是什么?
最大的遗憾是自己基础太差,没有多的开发经验,还没能理解透彻老师讲的很多理论知识,但这责任不在老师身上,后期我会逐渐加强自己的开发经验的同时不断强化自己的软件工程思想。