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

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

2017-06-17 20:07 330 查看
乔月姣 + 原创作品转载请注明出处 + 《软件工程(C编码实践篇)》MOOC课程http://mooc.study.163.com/course/USTC-1000002006

一、对代码层面软件工程理解

代码的书写需要遵循统一格式,注意代码风格的原则:简明、易读、无二义性缩进、命名、注释等代码编排的风格规范。

在模块化的思想中,讲究高内聚低耦合,接口要规范,代码要注意通用性,注意以下原则,Purpose,Preconditions(assumptions),Protocols,Postconditions(visible effects),Quality Attributes。

高内聚就是一个函数只做一件事,一个模块只做一类事的,实现功能尽量用库函数;

要遵循“不和陌生人说话”的原则,以保证除了类提供的接口,别人无法访问类的其他内容。同时要合理使用数据结构、控制结构等来简化代码。

在C实践方面,C语言是面向过程的一门计算机语言但是它依然可以面向对象,就是运用callback函数。可以用callback函数实现多态以便接口更加通用,实现信息隐藏。

在处理多线程问题中,需要关注函数是否是可重入的,使用互斥锁,读写锁以保证多线程安全。同时了解了函数的可重入性与线程安全之间的关系,可重入的函数不一定是线程安全的;可重入的函数在多个线程中并发使用时是线程安全的,但不同的可重入函数(共享全局变量及静态变量)在多个线程中并发使用时会有线程安全问题(可能是线程安全的也可能不是线程安全的);不可重入的函数一定不是线程安全的。

在子系统的设计当中,要设计出可重用的接口。在Linux下对代码的编译可以编写Makefile文件,然后直接用make命令编译会省事不少。getopt()用来分析命令行参数。参数argc和argv分别代表参数个数和内容。

二、学习软件工程(C编码实践篇)心得体会

  关于线上课程,主要掌握了在linux系统下进行软件开发的具体过程,熟悉了linux环境,以及linux下的一下常用命令。课程实验项目主要是最终目标是实现一个通用的命令行的菜单子系统便于在不同项目中重用。从hello world开始不断迭代调试代码长的越来越像一个命令行菜单小程序。写代码要小步快跑不断迭代,罗马不是一天建成的。在做实际项目中并不鼓励从头开始写代码。而是找已有类似项目做逆向工程和再工程。

   掌握了代码的风格规范。代码风格的原则:简明、易读、无二义性。风格规范是指要注意缩进、命名、注释等代码编排的风格规范。

   代码的一些常见设计方法:KISS、using design to frame the code、icluding pseuducode、不和陌生说话的原则、合理利用Control Structures和Data Structures 来简化代码、一定要有错误处理。

三、各实验总结

熟悉Linux实验环境

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

实验一报告

实验一代码

小结:通过本次实验掌握了实验环境的搭建,学习了linux下的各种命令,重新熟悉了C语言的相关知识以及Git版本库的使用。

代码风格规范

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

实验二报告

实验二代码

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

基本的模块化设计

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

实验三报告

实验三代码

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

重用模块的接口设计

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

实验四报告

实验四代码

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

可重用模块的接口设计(callback函数)

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

实验五报告

实验五代码

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

函数的可重入性(reentrant)及线程安全浅析[实验六测试]

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

子系统的可重用设计

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

实验七报告

实验七代码

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

代码背后的设计思想

小结:几种不同的质量视角:产品的视角(内部质量)、用户的视角——是不是对用户有帮助、商业上下文的质量——投资回报和驱动力问题、运营推广也是一个关键、将menu开源希望有人使用它;设计方法论:不断地重构。几个重要的设计指导原则:Modularity、Interfaces、Information hiding、Incremental development、Abstraction、Generality

四、总结

收获

我们在软件工程开发过程中,要注重代码规范、设计规范、模块化、线程安全、子系统要可重用等,只有这样才能写出易读而又高效安全的代码。对于之前并没有接触过软件工程这方面内容的初学者,受益匪浅。

遗憾

没有在学习之余学习一些软件工程方面其他相关的知识,希望自己在以后的学习生活之余,多总结,多思考,多学习新知识。并能够熟悉掌握一个软件开发的流程,更加期待有机会和同道中人一起完成一个具有商业价值的软件开发项目。

致谢

研一的生活马上就要结束了,感谢孟宁老师提供的学习平台以及对软件工程这门的课程的讲解,学习软件工程这门课收获颇丰,让我重新对软件工程和软件开发有了新的认识。同时还要感谢一起讨论问题的同学,给予了我很大的帮助。希望今后可以再接再厉!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息