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

常演sa17225011 + 《软件工程(C编码实践篇)》MOOC课程http://mooc.study.163.com/course/USTC-1000002006

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

这个学期有幸选到了孟宁老师的《高级软件工程》这门课,作为一个此前未系统学习过软件工程的非相关专业学生,在学习本门课程之前,对软件工程的印象仅仅是一本厚厚的教科书和枯燥无味的文字描述,就代码层面来说,也仅仅停留在代码量和对代码规范的浅显理解上。在这两个月的学习过程中,从一开始的熟悉linux开发环境,到慢慢发现软件工程并非只有枯燥的教科书,也并非只有代码量和代码规范,学习下来,收获很多。在网易云课堂上完孟宁老师的《软件工程(C编码实践篇)》之后,感觉收获很大。我觉得这门课最大的特点就是理论与实践相结合,利用实验楼的在线Linux虚拟机环境让我们自己做,在实践中慢慢体会软件工程的原理,使得枯燥的理论变得生动形象。以及实验楼中Menu小项目的动手实践,对许多抽象化的软件工程思想有了深入的理解。无论是在代码风格、项目架构还是项目管理方面都有很大的收获。

  • 实验报告作业列表

实验一:写一个hello world小程序:https://www.shiyanlou.com/courses/reports/1290307
主要是熟悉实验楼环境,初步了解代码规范,熟悉linux基本命令,包括cd、ls、mkdir等命令,vim基本命令,包括vi使用,一般模式、编辑模式、命令模式等模式切换,markdown的书写,包括标题、插入链接、插入图片、两次enter等。

实验二:命令行菜单小程序V1.0:https://www.shiyanlou.com/courses/reports/1291327
实现了命令行的小程序,最主要的学习到很多代码规范,包括:
-缩进4个空格
-变量命名采用lowCamel风格
-类型/类/函数名用Pascal风格
-类型/类/变量名用名词或名词组合
-函数名用动词或动宾短语
-行宽小于100字符
-括号清楚地表示逻辑优先级
-所有{和}独占一行,且成对对齐
-不要把多个语句和多个变量定义放在同一行
-注释、文件名、路径等用英文ASCII字符,不要用中文和特殊字符
-不要解释程序如何工作(How),要解释程序做什么(What),为什么这(Why),需要特别注意的地方

实验三:内部模块化的命令行菜单小程序V2.0:https://www.shiyanlou.com/courses/reports/1293413
基本的模块化设计(Separation of Concerns),使实验二的代码模块化,并且学习代码设计中的一些常见方法,KISS、不要和陌生人说话原则等。

实验四:用可重用的链表模块来实现命令行菜单小程序V2.5:https://www.shiyanlou.com/courses/reports/1295954
可重用模块的接口设计(天王盖地虎),代码是一个不断迭代调试的过程-可重用的链表模块来实现命令行菜单小程序,通过本次实验会使你更加的了解到程序模块化设计的方便之处,在后期会更加方便的维护自己的代码等。

实验五:用callback增强链表模块来实现命令行菜单小程序V2.8:https://www.shiyanlou.com/courses/reports/1298809
学习利用callback函数参数使Linktable的查询接口更加通用。

当我们向用户提供接口的时候,要学会注意接口信息的隐藏,只提供给对方必要的信息,而不能完全暴露自己的信息,以免被别人攻击,修改自己内部信息而造成不可预估的后果。有关args的使用有点晕晕的,并没有完全理清楚其中的机制,特别是后来在testlinktable.c程序中遇到了点麻烦,由于多了一个参数,但这个参数并没有使用,所以有点怪怪的。

实验七:将menu设计为可重用的子系统:https://www.shiyanlou.com/courses/reports/1304032
将menu设计为可以重用的子系统,利用命令行参数argc/argv来处理命令参数,由于menu函数是提供给用户使用的,它只需要向外提供一个执行命令的方法和一个初始化方法。Makefile,这个我是新学到的,真的很好用,程序更加有套路,编译程序更方便,相信以后会越来越多的用到。大概了解了函数getopt的用法,虽然基本实现了复杂命令参数,但是getopt函数里的定义的几个全局变我并不太清楚其功能,在后续的编码中,应该继续完善

  • 对在代码层面的软件工程的理解

遵守代码规范的主要目的并不是为了能编译出执行效率更高的可执行程序,而是方便他人阅读。因为软件工程既然是工程,就需要多人的分工协作,一个程序员写的代码不仅仅是给自己看的,还需要给合作者看,所以代码要遵守一些约定俗成的规则,例如缩进要有层次,大括号独占一行等等。各大公司甚至出台了自己的编程规范,例如Google就先后出台过C++、Java、Python等多种语言的规范。即把一个复杂的大问题分解为若干简单的、容易解决的小问题,然后去解决这些小问题;而如何定义这些“小问题”,又涉及到抽象层级的确定,最典型的例子如TCP/IP的分层协议模型。软件工程中的模块是指整个系统中一些相对对独立的程序单元,每个程序单元完成和实现一个相对独立的软件功能。通俗点就是一些独立的程序段。关于模块的设计,需要遵循“KISS”,即Keep it simple and stupid.
模块通过接口与其他模块进行交互。耦合是软件结构中各模块之间相互连接的一种度量,耦合强弱取决于模块间接口的复杂程度、进入或访问一个模块的点以及通过接口的数据。而内聚是从功能角度来度量模块内的联系,一个好的内聚模块应当恰好做一件事。它描述的是模块内的功能联系。
编写代码不仅仅是解决“一个”问题,而是要去解决“一类”问题。为了实现这一点,实验五中采用了利用callback函数参数使Linktable的查询接口更加通用。如果把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。

  • 总结

学习《软件工程(C编码实践篇)》课程后,我认识到了如何灵活运用c语言的特性来进行封装,信息隐藏,如何一步步的将一个程序进行模块化修改与设计,并且做到高内聚,低耦合的设计。感受到新颖的授课模式,通过实验楼小程序的实践,对软件工程思想有了更深刻的理解。但是由于课程时间比较紧张,对一些具体代码的理解还不够透彻,希望以后能够继续学习。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值