40余力个人总结报告

 

 

 

 

 

实 训 报 告

 

 

 

课程名称:

软件工程

实训项目:

余力的总结报告

实训时间:

2019.3.1--2019.6.6

实训班级:

16信计

实训人员:

余力

总 份 数:

1份

指导教师:

吴世枫

 

 

     

     数学与系统科学  学院   工业中心203  实训室

2019 年 6 月 11 日

 

 

广东技术师范大学实验报告

 

学院:

数学与系统科学学院

专业:

信息与计算科学

班级:

16信计

成绩:

 

姓名:

余力

学号:

2016034643040

组别:

 

组员:

林志达、陈烨权、戚景晓、李震明、卢凯欣

实验地点:

工业中心203

实验日期:

2019.3.1—2019.6.6

指导教师签名:

吴世枫

                             

 

实训 (1) 项目名称:      简单算24点微信小游戏    


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

软件工程个人总结报告

 

摘要

 

这次的软件工程项目是一次团队合作的体现,在创作工程中,我们互相帮助,积极讨论,最终开发出了这个项目。这次合作有利于加深同学间的友谊,有利于为以后的项目开发提供帮助,为实习或工作打下基础,是一次很好的锻炼机会。加上前期做过的个人作业,以及python练习,使我在这次课程中收获良多。

 

 

关键词:软件工程;团队合作;个人总结

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

目录

目录. 7

一、回顾一个学期的学习. 9

1.1 回顾. 9

1.2 课程总结. 9

1.2.1 代码数. 9

1.2.2 时间汇总. 9

1.2.3印象深刻的作业. 10

1.2.4周平均时间. 10

1.2.5学习使用新软件. 10

1.2.6学习使用新工具. 10

1.2.7学习使用新语言新平台. 10

1.2.8学习使用新方法. 11

1.2.9其他方面的提升. 11

二、团队项目实践的经验总结与分析. 11

三、对下一届实践的建议和告知. 11

3.1 对下一届实践的建议和告知. 11

3.2 中途是否换队员. 12

四、软件工程的发展阶段. 12

4.1 萌芽阶段. 12

4.2 磨合阶段. 12

4.3 规范阶段. 12

4.4 创造阶段. 12

五、如何证明自己学会了软件工程?. 13

六、图文创意. 16

七、附录. 18

7.1 第二次作业——Python基础和软件工程. 18

7.2 个人PSP作业1. 18

7.3 个人PSP (四则运算)升级作业. 24

参考文献. 33

致谢. 34

 

 

 

 

 

 

 

 

 

 

 

一、回顾一个学期的学习

1.1 回顾

这个学期是我们第一次团队做一个项目,在此之前都是一个人大包大揽,所以这一次对我们是个不小的挑战。

而经过一个学期的学习,我在进行后台开发和代码规范这块有了不小的进步,通过团队合作,使得原本很难完成的目标变得轻松。而对于黑盒测试,代码完善这块还是没有达到预期。由于小组的分工合作不同,所以接触到测试的部分很少,没有得到锻炼的机会。

1.2 课程总结

1.2.1 代码数

分工不同,负责的部分也不一样,加上之前的个人作业,我写了大约800至1000行代码。

 

1.2.2 时间汇总

 

作业

实际投入(天)

时间(min)

第一次作业--软件工程

2

360

第二次作业—Python基础

1

60

第三次作业--团队第一次展示

5

1000

第四次作业--Python基础测试

3

600

第五次作业—效能分析

4

1000

个人PSP作业1

5

1200

个人PSP作业2(升级)

3

600

第六次作业--结对项目需求分析

5

1200

第七次作业—选题报告

2

600

第七次作业—需求规格说明书

3

800

确定题目及分工

1

300

第八次作业—系统设计任务分配

2

500

第九次作业—测试报告用户使用

3

800

个人总结

3

400

团队总结

5

1000

TOTAL

47

10420

大概的作业分布如上,具体时间基本忘记了,因为有一些过去了较长时间,后期的也不太好计算了。

1.2.3印象深刻的作业

体系结构吧,我们首先要熟悉JavaScript,要准备好每一个选项及界面要写些什么,才能写代码规范,写完之后面对大量代码,我们要准备注释,把每个函数和变量的功能都要写清楚,才能让小组其他人看明白,这是耗时最长也是最难的一项,印象深刻。

1.2.4周平均时间

花了多长记不得了,有时上别的课都在想该怎么做,甚至睡觉都在想,一天可能得有7-8个小时,尤其是到了后期,大家紧迫起来饭都不想吃,就想赶紧完成任务

1.2.5学习使用新软件

原型设计时使用的Axure,用于编写Python的Anaconda,Spider。

1.2.6学习使用新工具

微信小程序开发工具。

1.2.7学习使用新语言新平台

Javascript,wxss,Json,wxml,python。

1.2.8学习使用新方法

学会了一些后台开发的方法,学会了一些关于代码规范的方法。

1.2.9其他方面的提升

团队凝聚力提升了,对软件工程有了一定的了解。为以后的项目创作打下了基础。

二、团队项目实践的经验总结与分析

因为个人作业是刚开始上课时做的,所以难免有些生疏,遇到不会的地方也不知道想谁请教,因为每个人都有自己的思路,不容易看懂别人的,所以我就上网查阅资料,对比了下已有的版本,最后得出了成果。到了结对项目时就轻松了,毕竟有队友一起讨论问题,不会那么吃力。两个人分工合作,也开始逐渐熟悉了这门课程。

随后就是团队项目,六个人在一组,最大的问题就是沟通不便,由于我们几个也不太活跃,女生那边我们也没怎么过问,导致团队任务进展缓慢,等到大家一起讨论时,又各有个的意见,统一起来也很难,我们只能折中考虑,比如一开始大家本来要做账本,几乎就达成一致了,到最后时刻还是改成了做游戏,而在分工环节出现几个人争一个任务的情况,不过还好妥协了,最终还是把它完成了。

 

三、对下一届实践的建议和告知

3.1 对下一届实践的建议和告知

如果是刚上大一,学这门专业或类似的,如果有兴趣,我建议还是认真学,大一就开始接触上手,免得到了大三都没怎么打过代码的情况下就开始做大项目,那时就会很吃力,我们专业就是如此,认真学的人少,真正打过几千行代码的人更少,所以尽量早学,早熟练,这对你将来的实习及毕业论文都有帮助。

确实到了大学时刻不能放松,要是真想高中老师说的那样,等到了毕业就会碌碌无为,工作都找不到,只会呆在宿舍对着电脑,屁股都不动一下。老师说软件工程主要的不是代码,而是设计,这也有道理,因为这也是我们遇到的问题,毕竟学计算机的设计这方面确实会差一些,我们组的设计这块都是由女生完成的,她们确实有想法,做出的界面真的很棒,而我们几个男生看到要写什么需求分析就头疼,但这却是最基本的。没有这些报告,用户就无法得知你的项目是干嘛的,怎么用,你的项目得不到用户的亲睐就会被淘汰,所以这些前期准备工作看似繁琐,实则最为关键,所以新生一定要重视这些步骤,不要到后面什么都没有,就会失去兴趣,项目就做不下去了。

 

3.2 中途是否换队员

至于换队员问题,我想说其实大家都是一样的,都不想做!除非你是那种非常想要carry的,想要队员都能起到作用的,这种如果遇到抱大腿的队员就建议你换了吧,或者自己独自离开;但现实是大多数人都想要抱大腿,所以会出现一个组全是抱大腿心态组成的队员,这种就建议你们互相帮助,没有必要换队员,做好自己该做的,不会就组内之间讨论,可能最后成果差强人意,但至少任务完成了嘛。

再一点,你要换队员可能别的组并没有要换的,因为并非每个组都会出现需要换队员这种情况,所以出现分歧还是要多沟通,尽量解决,换队员可能会导致双方关系闹得很僵,也不太利于今后的发展;且新人来还要熟悉任务,训练默契,要花费较长时间,不利于任务进度,所以个人建议不要轻易换队员。

四、软件工程的发展阶段

4.1 萌芽阶段

每个团队刚开始都处于这个阶段,我们组在这个阶段停留了相当长的时间,我们一开始就很少交流,女生那边还好,男生这边要做什么很久都没定。幸好组长站了出来,他组织了一次正式的讨论,确定了我们组要做什么,以及最初的分工。因为此时还有一些个人作业,所以刚开始的任务还算轻松。

4.2 磨合阶段

在这个阶段就出现了很多想法,大家渐渐融入这个团队后开始有了自己的想法。本来一开始定的做记账软件,换成了24点游戏,做着做着发现微信小程序那些东西我们都不了解,要学起来很麻烦,一度想换回做记账…不过还是妥协了。做的时候也有很多意见,归根结底就是老师的要求不清楚,每个人都只记住了其中几点,沟通起来很困难。就在这种跌跌撞撞的情况下我们度过了这个阶段。

4.3 规范阶段

在这个阶段女生的力量功不可没,他们确实比我们男生积极,做了很多版本,发现了许多问题,发出来让我们一起讨论,我们也渐渐接受了这种模式,团队之间虽然交流还是很少,但每个人都认真做着自己的任务,偶尔有一些问题需要集体讨论外,每个人都可以独立完成手头的工作了,这是突飞猛进的进步。

4.4 创造阶段

我感觉我们团队还没有完全到达这个阶段,毕竟之前存在的很多问题都还没有解决,比如沟通,后期的分工合作等等,每个人都是已完成任务为标准去做项目,而不是全身心投入在里面,所以想要完全到达创造阶段还是有些困难的。我们小组在不断摸索,寻求解决任务最好的方法。我们到了目前阶段,虽然还不完美,但是以当前完成的任务来看,算是很满意了。

五、如何证明自己学会了软件工程?

我们目前已经完成了一个程序,是一个24点微信小游戏,并已成功上线,测试过的效果还不错,但还没有用户体验过,因为我们也没做什么宣传。大体上的功能都可以实现,界面也比较美观。

 

 

我们的项目是经过了需求分析,效能分析,规格说明,测试报告等一系列铺垫工作而完成的。虽说到后期有一些设计理念变化,与之前预计的需求分析有所出入,但总体的框架结构并没有太大变化,具体进度可以在易知大学的项目里查看。

 

 

 

我们的项目代码可由微信小程序开发工具进行查看,必要时我们可以对其进行修改,目前来说它大致分为三部分:计时区、练习区、排行榜,每个部分都对应了几个方面的代码。所有代码均已上传到github上,这是我们团队最重要的成果。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

六、图文创意

大标题:

 

 

背景图:

 

 

 

一些操作图标:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

七、附录

7.1 第二次作业——Python基础和软件工程

https://www.cnblogs.com/HardenMVP/p/11003836.html

我对这门课的理解就是进行团队合作,运用所学过的语言,各自分工,创造出一个项目。

我想要学会一些做软件的技巧,不要拿到一个项目不知道从何下手,还想学会如何用python编写代码,毕竟之前没有接触过这门语言。因为做软件是一个大工程,可能一个团队一个学期都弄不完,所以我是真心想学到一些技巧的。Python也很好用,希望我能掌握好它。

学完这门课之后,我希望我能对软件开发感兴趣,想知道一个好的软件是经过什么样的步骤而面世的,我能在开发过程中做些什么。目前我擅长的部分还不清楚,毕竟以前没有做过

 

7.2 个人PSP作业1

https://www.cnblogs.com/HardenMVP/p/10574484.html

 1GitHub项目地址https://github.com/HardenMVB/3.14

 2、PSP

PSP2.1

Personal Software Process Stages

预估耗时(分钟)

实际耗时(分钟)

Planning

计划

60

90

· Estimate

· 估计这个任务需要多少时间

60

90

Development

开发

1720

2070

· Analysis

· 需求分析 (包括学习新技术)

200

250

· Design Spec

· 生成设计文档

50

60

· Design Review

· 设计复审 (和同事审核设计文档)

20

20

· Coding Standard

· 代码规范 (为目前的开发制定合适的规范)

10

10

· Design

· 具体设计

30

40

· Coding

· 具体编码

1300

1600

· Code Review

· 代码复审

50

30

· Test

· 测试(自我测试,修改代码,提交修改)

60

60

Reporting

报告

100

100

· Test Report

· 测试报告

60

60

· Size Measurement

· 计算工作量

10

10

· Postmortem & Process Improvement Plan

· 事后总结, 并提出过程改进计划

30

30

合计

 

1880

2260

 

3、解题思路

拿到题目后,先想它能实现哪些功能,再想代码能分成几个部分实现,分层次处理。本题中基础功能就是整数的四则运算,非负数,接着就是加入真分数的部分。

这两个功能完成后就可以考虑一些其他功能,比如如果出现假分数,如何转化成真分数,如何约分,以及判断题目有无重复等等。

 

4、设计实现

先建立命令控制模块,可以控制输入的题目数量以及数值范围。再创建一个函数,用来生成随机数与运算符(+ , - , × , ÷ ),再设计一个函数用来将假分数转换为真分数。接着生成表达式,进而生成题目和对应的答案,以及查找有无重复。

最后将题目及答案写入文件中,结果会在文件中显示出来。

 

5、代码说明

1.命令控制模块

def get_Parameter():#命令行控制模块

    parser = argparse.ArgumentParser()

    parser.add_argument('-n', help='设定题目数量',type=int)

    parser.add_argument('-r', help='设定数值范围',type=int)

    return parser.parse_args()

 

2.建立一个类用以生成随机数与运算符

class com(object):

    def __init__(self, r):#初始化

        self.r=r

 

    def get_Arithmeticl(self):#获得随机数字与符号

        symbol=[]

        numerical=[]

        syb=0

        n=1

        m=0

        i=random.randint(1, 3)

        for x in range(i):

            sy=random.choice(['+','-','×','÷'])

            if sy=='+'or sy=='-':

                syb +=10**(i-x-1)

            else :

                syb += 2 * (10 ** (i - x - 1))

            symbol.append(sy)

        if self.r < 10:

            n = int(10 / self.r)

        if n==1:

            while m <= i:

                numerical.append(Fraction(random.randint(1, self.r), random.randint(1, self.r)))

                m+=1

        else:

            while m <= i:

                nu = Fraction(random.randint(1, self.r * n), random.randint(1, self.r * n))

                if nu<=self.r:

                    numerical.append(nu)

                    m += 1

        return symbol,syb,numerical,i

 

 

3.识别运算符和分数的转换

def get_Calculate(a,b,c):#四则运算

    if c=='+':

        results=a+b

    elif c=='-':

        results=a-b

    elif c=='×':

        results=a*b

    else:results=a/b

    return results

 

def get_Conversion(fraction):#假分数转化真分数

    if fraction.numerator%fraction.denominator==0:

        return '%d'%(fraction.numerator/fraction.denominator)

    elif fraction.numerator>fraction.denominator:

        a=int(fraction.numerator/fraction.denominator)

        b, c = fraction.numerator - a * fraction.denominator, fraction.denominator

        return '%d%s%d%s%d' % (a,'’',b,'/',c)

    else:

        b, c = fraction.numerator, fraction.denominator

        return '%d%s%d' % (b,'/',c)

 

4.生成算式列表和查重

def get_Formula(n,r):#生成题目和答案列表

    Exercises,Answers,Exercises1,Exercises2=[],[],[],[]

    x=1

    while x<n+1:

        symbol, syb, numerical,i = com(r).get_Arithmeticl()

        results = numerical[0]

        judge = True

        for y in range(i):

            calculate=get_Calculate(results,numerical[y+1],symbol[y])

            if calculate>=0:#判断算式是否合法

                answer=calculate

            else:

                judge=False

                break

        if judge:#查重

            try:

                num=Answers.index(answer)#第一个重复答案的索引

                if operator.eq(Exercises1[num],symbol) and operator.eq(Exercises2[num],numerical):

                    pass

            except ValueError as e:#可以写入

                Answers.append(answer)

                Exercises1.append(symbol)

                Exercises2.append(numerical)

                Exercises.append('%d. %s'%(x,set_Formula(symbol,numerical,syb)))

                x+=1

        else:pass

    return Exercises,Answers

 

5.写入文件

def text_save(filename, data):#filename为写入文件的路径,data为要写入数据列表.

    file = open(filename,'a')

    file.seek(0)

    file.truncate() # 清空文件

    for x in data:

        x='%s\n'%(x)

        file.write(x)

    file.close()

    print('%s文件保存成功'%filename)

 

6.main函数

def main():

    args = get_Parameter()

    if args.n:

        n = args.n

    if args.r:

        r = args.r

        Exercises, Answers = get_Formula(n, r)

        for x in range(n):

            Answers[x] = '%d. %s' % (x + 1, get_Conversion(Answers[x]))

        print('本次共生成题目%d道\n题目数值范围为0-%d' % (n, r))

        text_save('Exercises.txt', Exercises)

        text_save('Answers.txt', Answers)

 

6、测试运行

 

 

 

 

7、效能分析

 

 

 

 

8、收获

在这次实践中,我体会到了软件工程的不易。想要一个人真正做好一个项目是要花费大量时间的,想要一周完美的写好这个项目有点困难,还是有很多漏洞没有处理;做出的程序也不完整,有很多功能没有实现。

这也体现出了团队的重要性,一方面会有人监督,帮你找出错误,另一方面分工合作,花费的时间也会减少。不过我还是从这次项目中学到了很多技巧,希望下一次的项目可以完成的更好。

 

 

7.3 个人PSP (四则运算)升级作业

https://www.cnblogs.com/HardenMVP/p/10615157.html

1Github项目地址https://github.com/HardenMVB/3.28

2PSP

PSP2.1

Personal Software Process Stages

预估耗时(分钟)

实际耗时(分钟)

Planning

计划

60

90

· Estimate

· 估计这个任务需要多少时间

60

90

Development

开发

1650

2050

· Analysis

· 需求分析 (包括学习新技术)

200

300

· Design Spec

· 生成设计文档

50

60

· Design Review

· 设计复审 (和同事审核设计文档)

20

30

· Coding Standard

· 代码规范 (为目前的开发制定合适的规范)

20

30

· Design

· 具体设计

60

50

· Coding

· 具体编码

1200

1500

· Code Review

· 代码复审

60

50

· Test

· 测试(自我测试,修改代码,提交修改)

40

30

Reporting

报告

90

60

· Test Report

· 测试报告

50

10

· Size Measurement

· 计算工作量

20

20

· Postmortem & Process Improvement Plan

· 事后总结, 并提出过程改进计划

20

30

合计

 

1800

2200

 

3、解题思路

拿到题目后,先想它能实现哪些功能,再想代码能分成几个部分实现,分层次处理。本题中基础功能就是整数的四则运算,非负数,接着就是加入真分数的部分。

这两个功能完成后就可以考虑一些其他功能,比如如果出现假分数,如何转化成真分数,如何约分,以及判断题目有无重复等等。

 

4、设计实现

先建立命令控制模块,可以控制输入的题目数量以及数值范围。再创建一个函数,用来生成随机数与运算符(+ , - , × , ÷ ),再设计一个函数用来将假分数转换为真分数。接着生成表达式,进而生成题目和对应的答案,以及查找有无重复。

最后将题目及答案写入文件中,结果会在文件中显示出来。

 

5、代码说明

1、命令行控制模块

def get_Parameter():#命令行控制模块

    parser = argparse.ArgumentParser()

    parser.add_argument('-n', help='设定题目数量',type=int)

    parser.add_argument('-r', help='设定数值范围',type=int)

    return parser.parse_args()

 

 

2、生成随机数和运算符

def get_num_sym(i,r):#获取数值列表和符号列表

    nlist=[]            #数值列表

    slist=[]            #符号列表

    kh=0                #判断怎么加括号

    jian=0                 #判断是否是减数运算

    for m in range(i+1):         #根据i的值遍历输出数值列表

        nlist.append(Fraction(random.randint(1, r), random.randint(1, r)))

    for x in range(i):

        sy=random.choice(['+','-','×','÷'])

        if sy=='+'or sy=='-'

            kh +=10**(i-x-1)

        else :

            kh += 2 * (10 ** (i - x - 1))

        slist.append(sy)

        if sy=='-':

            l=1

    return nlist,slist,kh,i,jian

 

 

3、分数转换及运算

def calculate(a,b,s):#计算单元,a,b是数,s是符号

    ans=0

    if s=='+':        #加法运算

        ans=a+b

    elif s=='-':      #减法运算

        a,b=max(a,b),min(a,b)     #防止结果为负数

        ans=a-b

    elif s=='×':      #乘法运算

        ans=a*b

    else:ans=a/b      #除法运算

    return ans

 

4、生成题目及答案

def gett(n,r):         #用于生成题目和答案列表

    E,A,E1,E2=[],[],[],[]

    global j,k

    x=1

    while x<n+1:       #循环生成题目和答案列表

        i=random.randint(1, 3)       #随机获取符号数目

        num,slist,kh,i,jian=get_num_sym(i,r)

        num1=num

        legal = True

        if jian==1:         #用于防止减法运算出现负数         

            if  num[0]<num[1]:

                num1[0],num1[1]=num[1],num[0]

            if i>=2 and calculate(num[0],num[1],slist[0])<num[2]:

                num1[0],num1[1],num1[2]=num[2],num[0],num[1]

                j=1

            if i>=3 and calculate(calculate(num[0],num[1],slist[0]),num[2],slist[1])<num[3]:

                num1[0],num1[1],num1[2],num1[3]=num[3],num[0],num[1],num[2]

                k=1      

        ans=num1[0]

        for y in range(i):

            cal=calculate(ans,num[y+1],slist[y])

            if cal>=0:

                ans=cal

            else:

                legal=False

                break

        if legal:              #判断算式是否重复

            try:

                num=A.index(ans) #第一个答案的索引

 

            except ValueError as e:     #可以写入

                A.append(ans)

                E1.append(slist)

                E2.append(num1)

                E.append('%d. %s'%(x,writet(slist,num1,kh)))

                x+=1

        else:pass

    return E,A

 

5、写入文件

def savet(fname, d):#fname为写入文件的路径,d为要写入的数据列表

    file = open(fname,'a')

    file.seek(0)

    file.truncate() #清空

    for i in range(len(d)):#循环写入文件fname

        s = str(d[i]).replace('[','').replace(']','')

        s = s.replace("'",'').replace(',','') +'\n'

        file.write(s)

                

    file.close()

    print('%s文件已保存'%fname)

 

 

 

6、main函数

def main():#主函数

    args = get_Parameter()

    if args.n:

 

        n=args.n

 

        print('共生成%d道题目'%n)

 

    if args.r:

 

        r=args.r

 

        print('均为%d以内的四则运算'%r)

 

        E, A=gett(n,r)

 

        for x in range(n):#循环生成答案列表

 

            A[x]='%d. %s'%(x+1,fens(A[x]))

 

        savet('Exercises.txt',E)

 

        savet('Answers.txt',A)

 

 

 

    end = time.clock()

 

    print('运行时间: %s '%(end-start))

 

  

 

if __name__ == '__main__':

 

main()

 

 

6、测试运行

 

 

 

 

7、效能分析

 

 

 

8、改进

程序一开始出现多元式子时,只计算第一个和最后一个的结果,于是我改进了程序,使得能计算出每个数的值。

此程序中我没有使用循环将出现负数结果的式子删除,而是简单的把此式子的被减数与减数交换,使之计算出正值。

 

9、收获

在这次实践中,我体会到了软件工程的不易。想要一个人真正做好一个项目是要花费大量时间的,想要一周完美的写好这个项目有点困难,还是有很多漏洞没有处理;做出的程序也不完整,有很多功能没有实现。

这也体现出了团队的重要性,一方面会有人监督,帮你找出错误,另一方面分工合作,花费的时间也会减少。不过我还是从这次项目中学到了很多技巧,希望下一次的项目可以完成的更好。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

参考文献

邹欣.构建之法:现代软件工程(第三版)[M].北京:人民邮电出版社,2017:384-392

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

致谢

小组成员:陈烨权,林志达,卢凯欣,戚景晓,李震明

指导老师:吴世枫

posted @ 2019-06-13 18:53  余力  阅读(265)  评论(0编辑  收藏  举报