陈涛 (SA16225028) 《软件工程(C编码实践篇)》MOOC课程http://mooc.study.163.com/course/USTC-1000002006
课程实验内容列表
实验一:编写一个hello world的小程序
实验报告:https://www.shiyanlou.com/courses/reports/1243967
实验二:命令行菜单小程序
实验报告:https://www.shiyanlou.com/courses/reports/1244694
实验三:内部模块化命令行菜单程序
实验报告:https://www.shiyanlou.com/courses/reports/1245456
实验四:可重用链表模块来实现命令行菜单小程序
实验报告:https://www.shiyanlou.com/courses/reports/1246178
实验五:用callback增强链表模块来实现菜单小程序
实验报告:https://www.shiyanlou.com/courses/reports/1246760
实验七:将menu设计为可重用子系统
实验报告:https://www.shiyanlou.com/courses/reports/1248131
实验代码:http://git.shiyanlou.com/chentao/shiyanlou_cs122
软件工程专业是一门关于如何构建有效、实用、高质量的技术性学科。软件过程为一个为建造高质量软件所需完成的任务的框架,即形成软件产品的一些列步骤,包括中间产品、资源、角色及过程中采取的方法、工具等范畴。软件工程三要素 = 过程+方法+工具。
在第二次课在编码的过程中,必须要遵循代码风格原则:简明、易读、无二义性。在设计代码的时候,掌握了模块化的思想,它是降低模块间的耦合模块内的内聚,可重用模块接口的设计使得代码块更加通用。比如在实验三,我们将菜单业务逻辑和菜单数据存储抽象为两个层级。在代码中,我们还要考虑错误处理。因为程序的错误处理要花费到80%的时间,可以采用断言的方式来处理。
在第四次课,为了是我们的链表能够具有通用性,我们在前一次实验的基础上,把链表做成一个通用的数据类型,链表存放的数据类型可以由用户自己定义,给出通用链表的各种接口供使用者使用,如创建列表,增加节点,删除节点,查找节点等等。那么在以后的使用链表,就不用再单独写一个,这样能够提高开发效率。
在第五次课,主要了解了callback回调机制。当方式某一个事件或者出现某一个状态后必定会进行某种操作,但是这种操作又不能写死,不同环境会有不同实现,这就需要调用者通过传函数指针参数的方式来告诉如何处理。例如在实验四中,在定义链表查找的时候,并未把查找条件给出。而是通过调用者传递指针参数,来给出查找条件。此外,还需注意接口的信息隐藏,若是定义在头文件中,则很容易把链表的内部信息暴露给用户,需要在c文件中来定义链表内容,这样用C语言像面向对象一样来保护自己的数据类型。
在第六次课,涉及到了函数可重入性和线程安全的问题。可重入性指被多线程调用而不会产生数据错误,可以在任意时刻被打断,再运行是不会丢失数据。而线程安全是一个函数被多个线程调用而得到正确的结果。可重入的函数不一定是线程安全的;可重入的函数在多个线程中并发使用时是线程安全的,但不同的可重入函数在多个线程中并发使用时会有线程安全问题;不可重入的函数一定不是线程安全的。在处理这些问题时候,我们必须关注是否可以使用互斥锁来解决线程安全问题。
在第七次课,了解如何编写工程编译文件,这样使的运行更加的便捷;通过暴漏接口的方法实现了对可以单独完成某些功能的子系统的重用;了解strok,getopt函数使用,实现对命令行参数的分割以及选项匹配。
我理解的软件工程就是在开发软件过程中,使用一套科学、工程化的方法,削弱人一些主观的不利因素,使软件性能,可移植,可维护,成本,开发周期达到一种最优的状态。