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

来源:互联网 发布:人肉俄罗斯转盘 知乎 编辑:程序博客网 时间:2024/06/05 19:38

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

班级:软设三班,学号:SA17225337,姓名:王成成

  • 原创作品转载请注明出处
  • Github地址:https://github.com/wccgeqian/wccgeqian
  • MOOC课程 :http://mooc.study.163.com/course/USTC-1000002006#/info
  • 实验楼课程:https://www.shiyanlou.com/courses/122

一、学习心得

  我本科就是学习软件工程的,但是动手能力不好,但是孟宁老师刚开始就给我们讲了这门课和本科的区别,,孟老师除了课上给我们讲授外,还有网上视频讲授的关于软件工程(C编码实践篇),从课上学习到线上学习,以及线下实验,都能很好的提高我们的代码能力,丰富我们的知识库。孟宁老师作为中国科技大学的老师,课上认真讲课,思路清晰,带着我们从从写一个简单的“Hello World!”小程序,不断的结合github代码托管平台、模块化、可重用链表模块、Callback、线程安全、Makefile工程文件等高级软件工程的思想,最终实现了一个可重用的菜单子系统,让我很庆幸我选到了这门课,受益匪浅。
  本门课程的学习主要分为两大部分,第一部分是视频讲课,学习理论知识,第二部分是线上实验,利用实验楼这一平台进行实际操作,下面针对每一部分说明我自己的个人收获和理解。

1、理论知识

  孟宁老师在每周都会给我们放出一节课,让我们课下学习,然后在下一次上课时给我们讲解比较困惑难懂的地方,而且每一节课老师都会主讲一个核心内容,从代码风格规范讲到代码背后的软件工程相关的设计思想,中间的课程会围绕我们自己实现的命令行菜单小程序来做一理论讲解,这里我就挑选其中印象很深刻的部分着重说明。

  • 代码风格规范,对于我个人觉得以下部分需要多注意:

        • 代码缩进4个空格    • 代码给谁看?程序员    • 代码风格的原则:简明、易读、无二义性    • 赋值或者等于判断“=”/“==”等二元操作符的前后应当加空格,但一元操作符就不用这样做。    • 不要把多条语句和多个变量定义放在同一行    • 注释使用英文,不要用中文,保持源代码是ASCII字符格式文件。    • 行缩进:每一级都相对上一级缩进四个空格。
  • 模块化思想:

         • ”开-闭”原则,对扩展是开放的,对修改是封闭的。     • 不要和陌生人说话原则      • 将系统模块放在不同的源文件
  • 代码设计中的一些常见方法:

        •KISS(keep it simple & stupid)    •using design to frame the code(matching design with implementation)    •including pseuducode     •合理利用Control Structures、Data Structures来简化代码    •一定要有错误处理
  • 可重入和线程安全

       可重入函数和不可重入函数,以及它们和线程安全之间的关系
  • 接口的五个要素:

    •Purpose 比如函数名表明了接口的目的•Preconditions 比如接口函数调用前已经做好了哪些准备•Protocols 比如参数和返回值的类型,指针指向的数据格式等•Postconditions 比如返回值、printf函数接口的效果是屏幕显示了字符串•Quality attributes 比如接口函数的执行时间限制在1s内  前置条件和质量属性是接口的两个隐含属性。

2、线上实验

  每一节课程之后都对应一个实验,但整个线上实验的主题都是围绕着如何实现一个“可重用的菜单子系统”。为了实现这个目标,孟宁老师通过课上讲解思想和重点,线上讲解实验过程的方式,从一个简单的打印“Hello World!”的字符输入输出程序,变成了一个具有复杂结构,功能强大的可重用的菜单子系统。完成七个实验之后我个人收获很大,真正动手编码完成理论和实践的结合。
实验一:写一个hello world小程序

     •加深自己对C语言编码的实践能力,同时对git指令进行复习和巩固。

实验二:命令行菜单小程序V1.0,具体要求参见视频

      •代码风格的原则:简明、易读、无二义性      •用表达式作为判断条件,不要用布尔变量做比较

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

      • 注意代码的业务逻辑和数据存储之间的分离,即将系统抽象为两个层级:菜单业务逻辑和菜单数据存储      • 遵守代码风格规范,参考借鉴代码设计规范的一些方法;      • 代码的业务逻辑和数据存储使用不同的源文件实现,即应该有2个.c和一个.h作为接口文件。

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

      • 体会到接口使代码开发效率更高      • 提高了menu程序的重用性      • 掌握学习了c程序的编译调试方法

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

    •回调函数是把函数的指针作为参数传递给另一个函数,回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。    •回调函数可以允许用户把需要调用的函数的指针作为参数传递给一个函数,以便该函数在处理相似事件的时候可以灵活的使用不同的方法。    •callback函数的使用提高了代码的重用性,实现了更松的耦合。同时将一些内部结构接口隐藏,简化了用户接口,更保证了使用安全,减少误操作。

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

    •Makefile方法能够减轻执行程序时繁琐的指令输入过程,尤其是在Makefile文件中,代码必须以Tab键规范格式,不可以用四个空格键。    •gets()方法有缓冲区溢出的问题,为了防止缓冲区溢出攻击的危险,使用fgets()方法更好。    •shell将命令j解析成argc 和 argv传递给执行程序,可以使用getopt函数获取命令行参数。    •修改menu之后,能够扩展功能,支持对新功能的添加。

二、实验报告索引

•Github:高软课程实验报告 & 代码 & Demos
•实验一:写一个hello world小程序
•实验二:命令行菜单小程序V1.0,具体要求参见视频
•实验三:内部模块化的命令行菜单小程序V2.0
•实验四:用可重用的链表模块来实现命令行菜单小程序V2.5
•实验五:用callback增强链表模块来实现命令行菜单小程序V2.8
•实验七:将menu设计为可重用的子系统

三、总结

  学习了孟宁老师这门软件工程实践课,使我对软件工程有了更深入的认识和理解,这是一门研究和应用如何以系统性的、规范化的、可定量的过程化方法去开发和维护软件,以及如何把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来。在孟宁老师的一步一步的指引下,让我们懂了如何运用软件工程的设计思想通过不断迭代去实现一个“可重用的菜单子系统”,其中软件工程思想和C编码实战相结合,理论联系实际,有利于我们更好的掌握软件工程的思想,每个知识都需要我们慢慢钻研进而掌握。但是学习这门课程孟老师给了我们明确的指引方向,帮助我们有条有理的学习软件工程,通俗易懂的比喻也让我们更好的理解。除此之外就是这门课程作业有点多,但是的确可以从中收获很多知识。纵观整个线上课程的安排以及线上实验的设置,使得我对软件工程有了更深入的认识和理解。