第2次软工做业要求程序员
了解结对编程与我的编程的异同,进一步训练对程序进行设计和测试的能力github
结对项目一算法
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)
咱们大约在性能改进上花费了4小时进行学习和代码修正。对于有环的状况咱们采用DFS的方法进行遍历搜寻,对于无环的状况咱们采用拓扑排序+动态规划的方法减小搜寻次数,从而提升性能。微信
契约编程的核心便是与软件相关的不一样角色须要有不一样的约束。在这一点上,咱们会对输入进行仔细地判断,对于不正确的内容咱们会报出异常。在输出方面咱们始终保持输出形式的一致性。框架
测试覆盖率截图:
模块化
本程序中所须要处理的一场主要包括:
· 文件操做异常
· 输入指令不规范异常函数
功能:
· 读入指定路径文件中的内容(单行)
· 输入自定义的内容(多行)
· 提供计算方式的选择:-w -c
· 提供是否指定首尾字符的多项选择(当输入框中不仅包含一个字符时,取第一位字符)
· 提供是否容许包含隐含环的选项
· 单击生成后即时于输出框显示结果
· 可经过图形化界面选择导出文件位置
该界面经过 Windows Form 框架和可视化控件实现。oop
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;
首先放出一张结对照片:
咱们两人平时是以微信做为通信方式,每隔两天会进行线下的见面、技术研讨、设计规划和代码复审。因为咱们本来就相互认识,而且两人都能相互理解与体谅,因此在沟通交流方面进行得至关顺利,不论是在线上仍是线下,一旦发现问题,咱们老是能很快地进行讨论,并各处双方协调的解决方案。最开始的时候咱们对项目进行设计和分工,两人会较为独立地完成本身的任务;但随着项目逐渐变复杂,咱们会更为主动地交流,积极进行共同的代码复审。这是一次愉快且有收获的结对编程经历。
结对编程是极限编程的形式之一,根据老师上课所讲述内容,其内涵在于将代码复查实施到极致,这使得代码质量会大幅提高。除此以外,对于程序员来讲,结对编程的方式可以提高他们的信心、动力、知足感和人际关系;对于组织来讲,结对编程有利于知识的传递和人员的流动。
结对编程在不一样的条件下也会显现出一些劣势,如当两人水平差距较大时可能会出现难以合做的问题,当任务量较小同时质量稳定性又较高时,两人协做可能会出现时间和生产力的浪费
彭一夫:优点在于注重细节,对总体要求和结构把控好,合做态度好;劣势在于编程水平较差 吴昊:优点在于能对算法优化进行深刻研究,合做交流态度好;劣势在于对总体构架能力稍弱