原创作品转载请注明出处《软件工程(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文件来编译文件

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

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

  1. 2021年中国科学技术大学软件工程电子信息考研信息

    大学简介: 中国科学技术大学(University of Science and Technology of China),位于安徽省合肥市,直属于中国科学院,为中央直管副部级建制,由中国科学院.教育 ...

  2. 中国科学技术大学计算机研究生调剂,2019年中国科学技术大学计算机科学与技术学院软件工程专业学位(非全日制)研究生校内调剂简章...

    2019年中国科学技术大学计算机科学与技术学院软件工程专业学位(非全日制)研究生校内调剂简章 已出,圣才考研网小编为大家整理了相关内容,欢迎大家点击查看!更多考研动态|模拟试题|历年真题请关注圣才考研 ...

  3. 中国科学技术大学计算机科学夏令营,中国科学技术大学计算机科学与技术学院(专业学位)软件工程保研夏令营...

    考研真题资料优惠价原价选择 中国科学技术大学计算机科学与技术学院(专业学位)软件工程保研夏令营信息,是考研之前需要获取相应的考研信息,比如考试大纲.招考专业.招考目录等等基本信息,这些内容是进行考研前 ...

  4. 【考研经验】中国科学技术大学软件学院考研经历及复试回忆

    原文作者   木子杨65 点击原文链接,可进入原帖. A----初试 一   写在开始: 先介绍下自己的基本情况,给大家打个底:自己是通信工程专业毕业,工作了三年的又去考研的loser,一志愿初试37 ...

  5. 中国科技大学计算机考研复试内容,中国科学技术大学考研复试

    出国留学网考研网为大家提供中国科学技术大学材料科学与工程学院2018考研复试内容,更多考研资讯请关注我们网站的更新! 中国科学技术大学材料科学与工程学院2018考研复试内容 为进一步规范硕士生复试工作 ...

  6. 重磅!中国科学技术大学,成立新学院!

    本文来源:新华社 记者陈诺,编辑:募格学术 经过一年多的筹备,10月26日,中国科学技术大学科技商学院正式成立. 据介绍,中国科学技术大学科技商学院由安徽省人民政府.中国科学技术大学.合肥市人民政府三 ...

  7. 中科大计算机网络空间安全,2020年中国科学技术大学网络空间安全考研经验分享...

    原标题:2020年中国科学技术大学网络空间安全考研经验分享 大家好,我是育明考研小赵老师 关于中国科学技术大学网络空间安全考研信息汇总,请参考 一.院校介绍 中国科学技术大学创建于1958年,是中国科 ...

  8. 2020中科大计算机分数线,2020年中国科学技术大学强基计划入围分数线,录取分数线,中国科大强基计划笔试、面试...

    2020年是强基计划首年,国家教育部取消自主招生,转而将目光投向更具体的基础学科领域,聚集36所双一流高校开展强基计划招生,选拔优秀学生作为人才储备,并辅以细致入微的培养方案,对入选者进行深造培养,以 ...

  9. 中国科学技术大学计算机考研资料汇总

    中国科学技术大学计算机科学与技术学院官网 http://cs.ustc.edu.cn/ 中国科学技术大学软件学院官网 https://sse.ustc.edu.cn/pages/index.php 中 ...

最新文章

  1. Egret IDE中搜索,过滤文件,只搜索.ts
  2. sql server php 案例,php连接sql server 2008案例
  3. 入选2021全球青年领袖榜单,蚂蚁何征宇的技术人生
  4. [Winform]安装在C盘,无操作权限的一个解决办法
  5. Angular如何对包含了HTTP请求的服务类进行单元测试
  6. 测试人员转型是大势所趋:我的十年自动化测试经验分享
  7. Android-解决ViewFlipper与ScrollView滑动响应事件拦截的问题【转】
  8. 论文笔记:语音情感识别(三)手工特征+CRNN
  9. python怎么爬取知乎回答并制作词云_使用python爬取流浪地球影评并制作词云,看看别人都说了些说什么...
  10. 用httpPost对JSON发送和接收的例子
  11. 基于java+swing的物业收费管理系统(java+swing+Gui)
  12. 防止backspace键后退网页
  13. 是java运行时环境的缩写,java运行环境的英文缩写
  14. Win10+1050Ti配置tensorflow-gpu教程 (解决1050ti配置cuda失败的问题)
  15. Android全屏和强制横屏竖屏设置
  16. 我的世界网易绘梦师国服 物品材料介绍
  17. 计算机辅助翻译在翻译中的应用,计算机辅助翻译系统在翻译教学中的应用
  18. MT3: 多任务多轨音频转录
  19. 嵌入式硬件开发基础(持续更新)
  20. 玄幻:开局选择瑶池,我只想默默签到!(二)

热门文章

  1. C#——体重指数计算器
  2. Zookeeper详解---从入门到精通
  3. XiYou-Linux 2018年面试题
  4. 普遍化的混合云架构,为何再一次被行业“重点关注”?
  5. vue-solt插槽
  6. A a = new A()
  7. STM32+GUI Guider+Littlevgl
  8. 职场巨婴图鉴:没带实习生吃午饭,她把我怼上热搜
  9. LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol
  10. Linux系统中添加IPv6模块(TQ2440开发板)