1.在文章开头给出Github项目地址
(由于之前和罗老师说明过的特殊原因,本工程暂未完成,会在情况允许的情况下尽量补充完成)
https://github.com/BillDior/BUAA_SE_01
项目 | 内容 |
---|---|
本次作业所属课程 | 2019BUAA软件工程 |
本次作业要求 | 完成最长单词链项目 |
我在本课程的目标 | 熟悉软件工程相关规范,学会结对编程 |
本次作业的帮助 | 学习和复习了一些图论算法和最长路径算法,初步了解工程规程、接口规范等 |
2.在开始实现程序之前,在下述PSP表格记录下你估计将在程序的各个模块的开发上耗费的时间
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 10 | 10 |
· Estimate | · 估计这个任务需要多少时间 | 10 | 10 |
Development | 开发 | 680 | |
· Analysis | · 需求分析 (包括学习新技术) | 80 | 60+ |
· Design Spec | · 生成设计文档 | 30 | 45 |
· Design Review | · 设计复审 (和同事审核设计文档) | 15 | |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 15 | 5(直接采用现成的c#规范) |
· Design | · 具体设计 | 40 | 40 |
· Coding | · 具体编码 | 480 | 200+ |
· Code Review | · 代码复审 | 60 | |
· Test | · 测试(自我测试,修改代码,提交修改) | 200 | |
Reporting | 报告 | 180 | |
· Test Report | · 测试报告 | 120 | |
· Size Measurement | · 计算工作量 | 20 | |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 40 | |
合计 | 870 |
3.看教科书和其它资料中关于Information Hiding, Interface Design, Loose Coupling的章节,说明你们在结对编程中是如何利用这些方法对接口进行设计的
查资料得知,Information hiding目的是为了隐藏实现细节,方便他人使用自己的方法,其中实现之一方式就是Interface Design,也就是接口设计,接口设计尽量松耦合(Loose Coupling),而且可拓展性强。我编写核心计算部分的DLL的时候,打算利用C++的STL库完成,但是查询资料后发现,C++的STL库出现在接口中是非常不安全的,跨语言调用更是不可行,(甭提STL库了,C++的string类型出现在接口中都不安全,尽量使用纯C风格的接口,不跨模块分配释放内存,这样保证不同运行环境调用的安全性) 但是可以多封装一层,在dll内部可以使用stl。
4.计算模块接口的设计与实现过程。
计算模块
Chain.cpp:处理单词和单词链,秉着不重复造轮子的想法, 多数数据结构都使用了C++的STL库
- VertexNode结构体:实现图数据结构的顶点,方便操作
- Edge结构体:实现图数据结构的边
- Graph结构体:实现图数据结构
- addEdge函数:连接两个顶点
isConnected函数:判断第一个顶点是否连接向第二个顶点
- Words2Graph方法,从genChain方法的参数中读取vector
,通过addEdge函数来构造一个图。 - topSort函数,用来进行拓扑排序,方便进行最长路径计算和环判断
- getLongestChain函数,如果无环直接利用拓扑排序以后的结果获取最长路径,有环则采用
genChain方法,作为dll的接口,把读到的char *word[]转化成vector
类型,供Words2Graph方法使用调用计算路径的方法,得到对应的单词链。