余鑫 + 原创作品转载请注明出处 + 《软件工程(C编码实践篇)》MOOC课程http://mooc.study.163.com/course/USTC-1000002006
总结:对软件工程的理解及学习软件工程(C编码实践篇)的心得
经过近半学期对软件工程的学习,通过课程学习及一点点完成一个menu小程序,让我对软件工程有了一定的认识。软件工程就像我以前所接触的工业工程,是对工程的一个系统的详细的构建。一个好的工程并不能像原始作坊一样,蒙头去完成最基本的需求,而是要先从需求开始,逐步地搭建整个工程的构架,再进行一步一步的完善。中间不仅要完成简单的基本需求,更要从软件的可重用性,安全性,模块化的设计要求去考虑。经过了代码风格规范的要求,模块化设计的思想,接口规范和通用原则,callback函数的使用,子系统可重用的设计等章节的联系,让我对软件工程的这些设计要求有了具体层面上的理解。学习这门课收获颇丰,受益匪浅。
代码层面的软件工程的理解:
代码设计规范:KISS,设计与实现保持一致,不要和陌生人说话,一定要有错误处理 ,用数据结构来简化代码
函数的可重入性
高内聚低耦合的架构设计目标模块化设计
线程安全性设计
实验报告作业及小结:
1.熟悉linux实验环境
实验一:写一个hello world小程序
小结:通过实验熟悉了linux的基本操作指令
2.代码风格规范
实验二:命令行菜单小程序V1.0
小结:学习了缩进、命名、注释等代码编排的风格规范。代码风格的原则:简明、易读、无二义性。
3.基本的模块化设计
实验三:内部模块化的命令行菜单小程序V2.0
小结:学习使命令小程序模块化,将实现不同功能的程序模块化,使程序便于修改管理,提高程序的可扩展性。
4.重用模块的接口设计
实验四:用可重用的链表模块来实现命令行菜单小程序V2.5
小结:学习接口规范,了解内聚和耦合(讲究高内聚低耦合),通用原则。nktable链表的实现提供一种通用数据组织的结构,我们可借此对数据进行任意的组织,而不必考虑数据的存储形式是什么。这在实践中是方便与易用的。利用这种方式可以提高代码的重用性。
5.可重用模块的接口设计(callback函数)
实验五:用callback增强链表模块来实现命令行菜单小程序V2.8
小结:学习了callback方式的使用,以此使得给用户提供的接口更加通用。之前没想到过c语言也可以这样来构造接口,隐藏函数私有信息。通过这样的方法产生类似面向对象编程的效果。此次实验不仅是解决这单个程序的需求,还学习了这种面向对象的思想。
6.函数的可重入性(reentrant)及线程安全浅析
小结:了解多线程的概念,知道函数的可重入性(reentrant)与线程安全概念和关系。用互斥锁,读写锁改进程序。
7.子系统的可重用设计
实验七:将menu设计为可重用的子系统
小结:学习使用int main(int argc, char * argv[]) shell将命令行解析成argc和argv传递给执行程序,以及Makefile的使用。
学习《软件工程(C编码实践篇)》课程中最大的收获:
学习这门课不仅仅是学习了最基本的软件工程的框架和设计要求,更重要的是学到了软件工程的思想,学习了从大局角度构建一整个个工程的思维。了解到了软件工程远不止最基本的构建,更多的是从多方面(如:模块化,可重入,线程安全等)进行考虑设计。从此次课程收获颇丰,受益匪浅。
学习完《软件工程(C编码实践篇)》课程后您最大的遗憾:
学习这门课的遗憾可能是没有完全独立敲出所有的代码,之前也没有项目经历,所以对有些代码的设计没有很深刻的理解。