溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

現(xiàn)代軟件工程 第二章 【個(gè)人技術(shù)】 練習(xí)與討論

發(fā)布時(shí)間:2020-06-23 04:29:42 來源:網(wǎng)絡(luò) 閱讀:384 作者:鄒欣 欄目:軟件技術(shù)
1  基本作業(yè): 從Hello World開始

要求每個(gè)讀者(或者學(xué)生)開始管理自己的源代碼:

  1. 每個(gè)人都有一個(gè)VSTS的客戶端,系統(tǒng)管理員給每一個(gè)人都創(chuàng)建了TFS項(xiàng)目,每個(gè)學(xué)員都是各自項(xiàng)目的管理員。

  2. 每個(gè)同學(xué)去申請(qǐng)一個(gè)GitHub [i]的項(xiàng)目,存放源程序和其他文檔。

下面的練習(xí)可以用來鍛煉學(xué)生的編程基本功。

(1)全部用命令行工具和notepad編輯器,不用Visual Studio 等集成編輯環(huán)境,每人手工創(chuàng)建并編譯一個(gè)C的命令行程序:“Hello World”。

(2)練習(xí)數(shù)值計(jì)算。找出一個(gè)整數(shù)數(shù)組中子數(shù)組之和的最大值,例如:數(shù)組[1, -2, 3, 5, -1],返回8(因?yàn)榉弦蟮淖訑?shù)組是 [3, 5]);數(shù)組[1, -2, 3, -8, 5, 1],返回6(因?yàn)榉弦蟮淖訑?shù)組是 [5, 1]); 數(shù)組[1, -2, 3,-2, 5, 1],返回7(因?yàn)榉弦蟮淖訑?shù)組是 [3, -2, 5, 1])。

(3)字符串操作。把一個(gè)英語句子中單詞的次序顛倒后輸出。例如程序的輸入是“how are you”,則返回“you are how”。

(4)使用工具Visual Studio,創(chuàng)建一個(gè)C++或C# Windows程序,在主窗口中顯示“Hello World”,用戶可以用鼠標(biāo)拖動(dòng)“Hello World”在主窗口中移動(dòng)。

(5)很多同學(xué)自己會(huì)寫不少程序,但是往往看不懂別人寫的程序,這也需要練習(xí)。不借助電腦的幫助,回答下面的問題(如代碼清單2-8所示)。

代碼清單2-8

using System;
using System.Collections.Generic;
using System.Text;
 
namespace FindTheNumber
{
    class Program
    {
        static void Main(string[] args)
        {
int [] rg =
{2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,
20,21,22,23,24,25,26,27,28,29,30,31};
 
 
 
            for (Int64 i = 1; i < Int64.MaxValue; i++)
            {
                int hit = 0;
                int hit1 = -1;
                int hit2 = -1;
                for (int j = 0; (j < rg.Length) && (hit <=2) ; j++)
                {
                    if ((i % rg[j]) != 0)
                    {
                        hit++;
                        if (hit == 1)
                        {
                            hit1 = j;
                        }
                        else if (hit == 2)
                        {
                            hit2 = j;
                        }
                        else
                            break;
 
                    }
                }
 
                if ((hit == 2)&& (hit1+1==hit2))
                {
                    Console.WriteLine("found {0}", i);
                }
 
            }
        }
    }
}

問題1:這個(gè)程序要找的是符合什么條件的數(shù)?

問題2:這樣的數(shù)存在么?符合這一條件的最小的數(shù)是什么?

問題3:在電腦上運(yùn)行這一程序,你估計(jì)多長時(shí)間才能輸出第一個(gè)結(jié)果?時(shí)間精確到分鐘(電腦:單核CPU 4.0G Hz,內(nèi)存和硬盤等資源充足)。

問題4:在多核電腦上如何提高這一程序的運(yùn)行效率?



[i] GitHub 的資料請(qǐng)看: https://github.com/

2  軟件工程和程序設(shè)計(jì)大作業(yè)的調(diào)查

請(qǐng)同學(xué)們做一個(gè)調(diào)查,到相關(guān)的軟件學(xué)院或計(jì)算機(jī)學(xué)院采訪學(xué)長或?qū)W弟學(xué)妹,調(diào)查一下程序設(shè)計(jì)大作業(yè)的完成情況:程序花多少時(shí)間完成?程序量是多少(多少行代碼)?開發(fā)過程中使用了源代碼管理等工具么? 完全獨(dú)立完成的同學(xué)有多少個(gè)?程序解決實(shí)際問題么?在一些學(xué)校里,全班50 個(gè)同學(xué),交上來的作業(yè)只有 4 到 5 種版本。這說明了什么?

3  效能分析的討論

果凍:噫吁唏,危乎高哉!我以前一直害怕做效能分析,看來是否會(huì)用效能分析工具來提高程序質(zhì)量是一個(gè)優(yōu)秀程序員的標(biāo)志之一。我在今天之前都是盲人騎瞎馬。

小飛:改成盲人摸象更恰當(dāng)。我聽說,如果一個(gè)程序員從來沒有用過效能分析工具,那他就不是一個(gè)程序員,只是一個(gè)編程愛好者罷了。

我的WC 程序事實(shí)上是最快的。但是在今天的程序評(píng)比之前,我想更進(jìn)一步,就再優(yōu)化了一下,估計(jì)能把速度提高2%。沒想到出了一個(gè)小錯(cuò)誤,導(dǎo)致報(bào)告的結(jié)果(行數(shù)、詞數(shù)、字?jǐn)?shù))僅僅差了1。由于程序不正確,因此不能參加速度評(píng)比。我才是最需要大喊“噫吁唏”的人。

阿超:這有兩個(gè)教訓(xùn):

(1)先保證正確性,再提高效能。一個(gè)“僅僅差了1”的錯(cuò)誤可能會(huì)導(dǎo)致緩沖區(qū)溢出(Buffer Overflow[i])的嚴(yán)重漏洞。

(2)如果效能的提高效果在5%以下,用戶不會(huì)注意到程序效能的區(qū)別。所以要考慮那些微小的提高是否值得。

另外,WordFreq算法的時(shí)間復(fù)雜度是多少?能否再優(yōu)化?請(qǐng)寫實(shí)際程序加以驗(yàn)證。

荔荔:怎么才能快捷地得到有適量重復(fù)文字的文件,來幫助我們進(jìn)行測試和效能分析?

小飛:我是這樣做的,在電腦的根目錄下,運(yùn)行“dir /s > c:\temp\test.txt”命令。

阿超:好主意,大家還有沒有別的辦法?

 



[i] 參見:http://en.wikipedia.org/wiki/Buffer_overflow


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI