Github地址: | |
结对伙伴作业地址: | |
我的博客地址: | https://www.cnblogs.com/gaojunlong/ |
作业地址: | https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1/homework/2882 |
1、非摆拍照片。
2、PSP表格。
PSP2.1 |
Personal Software Process Stages |
预估耗时(分钟) |
实际耗时(分钟) |
Planning |
计划 |
30 | 30 |
· Estimate |
· 估计这个任务需要多少时间 |
60 | 50 |
Development |
开发 |
300 | 400 |
· Analysis |
· 需求分析 (包括学习新技术) |
60 | 70 |
· Design Spec |
· 生成设计文档 |
30 | 40 |
· Design Review |
· 设计复审 (和同事审核设计文档) |
60 | 90 |
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
30 | 10 |
· Design |
· 具体设计 |
60 | 50 |
· Coding |
· 具体编码 |
300 | 240 |
· Code Review |
· 代码复审 |
120 | 100 |
· Test |
· 测试(自我测试,修改代码,提交修改) |
60 | 70 |
Reporting |
报告 |
120 | 100 |
· Test Report |
· 测试报告 |
60 | 60 |
· Size Measurement |
· 计算工作量 |
60 | 50 |
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
30 | 20 |
合计 |
960 | 1230 |
3、解题思路描述。
刚开始看到问题时,有点懵,不知道从哪儿开始下手,但是在仔细阅读博客作业要求以后,对作业有了大概的了解,然后就顺着了解地大概,在百度上面深入地了解了一些相关的知识,虽然面临的问题还是很大,都是一些没有接触过得知识点,只是花费的时间要更多一些。
4、代码说明。展示出项目关键代码,并解释思路与注释说明。
charactor类(统计字符数):
public class charactor
{
public static void charactor(string in_Path,string out_Path)
{
int count = 0;
int number = 0;
int[] count1 = new int[2];//用于统计字符串的字符数及行数
try
{
FileStream file = new FileStream(in_Path, FileMode.Open);
StreamReader streamreader = new StreamReader(file);
string readLine = null;
while ((readLine = streamreader.ReadLine()) != null)
{
countChar += readLine.Length;
number++;
}
count[0] = count;
count[1] = number;
streamreader.Close();
}
catch(Exception e)
{
Console.WriteLine(e.Message.ToString());
}
try
{
FileStream wFile = new FileStream(out_Path, FileMode.Create);
StreamWriter sr = new StreamWriter(wFile);
sr.WriteLine("characters: {0}", count[0]);
sr.WriteLine("lines: {0}", count[1]);
sr.Close();
}
catch (Exception a)
{
Console.WriteLine(a.Message.ToString());
}
}
}
public void Word_lines()//统计有效行数
{
int count=0;
string[] path = File.ReadAllLines(wordcount, System.Text.Encoding.Default);
count = path.Length;
string number1, number2;
number1 = "lines: ";
Console.WriteLine(number1+count);
number2= Convert.ToString(count);
number1 = number1 + number2;
StreamWriter sw = new StreamWriter(wordcount, true);
sw.WriteLine(number1);
sw.Close();
}
Main主函数:
static void Main(string[] args)
{
string wordcount = @"c:\user\desktor\wordcount.txt";
Word number1 = new Word(wordcount);
if (File.Exists(wordcount))
{
number1.Word_charactor();//在Word类中的函数,用于统计字符数
number1.Word._words();//统计单词总数
number1.Word_lines();//统计有效行数
}
Console.WriteLine();
Console.ReadKey();
}
5、给出你们制定的代码规范或链接,记录你们代码互审的情况,审查的模块名、发现的问题等。
代码规范:
(一)、代码风格规范
(1)、缩进。
通过和结对成员的讨论,在缩进中采用的是缩进4个空格,这也是在VS中比较常见的,而且整体的代码篇幅 也比较赏心悦目,可读性也很好。
(2)、行宽及括号。
行宽的话我们设定的是100字符,这也是相对来说比较好的;括号的话就是来清楚地表示逻辑的优先级,特别是在条件语句的运用上是必不可少的,也是按照个人的习惯来决定。
(3)、断行和分行
断行:在条件语句中,使用的是以下的代码格式,使代码更加地清晰明了,更加直观。
1 if(condition1)
2 {
3 DoSomething();
4 }
5 else
6 {
7 DoSomethingElse();
8 }
分行:在定义变量时,一行只放入一个语句,不把多条语句放在一行,逻辑清晰。
int a=1;
string path="A_Za_z";
char ha='hello world!';
(4)、变量命名。
在C#中,命名尽量的采用英文,尽量减少一些简单变量的出现(比如:a,b,c),如果出现的英文单词太长,则截断后面,采用前面三个或者前面四个字母来给变量命名;同时避免使用static等关键字来命名,以免和修饰词相混淆。
(5)、下划线及注释
下划线用了分隔变量名字中的作用域标注和变量的语义,如source_file。
注释是程序设计中必须存在的,而且是体现程序直观性、可读性的一个重要措施,如果在程序中没有注释或者关键的函数中注释不清楚,那么程序的可理解性就相当差,一般都只有自己才能清楚地明白其中所要表达的意思,意思想让别人去读懂程序,则会花费很大的时间和精力,特别是在结对编程中,注释不到位很可能会造成结对伙伴的误解。所以注释要做到准确,规范。
(二)、代码设计规范。
(1)、C#中 的类。
在C#程序设计中,类的使用要充分合理,不能出现太多的类,也不能不出现,同时,在不同的类中的函数,要注意区分,不能混淆函数的作用范围和类所针对的对象以及公共(public)、保护(protected)、私有成员(private).在各个类中的构造函数(Constructors)和析构函数(Destructor),以及类之间的继承,层次都要清晰明了。
(2)、错误处理。
参数处理:在VS中,所有的参数都要验证正确性,从外部传递过来的参数也一样。
断言:
Assert(p!=null);
6、记录在改进程序性能上所花费的时间,描述你改进的思路,并展示一张性能分析图(由VS 2017的性能分析工具自动生成),并展示你程序中消耗最大的函数。
效能分析:
7、结合在构建之法中学习到的相关内容与结对项目的实践经历,撰写解决项目的心路历程与收获,以及结对感受,是否1+1>2。
通过这次的结对编程,很多东西都是新学的,所以在刚开始的准备阶段花了很多的时间;同时,这次作业也是一个相互学习的过程,我在程序设计上面不是很擅长,所以结对伙伴在这上面给了很大的帮助,自己也有了很大的进步。虽然作业难度一次比一次大,但是多花点时间还是能够解决。总的来说,这次作业给我的感受是1+1>2的。