项目 | 内容 |
---|---|
课程班级博客链接 | 课程班级 |
这个作业要求链接 | 作业要求 |
我的课程学习目标 | 1、体验软件项目开发中的两人合作,练习结对编程(Pair programming) 2、掌握Github协作开发程序的操作方法 3、掌握编写代码的风格规范及设计规范 4、知道遗传算法的原理 5、强化了人机交互界面GUI的设计 |
这个作业在哪些方面帮助我实现学习目标 | 1、通过结对编程,强化了我的编程能力 2、人机交互界面的设计要求 3、此次实验平台的功能要求 |
结对方学号-姓名 | 201871020225-牟星源 |
结对方本次博客作业链接 | https://www.cnblogs.com/muxingyuan/p/14655985.html |
本项目Github的仓库链接地址 | https://github.com/1911296608/shiyan-2#shiyan-2 |
任务一:阅读《现代软件工程—构建之法》第3-4章内容,理解并掌握代码风格规范、代码设计规范、代码复审、结对编程概念;
- 代码风格规范:主要是文字上的规定
- 缩进
- 行宽
- 括号
- 断行与空白的{}行
- 命名
- 下划线
- 大小写
- 注释
- 代码设计规范:牵涉到程序设计、模块之间的关系,设计模式等方方面面。
- 函数
- goto
- 错误处理
- 参数处理
- 断言
- 如何处理C++中的类
- 类
- class vs.struct
- 公共/保护/私有成员(public、protected、private)
- 数据成员
- 虚函数
- 构造函数
- 折构函数
- new 和 delete
- 运算符
- 异常
- 类型继承
- 代码复审:看代码是否在代码规范的框架内正确得解决了问题。有自我复审、同伴复审、团队复审三类。
- 为什么要做代码复审
- 代码复审的步骤
- 代码复审的核查表
- 概要部分
- 设计规范部分
- 代码规范部分
- 具体代码部分
- 效能
- 可读性
- 可测试性
- 结对编程:通过结对编程,结对双方可以相互学习,相互分享经验,并且可以高效率的而完成本次任务,两个人合作编程,出现的错误就会少很多。
- 最早有记录的结对编程
- 为什么要结对编程
- 不间断地复审
- 如何结对编程
- 如何正确地给予反馈
任务2:两两自由结对,对结对方《实验二 软件工程个人项目》的项目成果进行评价,具体要求如下:
- 1、对结对方的博客评论链接:https://www.cnblogs.com/muxingyuan/p/14599443.html
- 2、克隆结对方项目源码到本地机器,阅读并测试运行代码,参照《现代软件工程—构建之法》4.4.3节核查表复审同伴项目代码并记录。
- 结对方的github项目仓库链接地址:https://github.com/702457250/-/tree/D{0-1}背包问题
- 代码核查表
1、概要部分 | |
---|---|
代码符合需求和规格吗 ? | 代码符合需求 |
代码设计是否考虑周全? | 是 |
代码可读性如何? | 可读性良好 |
代码容易维护吗? | 容易 |
代码的每一行都执行都检查过吗? | 检查过,但是缺乏数据支撑 |
2、设计规范部分 | |
设计是否遵从已知的设计模式或者项目中的常用模式? | 遵从 |
有没有硬编码或字符串/数字等存在? | 无 |
代码有没有依赖于某一平台? | 无 |
有没有无用代码可以清除? | 无 |
3、代码规范部分 | |
修改的部分符合代码标准和风格吗? | 符合 |
4、具体代码部分 | |
有没有对错误进行处理? | 有 |
参数有无传递错误,字符串的长度是字节长度还是字符的长度,是从0 开始计数还是以1 开始计数? | 无 |
结构中有没有用不到的元素? | 无 |
5、效能 | |
代码的效能如何?最坏的情况如何? | 没有很好的达到任务的要求 |
6、可读性 | |
代码可读性如何?有没有足够的注释? | 可读性良好,注释很详细 |
7、可测试性 | |
代码是否需要更新或创建新的单元测试? | 需要更新,部分代码需要改善 |
任务三:采用两人结对编程方式,设计开发一款D{0-1}KP 实例数据集算法实验平台
-
需求分析陈述。
(1)平台基础功能:实验二 任务3;
(2)D{0-1}KP 实例数据集需存储在数据库;
(3)平台可动态嵌入任何一个有效的D{0-1}KP 实例求解算法,并保存算法实验日志数据;
(4)人机交互界面要求为GUI界面(WEB页面、APP页面都可); -
软件设计说明。
利用遗传算法求解D{0-1}KP。遗传算法是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法,将问题的求解过程转换成类似生物进化中的染色体基因的交叉、变异等过程。在求解较为复杂的组合优化问题时,相对一些常规的优化算法,通常能够较快地获得较好的优化结果。 -
软件实现及核心功能代码展示:软件包括哪些类,这些类分别负责什么功能,他们之间的关系怎样?类内有哪些重要的方法,关键的方法是否需要画出流程图?
-
程序运行:程序运行时每个功能界面截图。
-
描述结对的过程,提供两人在讨论、细化和编程时的结对照片(非摆拍)。
-
此次项目的PSP如下:
PSP 各个阶段 | 自己预估的时间(小时) | 实际的记录(小时) |
---|---|---|
计划: 明确需求和其他因素,估计以下的各个任务需要多少时间 | 3 | 2 |
开发 (包括下面 8 项子任务) | 38 | --- |
· 需求分析 (包括学习新技术、新工具的时间) | 4 | 5 |
· 生成设计文档 (整体框架的设计,各模块的接口,用时序图,快速原型等方法) | 2 | 3 |
· 设计复审 (和同事审核设计文档,或者自己复审) | 1 | 1 |
· 代码规范 (为目前的开发制定或选择合适的规范) | 1 | 0.5 |
· 具体设计(用伪代码,流程图等方法来设计具体模块) | 3 | 3 |
· 具体编码 | 20 | --- |
· 代码复审 | 4 | --- |
· 测试(自我测试,修改代码,提交修改) | 3 | --- |
报告 | 6 | 3 |
测试报告(发现了多少bug,修复了多少) | 2 | --- |
计算工作量 (多少行代码,多少次签入,多少测试用例,其他工作量) | 1 | --- |
事后总结, 并提出改进计划 (包括写文档、博客的时间) | 3 | 3 |
总共花费的时间 (小时) | 45 | ---- |