软件工程_单人练习及软件使用入门-程序员宅基地

技术标签: 软件工程  

一、个人情况介绍

1.1经历:

本人刘奇,学号D22180806.本科12级,大二学习完c语言后尝试自学java,受限于当时网课资源及流量(学校没有无线网),学习过程磕磕碰碰,也就是简单的了解了建立一个Android应用的步骤,项目经历几乎为0。

1.2认识

计算机和软件开发是我希望能熟练掌握的领域,但肯定算不上是擅长的领域,个人觉得每个学科都有自己的技能树,以我最感兴趣的嵌入式开发为例,全部的技能树包括如图1所示的内容,内容庞杂,目前的目标是能有个整体概念,需要的时候具体学习对应部分就行。

图1 嵌入式开发技能树

1.3规划

未来希望基于嵌入式开发的基本功,结合人工智能提出新的控制方法,提高电机系统运行的可靠性

技术道路:目前公司电机设计以及传统控制人员居多,也基本形成了各自的课题组,走老路难以形成自己特色的课题内容,多半也是作为一个可替代人员在某一课题组下干到退休,与其如此,不如趁博士阶段还有时间学习新东西,先建立自己在现代控制(与人工智能结合)的独特属性,打牢基础,后续等待机会即可。

职业道路:基本同上,还有就是目前的科研生态下,没有学生的情况下,靠自己做项目,光是开会、招标等事情就已经焦头烂额了,可能还是要积累口碑,逐步壮大响应队伍,反过来又要有足够的项目能给潜在的学生做。

社会道路:毕业后希望在研究所成为有一技之长的研究人员,同时又希望自己不要将全部精力放在上面,多多关注社会发展,关注新的热点技术,不要故步自封成为井底之蛙。能产学研结合,在社会上有用武之地。

1.4目标

说实话,学习这门课是因为学校博士选修课就那么几门,lol,主要是之前甚至都不了解自己需要学习的一些内容就是软件工程课里的内容。

目前比较低级的几个目标

  1. 课题组dsp以及fpga程序管理非常混乱,全靠复制和日期命名+文档说明,存在版本代码差异不清晰,不敢乱删导致占用空间大,经常找不到程序而需要重新编写等问题。通过软件工程的学习,至少能掌握软件版本管理的实用技巧。但貌似fpga的管理确实还比较麻烦。
  2. 希望通过课程学习,开发一个功能完善的应用,为以后开发小应用打基础。

每天可以花约2h用于学习新语言(c语言感觉都要被vs淘汰了),熟悉新软件。

如果项目有趣,加班反而是一种休闲,能最后实现一个自己想要的项目的成就感还是蛮大的,毕竟也算是人生第一次实现大的项目吧。

二、visual studio2022及Gitee基本功能使用

1、IDE配置,安装visual studio2022并通过修改后缀添加c文件,编写测试c程序并通过

代码:


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//能否增加从txt文本中读字符串的功能?
int N;	//字符串数组的大小
char* strings[2001];	//字符串数组
int max = 0;	//用来存储最多次数
int index = 0;	//用来存储出现次数最多的那个字符串的索引

int main() {
	scanf_s("%d", &N); //先输入要的字符串个数
	for (int i = 0; i < N; i++) {
		char* str = (char*)malloc(sizeof(char) * 15);//malloc创建动态空间,这里传递的都是地址,怎么看全部的字符串?
		scanf_s("%s", str,(int)(sizeof(str)));//scanf通过键盘输入给str赋值
		strings[i] = str;
	}
	char* Tstr;//用来暂时指向下面我们要与其它数组元素进行比较的字符串
	int temp = 0;	//用来存储*Tstr字符串出现的次数
	for (int i = 0; i < N; i++) {
		Tstr = strings[i];
		for (int j = 0; j <= i; j++) {
			//不知道为什么这里改成判断 Tstr == strings[j] 不对???
			if (strings[j] != NULL) {
				if (strcmp(Tstr, strings[j]) == 0)
					temp++;
			}
		}
		if (temp > max) {
			max = temp;
			index = i;
		}
		temp = 0;
	}
	printf("出现次数最多的字符串是:%s", strings[index]);
	return 0;
}

2、完整的程序编写

需求分析:通过对输入的字符串进行判断,找到出现次数最多的字符串。用户输入个数及字符串,分析后输出。

调试过程:首先是第一部分读取字符串:但不调试看读取字符串是否正确

第一个变量输入3 后,通过调试的自动窗口能看到,byte_file的值为3.

继续输入3个字符串

分别出入 abc efg mnl,依次点击继续后,自动窗口中显示的str地址指针指向对应字符的首地址及对应字符。

继续增大字符串的数量,目前还是需要空格来区分不同字符,适合英文段落,截取一段vs的使用手册中关于AI辅助编程的说明,

The following table describes the main ways in which AI assistants can help you develop in Visual Studio:
Write code faster
Let AI help you:
Taking inspiration from generating code (for example, how to write code to execute tasks by describing it in natural language)
Predict the next content to be encoded based on the programming mode (completion)
Code refactoring through AI driven context aware suggestions
Better understanding of code
Ask the AI assistant:
A description of the code section that can be read by humans (for example, when you try to understand someone else's code)
Answers to programming questions and code snippets
Faster analysis and debugging
Get help on analyzing and debugging code:
Optimize performance based on AI recommendations
Bugs and solutions for AI identification

一段对AI功能的说明,作为测试输入。

显示该段文字中字符 “to”出现的频率最高。

通过VS自带的代码审查工具发现调试中存在的问题:

输入的字符数量必须达到第一个变量的字符串数量,否则第一个for循环不能结束,好处是换行的enter不会触发结束,坏处是需要对要输入的数量有准确的计算。

总体而言,目前已基本满足最基础的功能,作为初代版本进行分析。

结合IDE工具对代码进行测试

代码审查工具:

       经过查询,C6064的新的函数用法scanf_s与老的scanf的区别在于:“_s”后缀的函数是为了让原版函数更安全,传入一个和参数有关的大小值,避免引用到不存在的元素,这些参数就是变量的长度(占用的字节数)

       输入的字符串可能是NULL,由于strcmp不会自己检查,所以可以在这行代码前面增加一个null的判断,增加sizeof(str)后继续警告:

目前vs对c语言的单元测试支持还不熟练,待后续学习。

1016更新:通过一个新的C++代码例子补充了单元测试的部分:

对应的Gitee的URL为:https://gitee.com/luiqi314/tri_model_1.git

主程序:

// tri_model.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>  
using namespace std;  
//string judgeTriangle(double a, double b, double c)
string canFormTriangle(double a, double b, double c) {
    if (a <= 0 || b <= 0 || c <= 0) {
        cout << "请输入正实数" << endl;
        return "请输入正实数";
    }
    if (a + b > c && a + c > b && b + c > a) {  
        if (a == b && b == c) {  
           return "等边三角形"; 
            //cout << "等边三角形" << endl;
        } else if (a == b || a == c || b == c) {  
            return "等腰三角形";  
           // cout << "等腰三角形" << endl;
        } else {  
            return "不等边三角形";  
           // cout << "不等边三角形" << endl;
        }  
    } else {  
        return "不能构成三角形";  
       // cout<< "不能构成三角形" << endl;
    }  
}  
  
int main() {
    int a, b, c;
    for (int i = 1; i <= 1; i++) {
        cout << "请输入第" << i << "组三个数:";
        cin >> a >> b >> c;
        cout << canFormTriangle(a, b, c)<<endl;
    }
    return 0;
}

测试代码:

#include "pch.h"
#include "CppUnitTest.h"
#include "../tri_model/tri_model.cpp"

using namespace Microsoft::VisualStudio::CppUnitTestFramework;

namespace UnitTest1
{
	TEST_CLASS(UnitTest1)
	{
	public:
		std::string expected1 = "不等边三角形";//写成这种形式才符合assert的列表定义
		std::string expected2 = "等边三角形";
		std::string expected3 = "等腰三角形";
		std::string expected4 = "请输入正实数";
	    std::string expected5 = "不能构成三角形";

		TEST_METHOD(TestMethod1)
		{
			// 定义三个边长  
			double a = 3, b = 4, c = 5;

			// 调用judgeTriangle函数,并将返回值存储在字符串变量中  
			string triangleType = canFormTriangle(a, b, c);

			// 使用Assert断言验证返回值是否为“一般三角形”  
			Assert::AreEqual(expected1, triangleType);
		}

		TEST_METHOD(TestMethod2)
		{
			// 定义三个边长  
			double a = 3, b = 3, c = 3;

			// 调用judgeTriangle函数,并将返回值存储在字符串变量中  
			string triangleType = canFormTriangle(a, b, c);

			// 使用Assert断言验证返回值是否为“一般三角形”  
			Assert::AreEqual(expected2, triangleType);
		}

		TEST_METHOD(TestMethod3)
		{
			// 定义三个边长  
			double a = 3, b = 3, c = 4;

			// 调用judgeTriangle函数,并将返回值存储在字符串变量中  
			string triangleType = canFormTriangle(a, b, c);

			// 使用Assert断言验证返回值是否为“一般三角形”  
			Assert::AreEqual(expected3, triangleType);
		}

		TEST_METHOD(TestMethod4)
		{
			// 定义三个边长  
			double a = 3, b = 4, c = 205;

			// 调用judgeTriangle函数,并将返回值存储在字符串变量中  
			string triangleType = canFormTriangle(a, b, c);

			// 使用Assert断言验证返回值是否为“一般三角形”  
			Assert::AreEqual(expected5, triangleType);
		}

		TEST_METHOD(TestMethod5)
		{
			// 定义三个边长  
			double a = -1, b = -1, c = -1;

			// 调用judgeTriangle函数,并将返回值存储在字符串变量中  
			string triangleType = canFormTriangle(a, b, c);

			// 使用Assert断言验证返回值是否为“一般三角形”  
			Assert::AreEqual(expected4, triangleType);
		}

	};
}

输入测试用例及结果:

三、建立代码仓库并与vs集成:

首先在gitee上新建仓库

视频教程链接:

https://www.bilibili.com/video/BV19X4y1o7Eq/?spm_id_from=333.337.search-card.all.click&vd_source=57eedbdb4239c191957e7f61e5df7084

首先建立新建代码仓库:Strings_max_lq

代码仓库URL:https://gitee.com/luiqi314/strings_max_lq.git

将本地VS中的项目直接推送到远超URL(gitee上创建仓库后的URL)

 便可以在Gitee上看到与本地项目一致的代码

当本地文件修改后,通过在VS下方的代码对比中可以看到修改的内容与Gitee上内容的变化

选择全部提交变可以先将本地的程序更新至最新状态,在选择推送就可以将Gtiee上程序也同步到与本地版本一致。

当在Gitee上修改代码时,此时vs会检查并显示传入1通过提取对照Gitee上是否有新的修改,拉取就是让本地版本与gitee最新版本一致。由此实现了VS与Gitee之间的改动双向同步操作。

可以对已经建立的仓库,自己的或他人的执行fork操作,由此得到一个完整的仓库复制。

33要保证master分支的独立性,可以新建一个分支,并在分支上进行修改,确认无误后可以提交pull request,得到主分支审查人员的审查以及测试后就可以合并到master分支。

人月神话读后感链接http://t.csdnimg.cn/AemM5

学堂在线12章学习记录:

学习日志:

  1. 内容 时长
    vs2022软件用法学习:与Gitee链接 1h
    vs2022单元测试 1h
    Gitee的基础操作:fork仓库,新建分支,修改及pull request 2h
    阅读人月神话并对感兴趣内容进行思考 2h
    学堂在线《软件工程》1、2章学习 4h

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/lq_more/article/details/133773483

智能推荐

Linux(CentOS-7.0)下安装MySQL5.6.22_mysql 5.6.22 linux 版本下载-程序员宅基地

文章浏览阅读3.2k次。一 安装环境二 安装方式选择三 安装步骤1. 解压下载的zip包2. 卸载MariaDB3. 安装MYSQL4. 启动MYSQL5. 默认root用户登录MYSQL6 登录MYSQL_mysql 5.6.22 linux 版本下载

UE4-(蓝图)第一百课 用.csv格式文件作为配置文件并获取、使用数据_ue4 读取配置文件蓝图-程序员宅基地

文章浏览阅读2.1k次,点赞2次,收藏12次。.csv文件是以逗号分割的值文件。excel支持csv文件,方便修改。.csv是纯文本,可以使用记事本打开看到内容一、创建Excel数据,二、将文件另存为.csv格式的文本命名为Map,也可以使用记事本打开.csv文件查看内容。三、重点:在UE4中创建结构体命名为MapData,与Map文件中表头一致(否则数据导入后没有对应的结构体与之对应会出现错误)注意:1.用e..._ue4 读取配置文件蓝图

华硕x450jn拆机_华硕笔记本电脑X450JB拆卸并安装固态驱动器-程序员宅基地

文章浏览阅读3.6k次。链接到本文:多年来一直希望能启动笔记本. 尽管对笔记本的需求实际上并不大,但家庭和工作单位中都装有计算机,因此无需外出工作. 我去京东住了一段时间,我得到了一个华硕X450JB,一个标准的I5CPU,一个双显卡,而且价格也不贵. 这也是一个长期的愿望. 对于习惯在家中使用固态硬盘台式机的我来说,这台机器的运行速度显然是无法接受的. 我回头发现原来的机器配备了1400硬盘,速度为5400 rpm. ..._x450j怎么拆lcd

java接口中的内部类_详解Java中的接口与内部类的使用-程序员宅基地

文章浏览阅读1k次。一、接口接口的理解 Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现; 也就是说,接口自身自提供方法的基本声明,而一、接口接口的理解Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现;也就是说,接口自身自提供方法的基本声明,而不提供方法体;接口中声明的方法只能被实现该接口的子类所具体实现。接口是Java中另一种非常重..._java内部类usb接口

ASP.NET项目创建_vs2022 asp.net core mvc-程序员宅基地

文章浏览阅读2k次。20220328磁盘扩容ASP.NET项目创建_vs2022 asp.net core mvc

appium+python自动化33-解锁九宫格(TouchAction)-程序员宅基地

文章浏览阅读79次。TouchAction1.源码可以在这个路径找到:Lib\site-packages\appium\webdriver\common\touch_action.pyclass TouchAction(object): def __init__(self, driver=None): self._driver = driver self._actions ..._tkinter九宫格解锁

随便推点

Pycharm中使用Anaconda_pycharm怎么把anaconda的包拿出来-程序员宅基地

文章浏览阅读1.9w次,点赞26次,收藏139次。Pycharm中使用Anaconda问题:安装完Pycharm和Anaconda后,想让Pycharm能调用Anaconda中包含的各种包。这样就不用重复安装各种包了。Anaconda下载安装Anaconda指的是一个开源的Python发行版本,其包含了conda、Python等180多个科学包及其依赖项。 因为包含了大量的科学包,Anaconda 的下载文件比较大(约 515..._pycharm怎么把anaconda的包拿出来

Python-Django毕业设计二手图书回收销售网站(程序+Lw)_二手回收的后台管理界面-程序员宅基地

文章浏览阅读40次。该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程项目运行环境配置:Pychram社区版+ python3.7.7 + Mysql5.7 + HBuilderX+list pip+Navicat11+Django+nodejs。项目技术:django + python+ Vue 等等组成,B/S模式 +pychram管理等等。环境需要1.运行环境:最好是python3.7.7,我们在这个版本上开发的。其他版本理论上也可以。2.pycharm环境:pycharm都可以。_二手回收的后台管理界面

Qt数据可视化_qt 数据可视化-程序员宅基地

文章浏览阅读1.5k次。属性Q3DBars属性说明graph3D->activeTheme()->setGridEnabled(checked);设置网格graph3D->setReflection(checked);设置反射graph3D->valueAxis()->setTitleVisible(checked);设置轴标题graph3D->rowAxis()->setTitleVisible(checked);设置轴标题gr_qt 数据可视化

2020网络安全国赛题-Web安全加固(Web)答案_限制目录执行权限,对目录设置权限为无-程序员宅基地

文章浏览阅读1.7k次,点赞2次,收藏13次。2020国赛题-Web安全加固(Web) _限制目录执行权限,对目录设置权限为无

计算机等级考试考试机配置批处理_高新考试 批处理-程序员宅基地

文章浏览阅读375次。@echo offclscolor 0AEcho ************注意****************Echo 此批处理修改的计算机须符合一下要去:Echo 1.计算机名称是k62Echo 2.用户名称是k62,用户全名是k62.即,此ghost镜像安装的系统set ip=set /p ip=请_高新考试 批处理

强烈推荐iOS开发取色器_oc 相机取色-程序员宅基地

文章浏览阅读2.1k次。强烈推荐iOS开发取色器小编今天特别向大家介绍一款开发时一款利器,在开发时候我们常常根据设计师提取某些元素的颜色,这就是Sip取色器,选择后,可以直接通过粘贴生成oc的代码。_oc 相机取色

推荐文章

热门文章

相关标签