201971010233-潘晴 实验三 结对项目—《{0-1}KP 实例数据集算法实验平台》项目报告

项目 内容
课程班级博客链接 2019级卓越工程师班
这个作业要求链接 实验三 软件工程结对项目
我的课程学习目标 1.掌握软件项目结对开发流程
2.掌握Github发布软件项目的操作方法
这个作业在哪些方面帮助我实现学习目标 1.对于人机交互界面GUI界面有了了解和实现,同时也对于遗传算法有了深入了解,并用运此算法尝试解决实际问题。
2.理解了团队协作、分工的重要性
结对方学号-姓名 201971010230-孟姣姣
结对方本次博客作业链接 https://www.cnblogs.com/MJJBQ/p/16055538.html
本项目Github的仓库链接地址 https://github.com/MJJBQ/software

任务一

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


1. 代码风格规范


  • 代码风格的原则是:简明,易读,无二异性。

  • 缩进:4个空格

  • 行宽:需要限制,可为100字符

  • 括号:在复杂的条件表达式中,用括号表示逻辑优先级

  • 分行:多行语句需要分行

  • 命名:“匈牙利命名法”,能方便程序员看到变量的类型。

  • 下划线问题:用来分割变量名字中的作用域标注和变量的语义。

  • 大小写问题:变量名由多个单词组成时,为方便区分,可使用大小写区分。

  • 注释:解释程序

2. 代码设计规范


  • 函数:原则是,只做一件事,但是要做好。

  • goto:使函数有单一的出口,有助于程序逻辑的清晰体现。

  • 错误处理:对已发生和可能发生的错误处理。

  • 参数处理:在DeBug版本中,所有参数验证其正确性。在正式版本中,从外部传递过来的参数要验证其正确性。

  • 断言:验证正确性

3. 代码复审


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

  • 复审的形式:

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

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

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

4.结对编程


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

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

    • 驾驶员:控制键盘输入的人。

    • 领航员:起到领航、提醒的作用。

  • 结对编程的好处:

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

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

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

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

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

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

任务二

两两自由结对,对结对方《实验二 软件工程个人项目》的项目成果进行评价


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


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



  • 代码复审的核查表
    项目 内容
    概要部分 代码符合需求和规格说明么? 符合
    代码设计是否考虑周全?
    代码可读性如何? 可读性好
    代码容易维护么? 容易维护
    代码的每一行都执行并检查过了吗?
    设计规范部分 设计是否遵从已知的设计模式或项目中常用的模式?
    有没有硬编码或字符串/数字等存在?
    代码有没有依赖于某一平台,是否会影响将来的移植?
    开发者新写的代码是否用已有的Library/SDK/Framework中的功能实现?在本项目中是否存在类似的功能可以通过调用而不用全部重新实现?
    有没有无用的代码可以清除?
    代码规范部分 修改的部分符合代码标准和风格么? 符合
    具体代码部分 有没有对错误进行处理?对于调用的外部函数,是否检查了返回值或处理了异常? 无错误
    参数传递有无错误,字符串的长度是字节的长度还是字符的长度,是从0开始计数还是从1开始计数 无,字符串的长度是字符的长度,从0开始计数
    循环有没有可能出现死循环?
    有没有使用断言来保证我们认为不变的条件真的得到满足?
    有没有优化的空间?
    数据结构中有没有用不到的元素?
    效能 代码的效能如何?最坏的情况是怎么样的? 效能较好
    对于系统和网络的调用是否会超时?如何处理?
    可读性 代码可读性如何?有没有足够的注释? 可读性较好;有
    可测试性 代码是否需要更新或创建新的单元测试?

    任务三

    采用两人结对编程方式,设计开发一款{0-1}KP 实例数据集算法实验平台

    1. 需求分析

    本项目要求设计开发一款{0-1}KP 实例数据集算法实验平台,该平台具有实例数据读写、示例数据排序、使用不同算法求解0-1背包问题、以及日志记录等功能。除此之外,该平台还必须具备以下要求:
    • {0-1}KP 实例数据集需存储在数据库;
    • 平台可动态嵌入任何一个有效的{0-1}KP 实例求解算法,并保存算法实验日志数据;
    • 人机交互界面要求为GUI界面(WEB页面、APP页面都可);
    • 查阅资料,设计遗传算法求解{0-1}KP,并利用此算法测试要求;
    • 附加功能:除(1)-(4)外的任意有效平台功能实现。

    2.软件设计分析




    3.软件实现及核心功能代码展示



    • 遗传算法代码如下:

            public void solve() {
            init();
            int i;
            int k;
            // 初始化种群
            initGroup();
            // 计算初始化种群适应度,Fitness[max]
            for (k = 0; k < scale; k++) {
                fitness[k] = evaluate(oldPopulation[k]);
                // System.out.println(fitness[k]);
            }
            // 计算初始化种群中各个个体的累积概率,Pi[max]
            countRate();
      
            for (t = 0; t < MAX_GEN; t++) {
                evolution();
                // 将新种群newGroup复制到旧种群oldGroup中,准备下一代进化
                for (k = 0; k < scale; k++) {
                    for (i = 0; i < LL; i++) {
                        oldPopulation[k][i] = newPopulation[k][i];
                    }
                }
                // 计算种群适应度
                for (k = 0; k < scale; k++) {
                    fitness[k] = evaluate(oldPopulation[k]);
                }
                // 计算种群中各个个体的累积概率
                countRate();
            }
      
        }
      

    4.程序运行

    • 欢迎截面图



    • 主界面



    • 数据展示功能



    • 散点图绘制功能



    • 问题求解和日志记录功能



    • 数据库存储



    5.描述结对的过程,提供两人在讨论、细化和编程时的结对照片


    6.PSP展示


    PSP2.1 任务内容 计划共完成需要的时间(h) 实际完成需要的时间(h)
    Planning 计划 1 0.5
    - Estimate - 估计这个任务需要多少时间,并规划大致工作步骤 1 0.5
    Development 开发 30 60
    - Analysis - 需求分析(包括学习新技术) 10 11
    - Design Spec - 生产设计文档 1 0.5
    - Design Review - 设计复审(和同事审核设计文档) 1 2
    - Coding Standard 代码规范 1 1
    - Design - 具体设计 3 6
    - Coding - 具体编码 12 25
    - Code Review 代码复审 3 5
    - Test - 测试(自我测试,修改代码,提交修改) 5 8
    Reporting 报告 3 2
    - Test Report - 测试报告 2 1
    - Size Measurement - 计算工作量 1 0.5
    - Postmortem & Process Improvement Plan - 事后总结 ,并提出过程改进计划 0.5 1

    小结感受

    两人合作真的能够带来1+1>2的效果吗?通过这次结对合作,请谈谈你的感受和体会。

    通过此次结对项目的完成,我认为两人合作真的能够带来1+1>2的效果。两个人对于问题的分析和理解会更加深入,不会像一个人考虑时那么片面,结对编程能提供更好的设计质量和代码质量,两人合作能有更强的解决问题的能力。两个人在一起会相互学习,传递经验,取长补短;配合工作能够提高工作效率,结对工作能带来更多的信心。两人共同协作,可以更有效的解决问题,更好的完成项目开发。

posted @ 2022-04-05 03:00  初晴弥可喜  阅读(57)  评论(1编辑  收藏  举报