201871030122-牛建疆 实验三 结对项目——《D{0-1}KP 实例数据集算法实验平台》项目报告

项目 内容
课程班级博客链接 班级博客链接
作业要求链接 作业要求链接
我的课程学习目标 (1)体验软件项目开发中的两人合作,练习结对编程(Pair programming)。
(2)掌握Github协作开发程序的操作方法。
这个作业在哪些方面帮助我实现学习目标 (1)对于算法设计能够再一次学习熟知
(2)对Github的使用更加熟练。
(3)采用两人合作结对编程的方式,提高了学习效率,两人合作学习能力加强。
结对方学号-姓名 201871030126-王会娟
结对方本次博客作业链接 https://www.cnblogs.com/wanghuijuan815/p/14609588.html
项目Github的仓库链接地址 项目Github的仓库

博客正文

任务1:阅读《现代软件工程—构建之法》第3-4章内容,理解并掌握代码风格规范、代码设计规范、代码复审、结对编程概念;

1.代码风格规范:

  • 代码风格的原则是:简明,易读,无二异性。
  • 缩进:4个空格
  • 行宽:需要限制,可为100字符
  • 括号:在复杂的条件表达式中,用括号表示逻辑优先级
  • 分行:多行语句需要分行
  • 命名:“匈牙利命名法”,能方便程序员看到变量的类型。
  • 下划线问题:用来分割变量名字中的作用域标注和变量的语义。
  • 大小写问题:变量名由多个单词组成时,为方便区分,可使用大小写区分。
  • 注释:解释程序

2.代码设计规范

​ 包括程序设计、模块之间的关系、设计模式等

  • 函数:原则是,只做一件事,但是要做好。
  • goto:使函数有单一的出口,有助于程序逻辑的清晰体现。
  • 错误处理:对已发生和可能发生的错误处理。
  • 参数处理:在DeBug版本中,所有参数验证其正确性。在正式版本中,从外部传递过来的参数要验证其正确性。
  • 断言:验证正确性

3.代码复审

  • 代码复审的定义:看代码是否在“代码规范”的框架内正确地解决了问题。

  • 复审的形式:

    • 自我复审:自己vs自己。

    • 同伴复审:复审中vs开发者(软件工程中最基本的复审方法)。

    • 团队复审:团队vs开发者。


4.结对编程

  • 在结对编程模式下,一对程序员肩并肩地、平等地、互补地进行开发工作。两个程序员并排坐在一台电脑前,面对同一个显示器,使用同一个键盘,同一个鼠标一起工作。他们一起分析,一起设计,一起写测试用例,一起编码,一起单元测试,一起集成测试,一起写文档等。

  • 结对编程中的两个角色:

    • 驾驶员:控制键盘输入的人。
    • 领航员:起到领航、提醒的作用。
  • 结对编程的好处:

    • 在开发层次,结对编程能提供更好的设计质量和代码质量,两人合作能有更强的解决问题的能力。

    • 对开发人员自身来说,结对工作能带来更多的信心,高质量的产出能带来更高的满足感。

    • 在心理上, 当有另一个人在你身边和你紧密配合, 做同样一件事情的时候, 你不好意思开小差, 也不好意思糊弄。

    • 在企业管理层次上,结对能更有效地交流,相互学习和传递经验,能更好地处理人员流动。因为一个人的知识已经被其他人共享。

    • 结对编程让两个人所写的代码不断地处于“复审”的过程,可以避免牛仔式的编程。同时,结对编程避免了“我的代码”还是“他的代码”的问题,使得代码的责任不属于某个人,而是属于两个人,进而属于整个团队,这样能够帮助建立集体拥有代码的意识,在一定程度上避免了个人英雄主义。

      总之,如果运用得当,结对编程能得到更高的投入产出比。


任务2:两两自由结对,对结对方《实验二 软件工程个人项目》的项目成果进行评价,具体要求如下:

(1)对项目博文作业进行阅读并进行评论,评论要点包括:博文结构、博文内容、博文结构与PSP中“任务内容”列的关系、PSP中“计划共完成需要的时间”与“实际完成需要的时间”两列数据的差异化分析与原因探究,将以上评论内容发布到博客评论区。

(2)克隆结对方项目源码到本地机器,阅读并测试运行代码,参照《现代软件工程—构建之法》4.4.3节核查表复审同伴项目代码并记录。

(3)依据复审结果尝试利用github的Fork、Clone、Push、Pull request、Merge pull request等操作对同伴个人项目仓库的源码进行合作修改。

具体实现

1、博客评论:

结对方博客:https://www.cnblogs.com/wanghuijuan815/p/14597008.html
结对方Git仓库连接:https://github.com/wang815-hui/jfm

2、代码核查

  • 概要部分:
概要部分 完成情况
代码是否符合需求和规格说明 代码完成了部分需求,代码比较规范
代码设计是否有周全的考虑 设计是周全的
代码的可读性 简单易读
代码是否容易维护 不易维护
代码的每一行是否都执行并检查过
  • 设计规范部分:
设计规范部分 完成情况
设计是否遵从已知的设计模式或项目中常用的模式
是否有硬编码或字符串/数字等存在
代码有没有依赖于某一平台,是否会影响将来的移植
开发者新写的代码能否用已有的Library/SDK/Framework中的功能实现
在本项目中是否存在类似的功能可以调用而不用全部重新实现
是否有无用的代码可以清除
  • 代码规范部分:

​ 修改的部分符合代码标准和风格

  • 具体代码部分:
    • 代码可读性:可读性较好。
    • 是否有足够的注释:注释较少。
    • 代码是否需要更新或创建新的单元测试:不需要,克隆后即可运行。
任务3:采用两人结对编程方式,设计开发一款D{0-1}KP 实例数据集算法实验平台,使之具有以下功能:

​ (1)平台基础功能:实验二 任务3;

​ (2)D{0-1}KP 实例数据集需存储在数据库;

​ (3)平台可动态嵌入任何一个有效的D{0-1}KP 实例求解算法,并保存算法实验日志数据;

​ (4)人机交互界面要求为GUI界面(WEB页面、APP页面都可);

​ (5)查阅资料,设计遗传算法求解D{0-1}KP,并利用此算法测试要求(3);

​ (6)附加功能:除(1)-(5)外的任意有效平台功能实现。

1.需求分析陈述

​ 在现实生活中,有一类问题需要设计得出最优解,我们通常使用态规划算法、回溯算法求解D{0-1}背包问题来解决这类问题。背包问题是NP Complete问题,它是一个组合优化问题,而D{0-1} KP 是经典{ 0-1}背包问题的一个拓展形式,用以对实际商业活动中折扣销售、捆绑销售等现象进行最优化求解,达到获利最大化。动态规划算法通常用于求解具有某种最优性质的问题。在这类问题中,可能会有许多可行解。每一个解都对应于一个值,我们希望找到具有最优值的解。回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。在这次作业中,我们在对于背包问题的求解有更近一步的掌握的基础上,对于D{0-1}KP 实例数据集的存储借助了数据库,有利于数据持久化、完整的管理系统统一管理,易于查询,集中管理控制冗余。对于用户方面,采用Web界面设计。

2.软件实现及核心功能代码展示:
import MySQLdb
class MysqlSearch(object):
	def __init__(self):
		self.get_conn()
	# 获取连接
	def get_conn(self):
		try:
			self.conn = MySQLdb.connect(
				host='123',
				user='root',
				passwd='',
				db='personnelmanagement',
				charset='utf8'
				)
		except MySQLdb.Error as e:
			print('Error: %s' % e)
	# 关闭连接
	def close_conn(self):
		try:
			if self.conn:
				self.conn.close()
		except MySQLdb.Error as e:
			print('Error: %s' % e)
#用户界面
def login(self):  # 登录事件
        username = self.entry01.get()
        pwd = self.entry02.get()

        if username == '123' and pwd == '123456':
            messagebox.showinfo('登录系统', '登录成功')
            root1 = Tk()
            root1.geometry('400x200+300+400')
            root1.title('实验测试')
            table = login1(master=root1)
            root1.mainloop()

3.程序运行:

4.结对过程

5.此次结对作业的PSP

PSP2.1 任务内容 计划完成时间(min) 实际完成时间(min)
Planning 计划 30 40
Estimate 估计这个任务需要的时间,并规划大致步骤 20 35
Development 开发 735
Analysis 需求分析 20 60
Design Spec 生产设计文档 15 20
Design Review 复审设计文档 10 10
Coding Standard 代码规范(为目前的开发制定合适的规范) 50 40
Design 代码设计 50 80
Coding 具体编码 500 600
PSP2.1 任务内容 计划完成时间(min) 实际完成时间(min)
Coding Review 代码复审 20 30
Test 测试(自我测试,修改代码,提交代码) 30 40
Write 写博客 120 180
Postmortem 总结 10 20

小结感受

​ 这次作业在上次作业的基础上难度提升较大,但采用了结对编程的模式,在一定的程度上缓解了压力。我们在完成本次项目的过程中,遇到了很多困难,比如需要重新学习数据库知识、Web技术,以及需要适应结对编程模式,由于我和小伙伴能力原因,未能完成全部实验要求,但在解决上述困难的过程中,也收获了很多知识,在高强度的压力之下,刺激了我们的学习能力。总体来说,结对编程给了我很多信心,体验感良好。我们打算,对于未完成的部分,我们后续将继续努力!

posted @ 2021-04-14 09:08  三十六度阳光  阅读(97)  评论(0编辑  收藏  举报