2009-09-28 25 views
0

我得到了一個與ANCIENT C++項目相關的任務,它沒有任何文檔,註釋和所有代碼/變量都是用外語編寫的。我是否有機會在1個工作日內分析此代碼並設計/ UML來創建新功能?我已經坐了3個小時了,我感到很沮喪......也許有人也有同樣的問題?有什麼建議?程序員可以快速分析未知代碼嗎?

BR,

+4

我不知道,但頻繁的SO喙肯定不會加快速度;) – phoebus 2009-09-28 10:23:58

+0

這就是「休息」 – phoebus 2009-09-28 10:25:11

+0

多大項目?如果代碼庫是Windows的大小,那麼我認爲1天是不現實的,但如果它是一個相當小的代碼庫,那麼就有機會。我不認爲拉丁文會幫助外語部分呢? – 2009-09-28 16:39:21

回答

7

我懷疑最大的問題可能是事實,這是一門外語。您可以使用各種靜態代碼分析工具來嘗試理解正在發生的事情,但如果所有內容都以不熟悉的語言呈現,那麼這仍然沒用。你的第一步(我相信)是找一個能說這種語言的人,並在你去的時候讓他們翻譯...

+2

和/或自由使用http://translate.google.com並搜索和替換。但它很容易翻譯一個字...... – 2009-09-28 10:26:35

+2

+1時出問題,而無需翻譯變量它更多的逆向工程般的體驗,而不是分析;-) – 2009-09-28 10:27:54

6

1)使用Doxygen,你可以配置doxygen從未公開的源文件中提取代碼結構。

2)使用source Insight,來源Insight是一種先進的代碼編輯器和瀏覽器內置的對C/C++,C#和Java程序

3

在此時間限制(1天),它可能會或可能不會可以根據項目的規模進行實施 - 如果確實有幾百行代碼的話。如果它是一個擁有幾萬條代碼的嚴肅項目,那麼可能不會。

你需要知道的第一件事是這個程序應該做什麼。如果你不知道它做了什麼以及它如何做,那麼分析代碼將給你答案,但這將是一個漫長而令人沮喪的任務。所以我的第一個建議是讓自己熟悉軟件的外部運作 - 它應該做什麼以及它應該怎麼做。如果你將它作爲你的工作的一部分,那麼你應該可以讓別人來引導你使用這個程序 - 即使它的UI是一種外語(我希望它不會,即使寫了代碼由外語發言者)。

一旦你知道軟件正在嘗試做什麼,那麼它應該是相當直接的(即使冗長和令人畏懼)重寫你自己的語言的所有評論,讓你理解。我建議採取一種自下而上的方法:它更容易理解程序所做的小事和小事,然後理解頂層邏輯 - 以及許多微不足道的事情,以便構成軟件的邏輯。

只有當你理解 - 在很大程度上,反正 - 你可以寫功能其功能規範和工作方案的內部運作。

1

我與一個叫Understand(15天EVAL可用許可證)這類任務的工具非常高興。然而,我同意Guss所說的,你需要的時間很大程度上取決於代碼的大小,而有一天對於一個小程序來說可能就足夠了。在Windows

非自由
3

方式: 您可以使用CppDepend。此應用程序能夠解析您的視覺項目或您的源文件。它爲您提供了很多信息,如依賴關係樹。你可以試試這個試驗(也許這對你必須做的事來說已經足夠了)。

自由方式多平臺: 您可以使用特殊配置的doxygen(從未公開的代碼中提取代碼結構)並分析結果。

4

簡短的回答,沒有 - 你可能不會有機會了解在一天中的代碼。讀取/維護代碼是最難做的事情之一,尤其是在缺乏文檔時。代碼使用外語(!)的事實使其變得更加困難。

聽起來像你是在一個非常有限的(不切實際)的時間預算,但Working With Legacy Software是一本好書,如果你正在使用遺留系統。如果您打算繼續向舊系統添加新功能,則您有責任讓您的管理層意識到該操作的範圍。或者至少嘗試一下。

+1

最後我潛入新的代碼,我花了大約3天對其工作原理有一個高度的,非常不完整的理解。 在此之前,一個我花了大約2個星期左右,我感覺真的很舒服做事英寸 我也看到了一些非常討厭的C++,沒有/無用的評論,這只是瘋狂的嘗試,並在學習月。 OP給定了一天? – Calyth 2009-09-28 13:13:18

0

cscope的&的ctags是必須的,當我做我自己的代碼,更希望其他的代碼時。