代码中的软件工程

前言

首先感谢孟老师对本部分知识的教学指导。

本文主要根据孟宁老师课上所讲的软件工程的相关知识,以VS Code + GCC工具集为主要环境编译调试课程项目menu的仔细阅读分析源代码,结合代码分析其中的软件工程方法、规范或软件工程思想。

参考资料:https://gitee.com/mengning997/se/blob/master/README.md#代码中的软件工程

一、编译调试环境配置

1、准备MinGW-64用于编译和调试

通过gcc -v命令查看之前安装的MinGW版本号

 

 

2、VSCode环境搭建---安装C/C++插件

打开 VSCode 点击最左侧的管理扩展插件图标(Ctrl+Shift+X),如下图在扩展插件市场里搜索 C++,找到 Microsoft C/C++扩展插件“C/C++ for Visual Studio Code”,点击 Install 安装即可。

 

 

在VSCode中打开menu项目,点击运行调试后生成了lunch.json和task.json两个文件

 

 

对两个文件进行配置:

 

 

 

 

运行hello程序查看是否配置成功:

 

 

 

 

二、menu项目分析

1、模块化分析

模块化是在软件系统设计时保持系统内各部分相对独立,以便每一部分可以被独立地进行设计和开发。

软件设计中的模块化程度是一个软件设计好坏的一个重要指标,一般使用耦合度和内聚度来衡量软件模块化的程度,我们代码追求的是低内聚高耦合。

整个menu分解为了linktable模块、menu模块和test模块

 

 

 

 

 

 

我们可以看出在linktable.c中我们都是对数据进行直接操作,在menu.c中是在进行逻辑层的操作,最后test.c则是通过测试,将运行结果展示给用户。当代码模块化之后,就需要接口来实现模块之间的相互调用。

 

2、可重用接口

在一个系统中,系统的各种功能是由许许多多的不同对象协作完成的。在这种情况下,各个对象内部是如何实现自己的,对人员来讲就不那么重要了;而各个对象之间的协作关系则成为系统设计的关键。小到不同类之间的通信,大到各模块之间的交互,在系统设计之初都是要着重考虑的,这也是系统设计的主要工作内容。面向接口编程就是指按照这种思想来编程。因此接口的设计好坏与泛化能力直接可以体现一个项目的优秀程度。

 

 

可重用接口的设计除了方便我们重用代码之外,还可以有效地隐藏软件模块内部的实现细节,为外部调用接口的开发者提供更加简洁的接口信息,同时也减少外部调用接口的开发者有意或无意的破坏软件模块的内部数据。

 

3、线程安全

线程安全是多线程编程时的计算机程序代码中的一个概念。在拥有共享数据的多条线程并行执行的程序中,线程安全的代码会通过同步机制保证各个线程都可以正常且正确的执行,不会出现数据污染等意外情况。

线程安全问题都是由全局变量及静态变量引起的。若每个线程中对全局变量、静态变量只有读操作,而无写操作,一般来说,这个全局变量是线程安全的;若有多个线程同时执行写操作,一般都需要考虑线程同步,否则的话就可能影响线程安全。

 

 

加锁属于互斥同步的一种,  互斥同步是最常见的一种并发正确性保障手段。同步是指在多线程并发访问共享数据时,保证共享数据在同一时刻只被一个线程使用(同一时刻,只有一个线程在操作共享数据)。而互斥是实现同步的一种手段,临界区、互斥量和信号量都是主要的互斥实现方式。

 

4、程序运行结果

 

 

总结

通过跟着孟老师对软件工程课程的学习,我对代码模块化设计、可重用接口、线程安全等议题有了更深的理解。在后续的学习以及软件开发过程中,我会更加注意这方面的使用。

 

posted @ 2020-11-09 13:48  渣渣渣er  阅读(98)  评论(0编辑  收藏  举报