软件工程实验一郑一鸣
沈阳航空航天大学2022级软件工程实验一
1.1 个人情况
(1) 回顾你过去将近3年的学习经历
- 当初你报考的时候,是真正喜欢计算机这个专业吗?
答:是的,我刚报考的时候,就通过查阅资料明确了自己的专业方向——软件工程。经过了三年的学习,了解了一些有关计算机的知识,越发觉得自己的知识储备量有所欠缺,如果将来从事这方面的工作,还应该更加努力。
- 你现在后悔选择了这个专业吗?
答:没有后悔,因为开弓没有回头箭,选择了就要继续走下去。
- 你认为你现在最喜欢的领域是什么(可以是计算机的也可以是其它领域)?
答:最喜欢的领域是程序开发,软件测试方向。
(2) 总结你现在已经掌握的知识
- 你都具备了那些专业知识和能力?
答:数据结构、操作系统、c++、编译原理等;在学校的这两年,跟随学校的课程,我学会了C++,C,python语言,学会了自己动手编程;
- 你认为你已经为成为一个合格的计算机软件工程是做好准备了吗?在专业技术、个人能力以及其它方面你还有那些欠缺?
答:我觉得我在专业技术和个人能力方面还有欠缺。我在编程方面还不能做到灵活运用,对于软件的开发和测试了解的不够多。但是只要我一直不放弃,我相信我一定会有所长进。
(3) 畅想未来
- 对照材料中前人的经历,你还准备从事计算机这个行业吗?
答:打算,通过学姐介绍自己的经历。初步打算毕业后从事软件测试的工作。
- 你认为与其它专业的同学相比,你的优势都有哪些?
答:我最大的优势就是严谨细致,逻辑思维能力强。善于沟通协作。
- 对已经不远的将来,你的职涯规划是什么?
答:打算继续深造,学习更多计算机方面的知识,成为一名优秀的计算机人。
(4) 代码托管实训
- 用任何一种语言写一个能运行的小程序,要求输出字符串:“Hello World!”
代码如下:
https://github.com/09ZYM/zym/blob/main/09
1.2 题目一
- 最大连续子数组和(最大子段和)
问题: 给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。当所给的整数均为负数时定义子段和为0,依此定义,所求的最优值为: Max{0,a[i]+a[i+1]+…+a[j]},1<=i<=j<=n
例如,当(a[1],a[2],a[3],a[4],a[5],a[6])=(-2,11,-4,13,-5,-2)时,最大子段和为20。
1.2.1代码链接
题目一代码如下:
https://github.com/09ZYM/zym/blob/main/shuzu
#include<stdio.h> #include<stdlib.h> int main() { int x,i,j; char s[50],a[50]; while(1) { int zym=0,sum=0,max=0,h=0; scanf("%d",&x); for(i=0;i<x;i++) scanf("%d",&s[i]); for(i=0;i<x;i++) { if(s[i]<0) zym++; else break; } if(zym==x&&zym!=0) { printf("0"); system("pause"); return 0; } for(i=0;i<x;i++) { sum=s[i]; for(j=i+1;j<=x;j++) { a[h]=sum; sum=sum+s[j]; h++; a[h]=sum; } h++; } for(i=0;i<=h;i++) { if(a[i]>=max) max=a[i]; } printf("%d",max); system("pause"); } }
运行结果如下:
1.2.2工作记录
表2.1 PSP0 工作记录表
项目 |
记录结果 |
日期 |
2022.11.7 |
开始时间 |
13:00 |
结束时间 |
17:00 |
编码行数 |
46 |
错误数量 |
2 |
错误1 |
只输入一个数输出不正确 |
错误1修改时间 |
14:00 |
1.2.3测试用例
根据判定/条件覆盖测试的定义:判定条件覆盖是设计足够的测试用例,得使判断中每个条件的所有可能取值至少执行一次,同时每个判断本身所有可能结果也至少执行一次。设计三组测试用例如下:
- 用例1:ab:{-2,-4,-1,-8,-9},最大字段和为0;
- 用例2:acd:{1,2,3,4,5},最大字段和为15;
- 用例3:ace:{-1,-3,5,2,-9},最大字段和为16;
1.2.4测试过程
我选择了用vs 2017的自动测试工具对程序进行测试
测试代码如下:
https://github.com/09ZYM/zym/blob/main/test
#include "pch.h" #include "CppUnitTest.h" using namespace Microsoft::VisualStudio::CppUnitTestFramework; namespace UnitTest1 { TEST_CLASS(UnitTest1) { public: TEST_METHOD(TestMethod1) { int max, zym = 0, i, x = 5; int a[5] = { -2,-4,-1,-8,-9 }; for (i = 0; i < x; i++) { if (a[i] < 0) zym++; } if (zym == 5) max = 0; int real = 0; Assert::AreEqual(max, real); } TEST_METHOD(TestMethod2) { int max = 0, i, j, x = 5, sum, h = 0; int s[5] = { 1,2,3,4,5 }, a[50]; for (i = 0; i < x; i++) { sum = s[i]; for (j = i + 1; j <= x; j++) { a[h] = sum; sum = sum + s[j]; h++; a[h] = sum; } h++; } for (i = 0; i <= h; i++) { if (a[i] >= max) max = a[i]; } int real = 15; Assert::AreEqual(max, real); } TEST_METHOD(TestMethod3) { int max = 0, i, j, x = 5, sum, h = 0; int s[5] = { -1,-3,5,2,9 }, a[50]; for (i = 0; i < x; i++) { sum = s[i]; for (j = i + 1; j <= x; j++) { a[h] = sum; sum = sum + s[j]; h++; a[h] = sum; } h++; } for (i = 0; i <= h; i++) { if (a[i] >= max) max = a[i]; } int real = 16; Assert::AreEqual(max, real); } };
1.3 实验总结
这次作业是让我们熟悉“高质量”软件开发过程,这次是做一个程序的开发,我从中学到了很多。比如使用博客园发表随笔,如何使用GitHub系统,进行学习;针对你的程序如何去设计测试用例,使用例尽可能的覆盖到各个语句判断、分支等等。还学会了单元测试工具和参数化自动测试的方法。感觉自己但是觉得自身实力还是欠缺许多,还得继续努力。