软件工程代码层面的一点理解

SA16225063 高筠 《软件工程(C编码实践篇)》MOOC课程http://mooc.study.163.com/course/USTC-1000002006


实验1:写一个hello world小程序 

 理解:了解linux系统下vim编辑器的使用,在vim编辑器下编写C语言代码。和老师说的一样,一开始用特不习惯,然后越用越觉得还不错。

实验报告:

https://www.shiyanlou.com/courses/reports/1244166

实验代码:

http://git.shiyanlou.com/gyjoy/shiyanlou_cs122/src/master/lab1

实验2:命令行菜单小程序
   理解:代码编写时要注意规范包括缩进、命名方式、注释等,因为在后期维护或者阅读时方便理解。

实验报告:

https://www.shiyanlou.com/courses/reports/1244591

实验代码:

http://git.shiyanlou.com/gyjoy/shiyanlou_cs122/src/master/lab2

实验3:内部模块化的命令行菜单小程序
  理解:模块化的思想正式为了实现 高内聚、低耦合 的思想。提高代码的质量。

实验报告:

https://www.shiyanlou.com/courses/reports/1245462

实验代码:

http://git.shiyanlou.com/gyjoy/shiyanlou_cs122/src/master/lab3

实验4:用可重用的链表模块来实现命令行菜单小程序

  理解:设计一个单独可重用的链表数据结构,并将这个数据结构用在 命令行菜单小程序中。实现了对能够单独完成某项功能代码块的重用。

实验报告:

https://www.shiyanlou.com/courses/reports/1245816

实验代码:

http://git.shiyanlou.com/gyjoy/shiyanlou_cs122/src/master/lab4

实验5:用callback增强链表模块来实现命令行菜单小程序

  理解:隐藏单独完成某项功能代码块的某些信息,增加该模块的通用型。用callback函数实现的多态浅析以及信息隐藏。类似于遥控器一样,用户只需要了解按哪个按键对应的机器的就会实现什么样的功能,而内容的具体实现以及机制,用户没有必要知道。C中的多态性可以用callback实现,即函数回调。

实验报告:

https://www.shiyanlou.com/courses/reports/1246950

实验代码:

http://git.shiyanlou.com/gyjoy/shiyanlou_cs122/src/master/lab5

 实验7:将menu设计为可重用的子系统  

  理解:通过暴漏接口的方法实现了对可以单独完成某些功能的子系统的重用。最后学会了编写makefile文件,编写可接受带复杂参数的函数是命令行菜单更加通用和多功能。

实验报告:

https://www.shiyanlou.com/courses/reports/1248116

实验代码:

http://git.shiyanlou.com/gyjoy/shiyanlou_cs122/src/master/lab7

       软件工程是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科。这门课学完之后收获不小,我本科学的不是计算机相关专业所以一直对软 件的开发流程不是很了解,通过这8周的学习了解了软件开发的流程,更深的理解了代码层次的软件工程,下面就是我对代码层次的软件工程的部分总结。

      孟老师从一个简单的C语言菜单小程序,从最开始的搭建环境讲起,从零入门,一步步的深入,将知识点讲解的很透彻。 接下来又讲了平时我们不太注重的代码风格规范的问题。良好的编码规范可以促进团队的合作,减少不必要的阅读障碍。当然,也就避免了程序员之间的矛盾。 不仅如此,良好的代码规范还可以降低维护成本,在一些大的项目上,有利于寻找bug点和代码审查工作的顺利高效的推进。对于一个程序员自身来讲,更有助于自身的发展。

      其次对于软件工程的学习心得,我的感觉就是要转变思想方式。软件工程要求我们有一种更加抽象的思想去理解和实践,不能拘泥于把功能实现就好的程度,而是把我们的实现更加抽象起来从另一个角度来思考如何更加有效地实现功能。比如考虑代码的模块化,接口的可重用设计,以及系统的可重用设计。在编码中,对于一个很小的软件来说,软件的代码都在可以掌控和计算的范围之内。而对于一个稍有规模的软件来说。就很有必要来通过模块化来分割系统组件模块。通过使用伪代码或者统一建模语言的工具来事先规划好自己的代码结构。从整体把握系统的功能实现流程。模块化,顾名思义,就是将大的软件系统分割到不同的模块来分别实现。在某种程度上可以减少系统的复杂性和重用性。与此同时,各个模块的相互之间的联系,就产生了接口的概念。在自己的工程中把一些重复执行的逻辑应当尽可能的划分为一个功能模块,对外只提供接口,调用时并不需要考虑具体的实现,这正是面向对象编程的一个原则。

       在接口的课程中,第一次接触了CallBack函数。回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。

      在函数的可重入性和线程安全的课程中,我们将关注于代码的安全性方面的问题。同样的代码在不同的场合下执行的结果有可能会不同。所以在以后的编程中会更加注重自己的代码质量。在处理多线程问题中,需要关注函数是否是可重入的,使用互斥锁,读写锁以保证多线程安全。同时了解了函数的可重入性与线程安全之间的关系,可重入的函数不一定是线程安全的;可重入的函数在多个线程中并发使用时是线程安全的,但不同的可重入函数(共享全局变量及静态变量)在多个线程中并发使用时会有线程安全问题(可能是线程安全的也可能不是线程安全的);不可重入的函数一定不是线程安全的。

    最后一个实验中,在linux下对代码的编译可以编写Makefile文件,然后直接用make命令编译会省事不少。getopt()用来分析命令行参数。参数argc和argv分别代表参数个数和内容。

      软件设计的主要原则:模块化,接口,信息隐藏,增量开发,抽象,一般化,这需要在今后的学习工作中慢慢来体会。模块化的思想是降低模块间的耦合模块内的内聚,可重用模块接口的设计使得代码块更加通用。软件工程的核心不是在于如何去实现需求的功能而是在于何如高效的实现。这就好比瓦匠可以盖几层小楼,但是无法去盖一栋高层大厦。而软件工程就是告诉我们如何从只能够从盖几层小楼的“瓦匠”转变为能够盖高楼大厦的工程师。另外,在一次次实验过程中,自己对linux基本操作越来越熟练,也学到了很多新的命令,为以后深入学习Linux打下了良好的基础。第一次了解并使用了代码库的git功能,自己查资料了解了代码库的其他相关用法,也是今后做其他项目的一个基础。

      感谢孟老师的辛勤付出,为我们提供了一个这么好的学习平台,不仅仅只是一门软件工程的课程,还拓展了一些知识,提高了我的计算机素养,我今后会继续努力提高自己的能力。

     感谢学长的帮助与指导,让我们在8周的学习中有了更多交流的机会,学到了更多的东西。因为你们的付出,让这门课更加充实。


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值