您的位置:首页 > 编程语言 > C语言/C++

软件工程(C编码实践)学习总结——中国科学技术大学孟宁老师主讲!

2017-06-17 17:33 316 查看
       原创作品转载请注明出处《软件工程(C编码实践篇)》MOOC课程http://mooc.study.163.com/learn/USTC-1000002006

      软件工程(C编码实践篇)》,课程的主要是讲授软件工程相关知识。孟宁老师并没有局限于传统软件工程科的授课方式,而是通过实现一个C语言小项目,不断的改进、演化来呈现无设计代码、模块化设计的代码、可复用的代码和回调函数等接口设计,以及可重入函数、线程安全等较深入的设计问题。并且课程给出的代码很全且详细,通过跟随模仿来训练工程化代码的编写能力,辨识代码的工程质量差异。

       不同于其他的课程,这次的软件工程采取的线上线下课程,让我受益良多。由于是通过完善一个项目来不断推进对软件工程思想的理解,在学习的过程中并没有感觉到枯,反而有了极大的兴趣,使得我对软件工程有了更深入的理解。同时,实践的过程中不需要在自己的电脑上搭建环境,给自己负载满满的电脑带来了极大的解放。

       老师很幽默,每次看视频的时候,都会打开记事本,写下老师所说的内容,或者关键代码。笔记截图如下:



        同时,视频看完后也会立马去完成线上的实验,在线下实验的时候,就会回顾本实验的内容,并且通过go语言实现。在完成实验后,会认真的写实验报告,记录下自己实验过程与思想,以及遇到问题。所写的实验报告得到了同学们的认可。

一、学习心得

        好的软件工程代码是讲究代码的规范,设计的规范,模块化思想,需要保证线程安全的,子系统的可重用。学习到诸多知识,仅列出其中的这一部分知识。

        1. 在代码的规范上,需要项目组统一格式,函数和变量的命名方式,每个语句前是用tab键还是用4个空格 等等都需要规范!写代码一定要考虑错误处理,编码中的功能实现与错误处理符合20/80规律,大多数时间是写错误处理使得代码更健壮。

        2. 在设计规范上,要保证代码是高内聚,例如一个函数只做一件事,一个模块只做一类事的,实现功能尽量用库函数;还有要遵循“不和陌生人说话”的原则,以保证除了类提供的接口,别人无法访问类的其他内容。同时要合理使用数据结构、控制结构等来简化代码。

        3. 在模块化的思想中,讲究高内聚低耦合,接口要规范,代码要注意通用性,接口定义了软件单元对外提供的服务,函数名、参数和返回值是接口的三个显性要素。

        4. 在处理多线程问题中,需要关注函数是否是可重入的,使用互斥锁,读写锁以保证多线程安全。一个函数是可重入的,一个模块是可重入的概念,若每个函数是可重入的,但整个模块也有可能是不可重入的。

        5. 在子系统的设计当中,要设计出可重用的接口。即使是makefile文件,也需要考虑到可重用性。

二、实验报告

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

          实验思路:a. 使用mkdir lab1创建一个文件夹,并在目录下创建一个hello.c文件;

                           b. 使用vim打开的hello.c文件;

                           c. 在hello.c文件中写入代码并使用:wq命令保存;

                           d. 使用git add 、git commit和git push提交写好的代码到代码库;

           实验报告:https://www.shiyanlou.com/courses/reports/1270279

       2. 实验二:命令行小程序V1.0

           实验思路:a. 使用vim ~/.vimrc更改vim配置文件

                            b. 创建实验文件夹lab2,创建menu.c

                            d. 使用vi menu.c,打开文件写代码

            实验报告:https://www.shiyanlou.com/courses/reports/1272283

       3. 实验三:内部模块化的命令行菜单小程序V2.0

            实验思路:a. 首先将所有程序代码写在menu.c一个文件中

                             b. 待运行成功之后,将menu.c文件拆分为3个文件:分别为linklist.c, linklist.h, menu.c;

                                 linklist.h文件中存放程 序的结构体定义和函数声明;

                                 linklist.c存放linklist.h声明函数的实现;

                                 menu.c存放具体的每个指令函数的实现

                             c. 重新运行程序成功

             实验报告:https://www.shiyanlou.com/courses/reports/1273261

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

             实验思路:a. 首先创建linktable.h文件,写入函数名以及宏定义

                              b. 创建linktable.c文件,写入函数的具体实现

                              c. 创建menu.c文件,写入对具体命令的操作等

                              d. 编译执行文件

              实验报告:https://www.shiyanlou.com/courses/reports/1274961

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

              实验思路:a. 在se_files目录下通过命令tar -zxvf命令解压lab5-1.tar.gz

                               b. 解压完后出现lab5.1文件夹,进入该文件夹;

                                   编译linktable.c,linktable.h,menu.c三个文件,运行menu,发现quit命令无法使用

                               c. 打开linktable.c,修改语句,使程序能够正确运行

                               d. 通过命令cp -r se_files/lab5.1/. Code/shiyanlou_cs122/lab5

                                   将几个文件拷入到lab5文件夹下进行接下来的实验

                               e. 对linktable.h,lintable.c,menu.c三个文件进行修改,重新编译运行

              实验报告:https://www.shiyanlou.com/courses/reports/1276057

          6. 实验七:将menu设计为可重用的子系统

             实验思路:a. 首先像之前实现menu程序的接口,按照这次实验要求封装接口;

                              b. 修改命令行参数的方式,定义一个函数将命令行转换成argc和argv;

                                  shell将命令行解析成argc和argv传递给执行程序;

                              c. 将自己编写的具体指令处理函数使menu程序接口定义在test.c文件中;

                              d. 编写Makefile文件。

              实验报告:https://www.shiyanlou.com/courses/reports/1278273
三、总结

      1. 对软件工程的思想有了更进一步的认识,知道了函数的可重入性,线程安全等知识;

          第一次懂得了如何在真正项目中应用软件工程思想。

      2. 同时在课程实践过程中,对linux系统的一些指令和c语言有了进一步了解。

      3. 懂得了如何使用makefile文件来编译文件

      遗憾:遗憾的是由于自己选的课不均衡,导致课都在下半学期,没能够上台跟老师和同学分享知识。还有就是没有更多的机会来实践软件工程思想,希望自己以后能够将软件工程的思想应用到自己所做的项目中。

  

     

        

        

    
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息