結對子幫扶內容怎么寫,結對項目作業

 2023-12-25 阅读 28 评论 0

摘要:合作者:201631062114,201631062602 代碼地址:https://gitee.com/Changyu-Guo/pairing_project 作業鏈接:http://www.cnblogs.com/guochangyu/p/9804719.html ? 一、PSP表格 PSP2.1 PSP階段 預估耗時 結對子幫扶內容怎么寫,(分鐘) 實際耗時

合作者:201631062114,201631062602

代碼地址:https://gitee.com/Changyu-Guo/pairing_project

作業鏈接:http://www.cnblogs.com/guochangyu/p/9804719.html

?

一、PSP表格

PSP2.1

PSP階段

預估耗時

結對子幫扶內容怎么寫,(分鐘)

實際耗時

(分鐘)

Planning

計劃

小學生項目式作業,100

120

· Estimate

· 估計這個任務需要多少時間

100

結對子幫扶計劃、120

Development

開發

1520

1830

建筑工程項目管理作業1答案?· Analysis

· 需求分析 (包括學習新技術)

20

15

· Design Spec

手拉手幫扶活動。· 生成設計文檔

30

35

· Design Review

· 設計復審 (和同事審核設計文檔)

結對助學?20

20

· Coding Standard

· 代碼規范 (為目前的開發制定合適的規范)

50

作業幫收費嗎、60

· Design

· 具體設計

100

150

· Coding

· 具體編碼

1000

約1300

· Code Review

· 代碼復審

200

140

· Test

· 測試(自我測試,修改代碼,提交修改)

100

110

Reporting

報告

220

250

· Test Report

· 測試報告

100

85

· Size Measurement

· 計算工作量

20

15

· Postmortem & Process Improvement Plan

· 事后總結, 并提出過程改進計劃

100

150

?

合計

1840

2200

?

二、代碼規范

? 經過討論,我們的項目主要是使用C/C++結合node.js進行開發,因此我們從網絡上查找了相關的編碼規范:

? C/C++:C/C++編碼規范

? Node.js:JavaScript 風格指南/編碼規范(Airbnb公司版)

三、代碼自審和互審

?

? ??制定了相關的代碼規范后,就按照代碼規范對自己的代碼進行審查,由于自己很早之前就對代碼規范進行過了解,因此在審查過程中并沒有發現太多的問題。

? ? 進行過代碼自審過后,接下來就是代碼互審,由于第一作業的代碼比較簡單,經雙方商議后我們決定對命令處理模塊、字符統計模塊、單詞統計模塊、行數統計模塊進行代碼互審,過程中出現的問題如下:

  • 我的代碼問題:代碼在基本的風格比如縮進,變量命名上面并沒有太大問題,主要就是代碼的耦合性太高,各個功能模塊代碼相互關聯,并且出現多個邏輯功能出現在同一函數里面的情況,不利于接下來的結對合作,需要對相應的模塊進行抽離。?
  • partner代碼問題:代碼同樣出現了耦合性過高的問題,其實就是變量及函數的命名有的不符合駝峰命名法,其他的都比較好(畢竟編譯器自帶代碼格式化);

四、設計過程

? ? 經過雙方的商討和對原始代碼的分析過后,并考慮到要使用圖形界面,決定用node.js搭建一個后端服務器,如果命令里面存在-x選項,則啟動服務器,并打開相應的頁面,由用戶發送ajax數據,后端接受后拼接成相應的字符串后,調用wc.exe并傳入命令字符串即可得到結果,如果沒有,則不用打開服務器和網頁,直接調用wc.exe得到相應結果即可。代碼的具體流程如下:

?

wc模塊的流程為:

?

五、關鍵代碼分析

首先是node處理代碼:

 1 // 判斷是否存在-x選項
 2 if (process.argv.indexOf('-x') === -1) {
 3   // 如果不存在,就拼接命令字符串并執行
 4   process.argv.shift();
 5   process.argv.shift();
 6   process.argv.forEach(val => {
 7     cmdStr += ' ';
 8     cmdStr += val;
 9   });
10   exec(cmdStr, function (err, stdout, stderr) {
11     if (err) {
12       console.log("執行錯誤,請檢查命令是否合法");
13       return;
14     }
15   });
16 } else {
17   // 如果存在-x指令,就啟動服務器,并打開網頁
18   app.listen(3000, function () {
19     console.log('app is running at port 3000.');
20   });
21   open('http://127.0.0.1:3000');
22 }

?

? ? 這段代碼是入口程序代碼,首先要做的是判斷是否有-x指令,如果沒有,就遍歷指令數組,將指令拼接成字符串,然后調用C++程序并將字符串作為參數傳進去。如果有-x指令,就啟動服務器,并用瀏覽器打開網頁。網頁的效果如下:

?

用戶通過圖形化的界面輸入相關參數,然后后臺獲取數據后拼接成字符串,調用C++程序進行處理,后臺代碼如下:

 1 app.get('/', function (req, res) {
 2   res.type('html');
 3   res.render('index.html');
 4 });
 5 
 6 app.post('/data', function (req, res) {
 7   // 拼接選項
 8   for (var i = 0; i < req.body['options[]'].length; i++) {
 9     cmdStr += ' ';
10     cmdStr += req.body['options[]'][i];
11   }
12   // 拼接輸入文件
13   cmdStr += ' ';
14   cmdStr += req.body.filepath;
15   cmdStr += ' ';
16   cmdStr += '-o';
17   cmdStr += ' ';
18   cmdStr += path.dirname(req.body.filepath);
19   cmdStr += '\\';
20   cmdStr += req.body.outfile;
21   if (req.body.isStop !== '') {
22     cmdStr += ' ';
23     cmdStr += '-e';
24     cmdStr += ' ';
25     cmdStr += req.body.stopPath;
26   }
27   exec(__dirname + cmdStr, function (err, stdout, stderr) {
28     cmdStr = '.\\wc.exe';
29     if (err) {
30       console.log('err');
31       return res.status(500).json({
32         message: '服務器錯誤'
33       });
34     }
35     return res.status(200).json({
36       message: '成功'
37     });
38   });
39 });

?

C++程序主函數代碼:

 1 int main(int argc, char *argv[]) {
 2     
 3     char commandStr[MAX_COM_LENGTH] = "";
 4     for(int i=1;i<argc;i++){        //將用戶輸入的指令拼接成一個完整的字符串傳給程序 
 5         strcat(commandStr, argv[i]);
 6         strcat(commandStr, " ");
 7     }
 8 
 9     Command command;
10     analyseCommand(commandStr, command);                    //解析用戶指令 
11     
12     SourceFile *head = new SourceFile();
13     if (command._s) getFileName(command.filePath, head);    //遞歸尋找目錄下的文件 
14     else {                                                //否則直接利用相對路徑查找文件 
15         SourceFile *p = new SourceFile();
16         p->next = head->next;
17         head->next = p;
18         strcpy(p->fileName, command.filePath);
19         strcpy(p->filePath, command.filePath);
20     }
21 
22     wordCount(head, command.stopFile);                    //統計單詞數 
23 
24     outPut(head, command);                                //結果輸出到文件 
25 
26     delete head;
27     return 0;
28 }

?

? ? main函數是邏輯處理的核心,node程序調用C++程序后,首先進入main函數,然后main函數將傳進來的參數拼接成字符串,將字符串傳入相關函數進行解析,解析后會得到一個鏈表,這個鏈表存儲了所有文件的相關信息,最后將鏈表傳入統計函數和輸出函數進行相應的處理。

六、總結

? ? 這是我人生中第一做結對項目,有很多收獲,自己一個人寫代碼的時候,有很多考慮不周全的地方,但是有了partner的提醒和幫助,就能夠設計出更加有邏輯和更加規范的代碼結構,而且在編碼的過程中,有很多問題比如某個功能不知道怎么寫,但是和partner商討過后就能很容易的解決。總體上來說,我覺得結對編程還是很大程度上提高了編碼效率。

轉載于:https://www.cnblogs.com/guochangyu/p/9804719.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/2/194928.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息