本文共 2541 字,大约阅读时间需要 8 分钟。
一.课程总结 我本科是通信工程的,没有学过软件工程,学习这门课之前,一直以为这门课都是理论知识,各种纸上谈兵的条条框框,一学期课上下来,发现并不是这样,孟宁老师将这门课变成了实践为主的动手课,而且必要的理论知识也不是很无趣的在课上讲,而是选择让大家上课自己讲PPT,不仅调动了大家的学习热情,而且增强了课程的趣味性和参与感。总之这门课是让我收获很大的一门课,越到后来越发现,其实这些看似繁琐的条条框框会使自己写代码更规范,更易维护。我很庆幸开始写代码一开始就学习了这门课,不然等养成了很多不专业的坏习惯之后,再改正就很难了,我现在一开始就会使自己以一种专业,规范的素养学习写代码,这对我以后的发展和进步有很大积极作用。 二.实验总结2.1 实验目录
实验六:函数的可重入性(reentrant)及线程安全
2.2实验详解
本次实验较为简单,对于有C语言编程基础的人来说主要是熟悉实验楼的环境和操作,为以后的实验打下基础。从小程序入手,才能逐步的过渡到大的软件工程项目,而且让我们学会使用代码库来管理代码,对于今后的维护和管理很有帮助。 在这次试验中,我学会了如何编写一个命令行小程序,并可以实现一些功能。并注意了老师再视频中所提到的代码风格的问题。比如缩进要四个空格,花括号要独立一行并对齐等。代码风格的标准话对程序员来说尤为重要,这可以增加代码的可读性。 另外,linux的vim编辑器我使用的实在是不6啊,有点小忧伤,需要不断学习其中的博大精深!还有模块化编程的思想,这次实验中我把数据结构和有关操作分出来单独写到linklist.c中,menu.c中专心处理功能的实现,这样使代码可重用性更高,代码更容易维护和扩充。 在这次试验中,我学会了如何编写一个命令行小程序,并可以实现一些功能。并注意了老师再视频中所提到的代码风格的问题。还有模块化编程的思想,这次实验中我把数据结构和有关操作分出来单独写到linklist.c中,menu.c中专心处理功能的实现,这样使代码可重用性更高,代码更容易维护和扩充。 实验四仍然是在上一个实验的基础上进一步改进,在实验四中,要求使用用可重用的链表模块来实现命令行菜单小程序,执行某个命令时调用一个特定的函数作为执行动作,链表模块能够简化对于命令行菜单小程序的功能调用,如果在遇到较大规模的软件,可重用链表模块能够使得整体结构更加清晰。
在这一部分,是为了学习callback函数,它是一种实现模块通用性的实现机制,能够实现模块解耦功能,利用callback函数参数使Linktable的查询接口更加通用,同时我们也必须要注意接口的信息隐藏。
实验六:函数的可重入性(reentrant)及线程安全 可重入(reentrant)函数可以由多于一个任务并发使用,而不必担心数据错误。相反,不可重入(non-reentrant)函数不能由超过一个任务所共享,除非能确保函数的互斥(或者使用信号量,或者在代码的关键部分禁用中断)。可重入函数可以在任意时刻被中断,稍后再继续运行,不会丢失数据。可重入函数要么使用本地变量,要么在使用全局变量时保护自己的数据。 线程安全问题都是由全局变量及静态变量引起的。若每个线程中对全局变量、静态变量只有读操作,而无写操作,一般来说,这个全局变量是线程安全的;若有多个线程同时执行读写操作,一般都需要考虑线程同步,否则就可能影响线程安全。如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。 可重入的函数不一定是线程安全的,可重入的函数在多个线程中并发使用时是线程安全的,但不同的可重入函数(共享全局变量及静态变量)在多个线程中并发使用时会有线程安全问题(可能是线程安全的也可能不是线程安全的)读写锁可以有效解决这里的线程安全问题。Makefile方法能够减轻执行程序时繁琐的指令输入过程,menu子系统的引入,能够支持带参数的复杂命令,在用户代码中定义一个带参数的复杂命令。有遇到一个问题,make的时候遇到报错,* missing separator. Stop.通过网上查询资料,将命令行的空格,改成TAB键即可。因为在Makefile文件中,命令必须以【tab】键开始。
三.课程总结
这是软件工程的最后一次作业,在此写上我本学期以来的体会和总结。
从四月至六月底,学习软件工程将近三个月的时间。从一开始的个人项目到后来结对编程再到团队项目,期间经历了太多的困难与挫折,当然也有成功收获。有时会熄灯后继续熬到一两点还在修改程序,当提交成功后心里还是挺兴奋的。虽然软件工程已经结课并考完期末考试了,但我才能高中学习到了很多,除了个人专业技术知识外,还意识到了团队合作的重要性,这里还是有很多地方是值得肯定的。
一开始是我先入为主了,认为软件工程可能与其他专业课相似,学习课本上的知识,在动手编一些程序进行练习,其实不然。在我看来与其说软件工程是一门课,倒不如说它是一种思想。是一个引导我们如何去分析问题,如何处理问题的过程。应该说其范畴已经远远超过了这门课本身,成为一个综合的一个能够解决问题的思想的集合。
需求分析—概要设计—详细设计—编写代码—项目测试—项目完成—项目维护,这是软件开发的一般程序和过程,我认为这是一份非常有实际意义的教学内容,它让我们的工作模块化,从而更加严谨,也能提升整体的工作效率。当我们毕业之后,走进企业,这是我们要实际运用的一个非常重要的技能,而不是仅仅局限于软件工程的范畴。即使以后从事其他行业,但这是做事的思维和方法也是一生受用的,都是从需求设计开始,一步一步的有条理进行,最终完成作品。我觉得这才是这门课的意义所在,这也是我感触最大的地方。
最大遗憾大概是没有轮上去讲台上分享ppt,我其实准备了PPT,但是大家分享的太踊跃 ,我就没有轮上。
“杨瑞 SA16225381 + 原创作品转载请注明出处 + 《软件工程(C编码实践篇)》MOOC课程http://mooc.study.163.com/course/USTC-1000002006