運用要件へのリンク | 勤務先の住所 |
---|---|
パートナーブログ | 李漢 |
Githubの住所 | githubの |
まず、
(1)PSP形
PSP2.1 | パーソナルソフトウェアプロセス段階 | 推定時間がかかる(分) | 実際の時間がかかる(分) |
---|---|---|---|
プランニング | 計画 | 30 | 30 |
・見積り | •このタスクが必要と推定どのくらいの時間 | 30 | 30 |
開発 | 開発 | 770 | 720 |
・分析 | ・分析(新しい技術を学ぶ含む)が必要 | 300 | 240 |
・デザインスペック | 設計ドキュメントの生成 | 30 | 20 |
・デザインレビュー | ・デザインレビュー(と彼の同僚は、設計文書を見直し) | 30 | 20 |
・コーディング標準 | ・コードの仕様(現在の開発のための適切な規範の開発) | 20 | 15 |
・ 設計 | ・具体的な設計 | 30 | 30 |
・コーディング | ・具体的なコーディング | 300 | 315 |
・コードレビュー | ・コードレビュー | 30 | 40 |
・テスト | ・テスト(セルフテスト、コードを変更し、変更を提出) | 30 | 40 |
報告 | レポート | 150 | 120 |
・ 試験報告書 | ・テストレポート | 60 | 45 |
・サイズ測定 | ・コンピューティングのワークロード | 30 | 30 |
・死後&プロセス改善計画 | ・後知恵、およびプロセス改善計画を提案します | 60 | 45 |
トータル | 950 | 900 |
(2)コードの仕様:
名前のクラスクラス機能を反映1.クラス名最初の文字は大文字、使用の名詞または名詞句:命名規則。
前記第1のワード小文字クラスのメンバ変数、変数名は_プレフィックスを付加することができます。
3.メソッド名最初の文字は大文字にする、と動詞または動詞句を使用する必要があります。
4.最初の文字を小文字のパラメータは、パラメータの記述名が。
5.インターフェースの名前が意味することが、唯一の公共および内部界面改質剤。
6. 2行表示のための長文を壊し、少なくとも1行を占め各ステートメント。
7.ネストされたステートメントは、3層以上ではありません。
詳細な仕様のコードを参照してください:コード仕様
(3)双晶プロセス:非上演ディスカッション、ペアプログラミングの写真:
ライン、ディスカッション、ペアプログラミングの部門;ラインの作業時の小さな問題を解決します。
II。
(4)問題解決のアイデアやキーコードの説明:
図の一般的な機能構成:
文字、単語、ラインモジュールの数を数えます:
public long charactersnumber = 0; //字符数
public long wordsnumber = 0; //单词数
public long linesnumber = 0; //行数
//数据统计
public void Calculate(string dataline, WordTrie wtrie)
{
if (string.IsNullOrEmpty(dataline)) return;
string word = null;
for (int i = 0, len = dataline.Length; i < len; i++)
{
char unit = dataline[i];
if (unit >= 65 && unit <= 90){
unit = (char)(unit + 32);
} //大写转小写
if ((unit >= 48 && unit <= 57) || (unit >= 97 && unit <= 122)){
word = String.Concat(word, unit);
}
else{
if (!string.IsNullOrEmpty(word)){ //判断是否为词尾后的字符
if (word[0] >= 97 && word[0] <= 122){ //首字符是否为字母
wtrie.Insert(word);
}
word = null;
}
}
}
if (!string.IsNullOrEmpty(word)) //判断行尾是否有单词
{
if (word[0] >= 97 && word[0] <= 122){ //首字符是否为字母
wtrie.Insert(word);
}
word = null;
}
this.linesnumber++; //统计行数
this.wordsnumber = wtrie.CountSum; //统计单词数
this.charactersnumber += dataline.Length; //统计字符数
}
ソート単語の頻度:
public List<ListUnit> Sort()
{
TrieNode node = _Root;
List<ListUnit> WordList = new List<ListUnit>();
WordList = WordPreOrder(node, WordList);
//按词频降序排列,若词频相等按字典序排列
WordList.Sort((a, b) =>
{
if (a.WordNum.CompareTo(b.WordNum) != 0)
return -a.WordNum.CompareTo(b.WordNum);
else
return a.Word.CompareTo(b.Word);
});
return WordList;
}
単語リストを生成します。
private List<ListUnit> WordPreOrder(TrieNode node, List<ListUnit> WordList)`
`{`
`if (node.PrefixNum == 0) { return WordList; }`
`if (node.WordNum != 0)`
`{`
`ListUnit unit = new ListUnit();`
`unit.Word = node.Word;`
`unit.WordNum = node.WordNum;`
`WordList.Add(unit);`
`}`
`foreach (char key in node.Sons.Keys)`
`{`
`WordList = WordPreOrder(node.Sons[key], WordList);`
`}`
`return WordList;`
`}
ファイルを読み、会計:
`` `CSHARP
パブリック文字列pathIn。
公共の文字列pathOut。
//入力ファイルの行と統計を読みます
公共WordCalculate入力(WordCalculate datanumber、WordTrie wtrie)
{
FileStreamをFS = NULL;
StreamReaderをSR = NULL;
文字列データライン= String.Emptyを。
試します
{
FS =新しいFileStreamを(this.pathIn、FileMode.Open)。
SR =新しいStreamReaderを(FS)。
しばらく((データライン= sr.ReadLine())!= NULL)
{
datanumber.Calculate(データ線、wtrie); //行統計
}
}
キャッチ
{
Console.WriteLineを( "文書は失敗読み!");
}
遂に
{
(もし!SR = NULL){sr.Close(); }
(もし!FS = NULL){fs.Close(); }
}
datanumberを返します。
}
`` `
結果の出力ファイル:
//将统计数据写到输出文件
public void Output(WordCalculate datanumber, WordTrie wtrie)
{
FileStream fs = null;
StreamWriter sw = null;
List<WordTrie.ListUnit> WordList = new List<WordTrie.ListUnit>();
try
{
fs = new FileStream(this.pathOut, FileMode.Create);
sw = new StreamWriter(fs);
WordList = wtrie.Sort();
sw.WriteLine(String.Concat("characters:", datanumber.charactersnumber, "\n"));
sw.WriteLine(String.Concat("words:", datanumber.wordsnumber, "\n"));
sw.WriteLine(String.Concat("lines:", datanumber.linesnumber, "\n"));
sw.WriteLine("\n词频\t单词\n");
Console.WriteLine(String.Concat("字符总数", datanumber.charactersnumber, "\n"));
Console.WriteLine(String.Concat("单词总数", datanumber.wordsnumber, "\n"));
Console.WriteLine(String.Concat("有效行数", datanumber.linesnumber, "\n"));
Console.WriteLine("\n词频\t单词\n");
for (int i = 0; (i < 10 && i < datanumber.wordsnumber); i++)
{
sw.WriteLine(String.Concat(WordList[i].WordNum, '\t', WordList[i].Word, "\n"));
Console.WriteLine(String.Concat(WordList[i].WordNum, '\t', WordList[i].Word, "\n"));
}
}
catch
{
Console.WriteLine("文档写入失败!");
}
finally
{
if (sw != null) { sw.Close(); }
if (fs != null) { fs.Close(); }
}
}
コードはもっとある、唯一の完全なコードが送信された、コードの一部を示しています。
結果:入力ファイル
出力:
(5)パフォーマンス分析と改善:
初版は巨大なリソースのメイン機能を占め、疎結合のパフォーマンスを比較した後、独立して機能することを目的と主な機能で書かれた私たちの最初のコードのすべてを備えています。
第二版は、基本的な機能は、独立後のパフォーマンス分析レポートを生成実装しています。
III。
(6)ユニットテスト詳細な味方として
(7)例外処理:
例外処理コード:原稿読み取りのために、例外処理メカニズムを書きます
(8)その他の機能:
。統計設定Mフレーズ長パラメータ
パラメータは、ワード出力-Nの数を設定する。
パラメータが読み取りIへのファイルパスを設定する。
パラメータ記憶パス生成されたファイル-O。
マルチパラメータをそのようなコマンドラインプログラムを使用するなど、混在使用した新機能を実装
(9)コードレビュー:
彼らは、プログラミングプロセス2相互牽制、および関連する情報への共通のアクセス、参照記事も、おそらく同じプログラミングペア。従って、このようなコードレビュープロセスにおける大きな問題のような構造、機能上の問題を見つけられませんでした。しかし、審査はまた、関連するコード仕様の実装として小さな問題の数が所定の位置に完全にはない、多くのコードの冗長性の状況がありました。インターワーキングコードパスの問題はうまく通信できないでしたが、タイムリーに変更されています。
IV。
(10)個人的な感情:
それは情報へのアクセスに問題になるとお互いを探索する方法を、男性よりもプログラミングの接合部の高効率化を行った。コードを書く時の人も、目の監督の二対、エラー訂正、思考を持っています。私の心にも顔困難ではありません議論を通じて、一般的すぎてパニック、Baiduは解決することができるだろう。最も本格的な、ペアプログラミングは本当に1 + 1> 2で体験
同時にペアプログラミングの過程では、C#言語は、独自の番組の質のより深い理解が大幅に改善されました。収穫の多いことで実験的な作品。