sudan寂 + 原创作品转载请注明出处 + 《软件工程(C编码实践篇)》MOOC课程http://mooc.study.163.com/course/USTC-1000002006
一、对软件工程的理解及学习心得
理解:IEEE对于软件工程的定义是将系统化的、严格约束的、可量化的方法应用于软件的开发、运行和维护,即将工程化应用于软件。在软件开发的过程中,尤其是大型软件的开发中,随着问题规模的扩大,软件很容易产生各种各样的问题。按照软件工程的开发模式来系统化、工程化地开发软件,会使软件的开发变得简单、高效。在代码层面上来说,利于软件工程的一些方法如模块化、KISS、不要和陌生人说话等,会使代码更高效、不容易出错。软件工程的一些基本的要求如代码的风格规范、文档的重要性,都会使软件的开发变得更容易。
学习心得:通过这次课程很好的弥补了之前空有理论无法结合实际的状况,因为我现在在求学阶段,基本上对于软件编码实现停留在一人独立编程上,所以即使我学过《软件工程》这门课,但是却运用不到实际去,因此这门课修正了自己之前关于软件工程对于一人编程来说不甚重要的想法,学会了如何将软件工程思想运用到编码实现上。C语言实践篇从实现一个menu小程序入手,开始讲解模块化(关注点的分离)、代码设计原则(KISS,设计与实现保持一致,不要和陌生人说话,合理利用控制结构、数据结构简化代码,一定要有错误处理)和接口(接口五要素,接口设计)等等。并且也涉及到了一些线程安全的问题,最后还补充了设计的方法论,质量视角,设计原则等等。从menu这个程序来看,基本上是逐步深化、细化相关功能,在具体的实现中体现了许多优秀的思想。比如说callback机制,将用户的函数指针传入接口,在逻辑实现层进行调用,从而使得接口更加通用,用户使用更加方便。再比如说信息隐藏,将声明放在头文件中,具体的数据结构实现放在实现文件中。以及将实际接口再次进行封装,提供不多不少的接口给用户,而不是一股脑将create,add,delete这些接口全部提供给用户,将内部实现再一次加深隐藏。
二、实验报告作业
实验一:写一个hello world小程序
实验二:命令行菜单小程序V1.0
只有一个menu实现文件(menu.c),没有业务逻辑层,数据存储层的分离,所有功能在一个文件实现。具体实 现使用C的字符串匹配函数读取用户输入并进行匹配,根据不同命令输出调用不同函数输出结果。
实验三:内部模块化的命令行菜单小程序V2.0
将用户与实现分开,创建linklist.h,linklist.c文件进行程序数据结构部分的定义和实现,在menu中进行调用。
实验四:用可重用的链表模块来实现命令行菜单小程序V2.5
使用linktable替换linklist,其不再是简单的抽象数据结构定义,有了一定功能的模块,变得更加通用,不仅限于本程序。
实验五:用callback增强链表模块来实现命令行菜单小程序V2.8
callback机制使得用户能够更好的调用接口,信息隐藏确保了用户不能更改实现。
实验七:将menu设计为可重用的子系统
使用C语言string库中的strtok和getopt等实现带参数的命令,将暴露的接口进一步隐藏,仅提供两个接口。使用makefile文件编译工程代替手工输入命令。
实验全部代码 (实验一到实验七的完整代码)
三、实验总结
收获:学习这门课程最大的收获是学习了Linux命令的使用,在学习这门课之前完全没有接触过Linux,在学习之后熟悉了Linux的基本操作和vim的基本操作。还有就是系统的学习了软件的分析与设计过程,加深了对UML的理解。
遗憾:课时比较短,对分析与设计过程有了系统的认识,但感觉很多细节上还不是特别明白。