博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《高级软件工程》学习心得
阅读量:3658 次
发布时间:2019-05-21

本文共 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

你可能感兴趣的文章
python关于print中数据传输的用法
查看>>
sublime text3的快捷键总结
查看>>
gdal学习笔记2-数据读写
查看>>
python中动态生成变量名及赋值
查看>>
python识别数据结构
查看>>
python bisect序列二分法详解
查看>>
python学习笔记字典排序,
查看>>
python内置类 set
查看>>
python getatrra()
查看>>
thinkpython2的扑克牌系列练习最终解读
查看>>
matlab复色光夫琅禾费衍射
查看>>
Java中线程的基本操作以及Thread和Runnable两种实现的比较
查看>>
MongoDbRepository的常用AP操作和易错点
查看>>
MongDBRepository和MongDBOperator和MongTemplate的方法比较
查看>>
IntelliJ IDEA中关于Maven构建复杂的聚合工程的管理和打包问题
查看>>
错误记录关于Model 的Not a managed type: class,无法找到Model
查看>>
关于JPA中Specification接口的问题,记录一下
查看>>
IntelliJ IDEA中GIT,已经 commit and push成功,但并未 push 到远程库的问题
查看>>
关于光盘刻录,重洗的一些知识
查看>>
default_Keyword
查看>>