博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【软工】第 二 次作业(结对项目)
阅读量:6079 次
发布时间:2019-06-20

本文共 2899 字,大约阅读时间需要 9 分钟。

前言

1.这个作业属于哪个课程?

2.这个作业的要求在哪里?

3.我在这个课程的目标是?

  • 了解并学习软件工程的教学内容,完成课程任务,培养工程化设计和开发软件的能力。
  • 提升在软件开发中计划、管理、测试和维护软件的能力。
  • 理解团队与个人编程之间的异同与优劣,培养团队协作能力。

4.这个作业在哪个具体方面帮助我实现目标?

了解结对编程与个人编程的异同,进一步训练对程序进行设计和测试的能力

5.项目Github地址

正文

PSP进度管理表格

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 30 20
· Estimate · 估计这个任务需要多少时间 30 20
Development 开发 1300 1150
· Analysis · 需求分析 (包括学习新技术) 120 140
· Design Spec · 生成设计文档 30 40
· Design Review · 设计复审 (和同事审核设计文档) 5 5
· Coding Standard · 代码规范 (为目前的开发制定合适的规范) 20 5
· Design · 具体设计 60 120
· Coding · 具体编码 720 480
· Code Review · 代码复审 180 60
· Test · 测试(自我测试,修改代码,提交修改) 180 300
Reporting 报告 150 60
· Test Report · 测试报告 60 30
· Size Measurement · 计算工作量 30 10
· Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 60 20
合计 1500(25h) 1230(20.5h)

接口设计方法

Information Hiding,信息隐藏。通俗一些来解释,这即是封装和不同层次的抽象,从顶级的模块内容进行概念抽象,一直到底层类中成员的访问性控制进行物理逻辑上的信息隐藏。在本次作业中最重要,最不同于以往训练内容的抽象在于软件程序的模块化,我们希望尽量保持模块之间的独立,减低模块之间的耦合度,使各个模块达到一种Loose Coupling的状态。从模块这一层次的高度来说,我们严格按照博客中规定的规范进行了接口设计,遵循了一些接口设计的原则,进行了测试,并且保持不同模块仅通过我们定义的这些模块进行信息交流。但较为遗憾的是随着系统复杂性的增高,我们在模块内部耦合性并未保持在一个较低的水平上。

计算模块——设计、实现与独特性

public int gen_chain_char(string[] words, int len, string[] result, char head, char tail, bool enable_loop)
public int gen_chain_word(string[] words, int len, string[] result, char head, char tail, bool enable_loop)

软件总体——UML关系图

1346742-20190314233843294-174304769.png

计算模块——性能展示

我们大约在性能改进上花费了4小时进行学习和代码修正。对于有环的情况我们采用DFS的方法进行遍历搜寻,对于无环的情况我们采用拓扑排序+动态规划的方法减少搜寻次数,从而提高性能。

契约设计编程(Design by Contract)思想实现

契约编程的核心即是与软件相关的不同角色需要有不同的约束。在这一点上,我们会对输入进行仔细地判断,对于不正确的内容我们会报出异常。在输出方面我们始终保持输出形式的一致性。

计算模块——单元测试

测试覆盖率截图:

1346742-20190314234052987-2009446681.png

计算模块——异常处理

本程序中所需要处理的一场主要包括:

· 文件操作异常
· 输入指令不规范异常

界面模块——样式、设计与接口

界面样式

1346742-20190314181132335-1318042719.png

界面设计

功能:

· 读入指定路径文件中的内容(单行)
· 输入自定义的内容(多行)
· 提供计算方式的选择:-w  -c
· 提供是否指定首尾字符的多项选择(当输入框中不只包含一个字符时,取第一位字符)
· 提供是否允许包含隐含环的选项
· 单击生成后即时于输出框显示结果
· 可通过图形化界面选择导出文件位置
1346742-20190314221620217-1578013369.png
该界面通过 Windows Form 框架和可视化控件实现。

界面接口

GUI对外提供创建GUI界面的接口:

public static void showGUI(){    Application.EnableVisualStyles();    Application.SetCompatibleTextRenderingDefault(false);    GUI g = new GUI();    Application.Run(g);}

GUI通过调用计算模块的get_chainByLine函数获取处理之后的单词链,并予以显示:

coreBuild core = new coreBuild();WordChain wc = core.get_chainByLine(textInput, char_h, char_t, b_r, c_wc);foreach(Word word in wc.GetWordChain()){    textOutput += word.Get_allWord();}//输出指结果框textBox5.Text = textOutput;

其他——结对过程

首先放出一张结对照片:

1346742-20190314214228706-1552659347.png

我们两人平时是以微信作为通讯方式,每隔两天会进行线下的见面、技术研讨、设计规划和代码复审。由于我们原本就相互认识,并且两人都能相互理解与体谅,所以在沟通交流方面进行得相当顺利,不管是在线上还是线下,一旦发现问题,我们总是能很快地进行讨论,并各处双方协调的解决方案。最开始的时候我们对项目进行设计和分工,两人会较为独立地完成自己的任务;但随着项目逐渐变复杂,我们会更为主动地交流,积极进行共同的代码复审。这是一次愉快且有收获的结对编程经历。

其他——反思与改进

结对编程优劣

结对编程是极限编程的形式之一,根据老师上课所讲述内容,其内涵在于将代码复查实施到极致,这使得代码质量会大幅提升。除此之外,对于程序员来说,结对编程的方式能够提升他们的信心、动力、满足感和人际关系;对于组织来说,结对编程有利于知识的传递和人员的流动。

结对编程在不同的条件下也会显现出一些劣势,如当两人水平差距较大时可能会出现难以合作的问题,当任务量较小同时质量稳定性又较高时,两人协作可能会出现时间和生产力的浪费

个人优劣

彭一夫:优势在于注重细节,对整体要求和结构把控好,合作态度好;劣势在于编程水平较差

吴昊:优势在于能对算法优化进行深入研究,合作交流态度好;劣势在于对整体构架能力稍弱

转载于:https://www.cnblogs.com/LifeIsAGame/p/10504406.html

你可能感兴趣的文章
福建省促进大数据发展:变分散式管理为统筹集中式管理
查看>>
开发环境、生产环境、测试环境的基本理解和区别
查看>>
tomcat多应用之间如何共享jar
查看>>
Flex前后台交互,service层调用后台服务的简单封装
查看>>
MySQL入门12-数据类型
查看>>
Windows Azure 保留已存在的虚拟网络外网IP(云服务)
查看>>
修改字符集
查看>>
HackTheGame 攻略 - 第四关
查看>>
js删除数组元素
查看>>
带空格文件名的处理(find xargs grep ..etc)
查看>>
华为Access、Hybrid和Trunk的区别和设置
查看>>
centos使用docker下安装mysql并配置、nginx
查看>>
关于HTML5的理解
查看>>
需要学的东西
查看>>
Internet Message Access Protocol --- IMAP协议
查看>>
Linux 获取文件夹下的所有文件
查看>>
对 Sea.js 进行配置(一) seajs.config
查看>>
第六周
查看>>
解释一下 P/NP/NP-Complete/NP-Hard 等问题
查看>>
javafx for android or ios ?
查看>>