软件工程(C编码实践篇)总结

时间:2023-03-08 23:25:35
软件工程(C编码实践篇)总结

陆伟丹 + 原创作品转载请注明出处 + 《软件工程(C编码实践篇)》MOOC课程http://mooc.study.163.com/course/USTC-1000002006

对软件工程的理解及学习软件工程(C编码实践篇)的心得:

我理解的软件工程,就是要用工程化的思想去写软件。即“软件的工程”,这和现实中的建筑工程等等的相类似,需要系统化工程化的方法,是一个在不断搭建的工程。和我们平时写小的Demo不同,当我们面对一个大的项目的时候,我们要考虑的不只是让代码跑起来,还需要考虑如何和其他参与项目的人员进行更好的沟通,如何让后期维护的人员能够更容易理解我们的代码。基于上述的种种要求,也就有了代码风格规范的要求,模块化设计的思想,接口规范和通用原则,callback函数的使用,子系统可重用的设计的引出等等。通过这些处理,提高了代码的可读性和可重用性,降低了后期维护的成本。

学习了孟宁老师的的软件工程课程,我收获颇多。孟宁老师讲课由浅入深,注重实践和知识的结合。随着命令行工具的迭代,讲授的知识也一步一步深入下去。从一开始的几行的menu.c,到最后命令行工具的迭代完成,真的就像是做完了一个工程一样,给人一种成就感。

课程报告与代码

1.熟悉linux实验环境

【实验一:写一个hello world小程序 实验报告 代码库

小结:在linux环境下,编写helloworld小程序。本次实验主要是让学生了解实验楼的环境,github的使用,linux的基本命令ls、cd,vi的基本操作,gcc编译程序等。

2.代码风格规范

【实验二:命令行菜单小程序V1.0 实验报告 代码库

小结:学习缩进、命名、注释等代码编排的风格规范。代码风格的原则:简明、易读、无二义性。

3.基本的模块化设计

【实验三:内部模块化的命令行菜单小程序V2.0 实验报告代码库

小结:模块化思想,代码的业务逻辑和数据存储之间的分离。在实验二的基础上将系统抽象为两个层级:菜单业务逻辑和菜单数据存储。

4.重用模块的接口设计

【实验四:用可重用的链表模块来实现命令行菜单小程序V2.5 实验报告 代码库

小结:学习接口规范,了解内聚和耦合(讲究高内聚低耦合),通用原则。

5.可重用模块的接口设计(callback函数) 【实验五:用callback增强链表模块来实现命令行菜单小程序V2.8 实验报告 代码库

小结:应用callback函数的方法来增加模块通用性,实现信息隐藏。

6.函数的可重入性(reentrant)及线程安全浅析

小结:了解多线程的概念,知道函数的可重入性(reentrant)与线程安全概念和关系。用互斥锁,读写锁改进程序。

7.子系统的可重用设计

【实验七:将menu设计为可重用的子系统 实验报告 代码库

小结:学会写Makefile工程文件,学会了使用getopt函数。

8.代码背后的设计思想

小结:学习从不同的质量视角,例如产品视角、用户的视角等 ,将menu开源希望有人使用它。 总结了设计方法论和几个重要的设计指导原则, 模块化、接口设计、信息隐藏、 增量开发、抽象和一般化。

代码层面的软件工程的理解

通过学习本课程,我了解到,代码一定要写的规范、易于阅读。代码风格就如同人的外貌,而封装接口就是衣装搭配,代码的可重用性代表工作能力,可重入函数和线程安全体现了这个人驾驭复杂局面的能力。2000行代码复杂度是初级程序员的第一个瓶颈,包容变化是模块化的主要作用。

代码设计规范

  • KISS(Keep it simple and stupid)
  • Using design to frame the code (用设计框代码,设计与实现保持一致)
  • 不要和陌生人说话
  • 一定要有错误处理 (功能实现/错误处理:2/8)
  • 用数据结构来简化代码

高内聚低耦合的架构设计目标

函数的可重入性

学习《软件工程(C编码实践篇)》课程中最大的收获:

通过自己动手写一个小的Demo,让我对软件工程有了一个全新的认识,理解了一些软件工程的思想方法。让我能够站在一个软件开发人员的角度来看待一个项目。软件能不能跑起来当然重要,但这并不是唯一的要考虑的问题,还要考虑一个软件是否符合工程化的思想,是否做到了模块化、可重入、线程安全等等标准。

学习完《软件工程(C编码实践篇)》课程后最大的遗憾:

关于课程本身并没有什么遗憾,遗憾的是在这之前自己没有做过什么完整的项目,通过这次课程算是体验了一下工程的魅力。