qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          輕松學——操作系統之存儲

            存儲我們要講兩點內容:

            實存管理:

            存儲我們只需要了解三種分配方法即 可:單一連續分配、固定分區分配、可變分區分配;其實我們經常講對于一些不好區分的概念,我們畫個表,把他們放在一起來進行對比,那么通過對比來理解,那 真的是太爽了;所以呢,我們也畫個表,把這幾個概念放在一起來進行區分和理解,看圖:

            這樣一對比,我們就能看的出來,只有可變分區分配的空間是可變的;然后另外兩個分配是靜態的。其實顧名思義也就差不多能理解的差不多,沒有難度的,我們再深入一點來了解:看幾個圖:

            單一連續分配:

            我們可以看得出來,把整個內存區畫為一個區。它同一時間在內存當中只能裝入一個程序,只能用于單用戶、單任務的執行操作。

            固定分區分配:

             這個跟單一連續有相似之處,就是內存分配的還是比較固定了;但是這個分配還有自己的特點,就是把內存分為幾個塊,比如是:10K、22K、32K;那么 就會有可能能運行三個程序,當三個程序占用內存在這三個區域內的時候,我們就能運行。把這個分區給定死了,所以一旦有比這些區域要大的程序要運行,那么就 完蛋了,雖然總內存夠用,但是也不能運行,因為分區分的太死了。

            可變分區:

            打個比方:有三個過程,一開始和單一連續分配是一樣的,然后當有程序要運行的時候,就給該程序分配匹配的空間,當用完之后,釋放出來之后,又能拼湊成一個空白的區域,回到最初的狀態,特別靈活。

            我們繼續對可變分區分配方式進行探討:

            最佳適應法:選 擇等于或最接近需求的內存自由區進行分配。這種方法可以減少碎片,但同時也可能帶來更多小得無法再用的碎片。但是這個還算有弊端的,這個我們應該怎么理解 呢?比如我們有一個6K的空間,然后分配一個5K的空間給一個程序運行,那么剩余的1K一般來說就沒法利用了,因為一般很少有1K的程序要運行,所以這個 1K就成了碎片了,那么循環下來的話,就有很多碎片產生了。但是相對來說,這個分配方法還算是挺好的。

            首次適應法:首次就是尋找第一個可用的,可用就是尋找大于等于作業需求的內存的自由區分配給作業。這個的好處就是縮短查找時間。

            最差適應法:選擇整個主存中最大的內存自由區。比如我有一個5K的程序要運行,然后內存中最大的自由區是64K,那么一樣把64K分配給5K的程序運行,然后剩下的59K自由區還能繼續利用起來。

            循環首次適應算法:不在每次都是從頭開始分配,而是連續向下匹配。我們畫個圖來理解:

            比如我們的內存是這么個分配,那么我們現在有個作業需要12K內存占用,我們就從5K、10K、15K連續查找合適 的,當找到15K的時候,我們就分配給12K,那么當我們剩余的3K的時候,剛好有一個程序是3K的需要分配內容來運行,要是我們按照首次適應法來進行分 配,因為首次適應法是每次都是從頭開始的,所以我們就找到5K的區域,就把5K分配了;但是要是我們按照循環首次適應的話,我們是連續分配的,這樣我們就 能剛好把剩余的3K分配給這個程序了;這就是首次和循環首次的區別;我這么講應該沒有問題了吧。

            虛存管理:

            頁式存儲存儲管理:

            通過用戶程序和內存的分塊,用戶程序分為n個頁面,頁表起記錄的作用。接下來我們看地址轉換圖:

            這個就是我們的地址轉換器,我們想看這個是怎么個工作的,那么我們來看個例子,我們分析例子來進行理解:

            我們設定頁面大小為4K,圖中的邏輯地址用十進制表示:我們來求a:

            我們的過程應該是這樣的,我們的邏輯地址是8644(十進制的),那么轉換成二進制的為:10 0001 1100 0100;我們得知頁面為4K=2的12次方,所以頁內地址就為12位,所以a的后半部分為10 0001 1100 0100的后12位,為0001 1100 0100,那么剩下的最高兩位為頁號:10,轉換成十進制為2,然后找出物理塊號為8,8轉換成二進制位1000,所以物理快號頁內偏移拼合得1000 0001 1100 0100,化為十進制得33220。

            其實只要我們懂得了這個過程,那么剩下的就是進制的轉換了,不難。

            段式存儲組織

            從用戶出發,將一個程序分成幾個塊:

            我們有頁式存儲的基礎,這個就不在胯下,只是段的大小有點大。

            我們再看看地址轉換:

            這個算法跟咱們的頁式存儲是一樣的。大家動手試試。

            存儲講起來挺有意思,我理解也許會有偏差,希望大家多多指正,不勝感激~

          posted @ 2012-04-18 09:44 順其自然EVO 閱讀(168) | 評論 (0)編輯 收藏

          UI Automation Out of Control

          When many people think of test automation they envision rudimentary scripts with hard-coded events and data that manipulate user interface objects much the same way a customer might interact with the software to accomplish a pre-defined, robot-like task. Perhaps this is the reason there is a plethora of tools available to business analysts or super-users hired as ‘black-box’ testers to help them record and playback (or list keywords to sequentially step through) some contrived set of steps they think a customer might perform. Sure…it’s cool to watch windows open and close, and the mouse cursor move across the desktop as if by magic. But, for anyone with half-a-brain the visual amazement lasts for for oh….about 1.7 seconds….after that it is mind numbingly boring! Unfortunately, this automation is usually short lived, requires tremendous overhead in terms of maintenance costs, and contributes to the exceedingly high percentage of failed or less than successful automation projects.

          I will say that in general I am not a big fan of GUI automation for a litany of reasons, but mostly because it is misused, or applied to tests that are simply more effectively and efficiently performed by a person. However, I also understand the GUI automation does provide value when used in the right context. I am not against GUI automation, but I certainly don’t advocate automating a test just because we think we can, or because we have some bizarre idealistic belief that everything should be automated.

          For example, in one situation I spoke with a tester whose manager wanted him to maintain a legacy test designed to detect the correct color of an arrow symbol after an action was performed. If the action completed correctly the arrow was green; and if it was unsuccessful the arrow appeared red. Now, besides the fact that we could have just as easily automated a test to check the HRESULT value, this test could have been executed by a user within a reasonable time, there was little probability of change in this area of the code, and there were no dependencies. However, the manager insisted this GUI test run despite this test which used image comparison as an oracle was notoriously problematic. (This shouldn’t be surprising since many image comparison oracles are notoriously problematic and throw an inordinate number of false positives.)

          The tester said the manager claimed by automating this test it would negate a tester from having to execute the test manually thus saving time. What??? This tester was spending hours per week chasing down false positives and tweaking the automation to “make it work” on the daily builds just to make his manager happy. So, although this feature was used repeatedly by hundreds of people dog-fooding the daily build, another few thousand people around the company self-hosting internal releases, and thousands of customers using beta releases this particular manager determined continued tweaking of this test would save some tester’s time!

          In another example a tester inquired how to automate a a test to determine IF the order of the slides in a power point presentation had changed between different copies of a .ppt file. Of course, the question was followed by a flurry of responses suggesting creating a base set of images of each slide in the deck, and then using an image comparison tool to identify changes. I responded a bit differently. First, there are several ways to programmatically detect file changes, and if we detect changes in the binary properties we can easily open the Power Point presentation in slide sorter view and take a few seconds (depending on the number of slides) and visually compare it against an original. Sure it is a bit slower than an automated test, but I really suspect it would be more effective and probably even more efficient in the long run. I also wondered how many times this “test” would actually need to be ran during whatever project this person was working on (it wasn’t PowerPoint) in comparison to the hours/days it would take to develop such a test, and the ensuing maintenance nightmare.

          These are just 2 examples of the misuse of automated UI testing that I think illustrate a few important points:

          • Not all automated UI tests save time!
            Tests that require constant massaging and tweaking because they constantly throw false positives take up a huge amount of a tester’s time in wasted maintenance.
          • Sometimes a human is a more efficient oracle than a computer algorithm!
            Sure, just about anything a computer does can be automated to some degree in some fashion, but there really are clearly some tests where it is more prudent and simpler to rely on a tester.
          • Don’t rely on automation to emulate your customers!
            Test automation does not effectively emulate a human user. Sure, we have test methods in some of our internal automation frameworks to slow down simulated keystrokes (the actual keys are not being pressed on the keyboard), or simulate multiple or repeated clicks on a control or the mouse, and other tricks that try to emulate various user behaviors; however, test automation is generally poor at detecting behavioral issues such as usability, ease of use, or other customer value type assessments. Rely on the feedback from internal and external customers who are dog-fooding, self-hosting, and beta-testing your product (and act on it).
          • Go under the covers!
            I think many testers rely too heavily on UI automation because they think it emulates user behavior (although most things such as populating a text box are simulated via Windows APIs), or perhaps because they don’t know how to dig into the product below the surface of the UI. Whatever the case, think about the specific purpose of the test. If it is easier to check a return value, or call an API to change a setting then go deep…and stop messing around on the surface. (It only complicates the test, wastes valuable machine cycles, reduces reuse across multiple versions, and often leads to long term maintenance costs. (For an example of this see my previous post.)
          • Constantly massaging code contributes to false negatives!
            I have seen many cases where a tester designs a a UI automated test, and then tweaks a bit here and there to get it to run. Often times this tweaking contributes to a tests ineffectiveness in exposing problems, and may even hide other problems. Also, some tweaks are geared around synchronization issues (sync’ing the automated test with the system under test) and involve artificially slowing down the automation (usually by stopping or ‘sleeping’ the automated test process for a specific period of time). Other tweaks might hard-code parameters that then make the test fail on a different resolution or non-portable across different environments.
          • STOP trying to automate every damn test!
            As I stated before…just because we can automate something doesn’t mean that we should try to automate everything! We need to make rational decisions about what tests to automate, and what is the best approach to automating that test.

          It is easy to be lured in by the siren call of UI automation. I write automated tests to free up my time to design and develop more and different tests, and so I don’t have to sit in front of the computer executing redundant tests, or constantly massage code to make it run. Automation is a great tool in the arsenal of competent professionals who understand its capabilities and know how to exploit its potential. But, it is one of many tools in our toolbox; and the best tool is the one sitting on our shoulders. Use it!


          Comments
          • 12 Aug 2009 1:36 PM
            #

            I couldn’t agree with you more.

            We had tests in a previous team of mine that tested parts of MSTIME (Microsoft Timed Interactive Multimedia Extensions) by comparing a known good screenshot to a screenshot taken using the binary being tested. I arrived a few years after the code was written, and the nightmare was not over. There were a lot of problems. Due to the sheer magnitude of environments and platforms and machines being tested, there were always a high number of false positives.

            Sometimes certain video cards on the machine would colour a pixel differently (FAIL), or a frame would be skipped (FAIL), or it would render slowly (FAIL), or ClearType was enabled on the machine (FAIL), or (FAIL) or (FAIL) or (FAIL) or (FAIL).

            It was very frustrating. At the very least though, I learned the hard way that automating everything does not solve all your problems.

          • 13 Aug 2009 1:52 AM
            #

            Thanks Wesley. These are some great examples of things that could cause problems with visual comparison in automation.

            There is some interesting work being done with visual comparison such as histograms, color and pixel tolerance maps, etc.

            This is all interesting work, but the simple fact is that sometimes it is easier, more reliable, and cheaper to validate UI visuals via usability testing, end-to-end or user scenario testing, exploratory testing, dog-fooding, self-hosting, beta feedback, etc.

            Many of us have been down that hard way path...but sometimes the school of hard knocks provides the best education.

          posted @ 2012-04-17 13:53 順其自然EVO 閱讀(278) | 評論 (0)編輯 收藏

          輕松學——操作系統

            進程

            1、進程的狀態:

            這里邊我們主要是要講的內容就是這兩個圖:我們通過這兩個圖來介紹一些相關的知識點:

            三態圖:

            我們還是來看圖進行分析:

            我們就這個圖進行分析各個關鍵部分:這些關鍵在于理解,很Easy的,或者你把這個圖畫出來也就馬上明白了。

            就緒:就是“萬事俱備只欠東風”,就差CPU的調度了,只要CPU一調度便可運行。

            運行:就是在就緒狀態的基礎上得到了CPU的調度。

            等待(阻塞):還沒具備運行條件,等待時機的狀態,我們從這個圖也能看的出來,等待狀態不能直接運行,必須要經過就緒這個狀態的,所以等待狀態除了等待CPU調度之外,還缺少某些運行所需的條件。

            五態圖:

             我們把幾個關鍵的概括一下:其實這個圖跟咱們上面那個三態圖是吻合的,只是把三態圖分的更細了點我覺得;所以分析五態圖咱們只需要把三態圖掌握好就行, 就這么easy;我們再看看幾個關鍵的:主要是三態圖的一個動態的一個表示過程,所以這些概念的東西,結合前面的三態圖理解就非常容易了:

            就緒——>運行:就是三態圖中的,條件被CPU選中了。

            運行——>就緒:運行超時或者是條件被更高優先級進程剝奪。

            運行——>等待:條件還沒具備運行條件,等待某一事件的發生。

            等待——>就緒:條件是等待的事件已發生,具備了運行條件。

            在這里邊,還非常要主要這些箭頭的指向。

            2、進程死鎖:

            死鎖是進程管理設計不當造成的;進程死鎖是一個進程在等待一個不可能發生的事;系統死鎖是一個或多個進程產生死鎖。

            其實對于這方面的知識,跟咱們生活是很有聯系的。比如我們使用過打印機都知道。所以把生活的場景投進去理解,就很簡單了。

            死鎖產生的必要條件:

            互斥條件:即一個資源每次只能被一個進程使用。

            保持和等待條件:有一個進程已獲得了一些資源,但因請求其他資源被阻塞時,對已獲得的資源保持不放。

            不剝奪條件:有些系統資源是不可剝奪的,當某個進程已獲得這種資源后,系統不能強行收回,只能由進程使用完時自己釋放。

            環路等待條件:若干個進程形成環形鏈,每個都占用對方要申請的下一個資源。

            解決死鎖的策略

            死鎖預防:我們要求用戶申請資源時一起申請所需的全部資源,這就破壞了保持和等待條件:將資源分層,得到上一層資源后,才能申請下一層資源,它破壞了環路等待條件。預防通常會降低系統的效率。

            死鎖避免:避免是指進程在每次申請資源時判斷這些操作是否安全,典型算法是”銀行家算法“。但這種算法會增加系統的開銷。

            死鎖檢測:前兩者是事前措施,而死鎖的檢測則是判斷系統是否處于死鎖狀態,如果是,則執行死鎖解除策略。

            死鎖解除:這是與死鎖檢測結合使用的,它使用的方式就是剝奪。即將資源強行分配給別的進程。

            接下來,我們來實戰一下:

            銀行家算法:

            找了這么一個例子跟大家分析分析我的理解過程:

            首先求剩下的資源數:

            R1=9-(1+2+2++1)=2

            R2=8-(2+1+1+2+1)=1

            R3=5-(1+1+3)=0

            我們從這個表中很容易的分析出:還需資源數=最大需求量-已分配資源數

            那么需要一個系統是安全的,那么這個進程就不能產生死鎖?,F在就一目了然了都:

            從我們剩下的資源數和還需要的資源數,我們剩下的R1=2、R2=1、R3=0這個只能符合P2進程的0、1、0;

            那么我們給P1運行完成之后,我們的資源要釋放,所以我們資源=現有資源+已經分配的:

            那么我們現在就有了R1、R2、R3的資源分別為:4、2、1;我們再觀察一下看哪個進程需要資源符合我們的釋放的資源的:

            那只能是P4了,因為需要的資源為:0、0、1;而我們現在有的資源為:4、2、1,完全能滿足這個進程P4的要求;我們看圖:

            那么這兩個進程就完成了,接下來我們還繼續對比著來看:

            我們剩下的資源5、4、1。這時候我們發現了P5和P1都能滿足他們所需的資源:所以P5和P1就可以隨心所欲了,那我們不如就從需要資源小的開始分配試試;

            這時候我們發現我們剩余的資源又能滿足到P3和P1進程了。所以我們的答案就不止一種了:

            我們要是先分配P1,再分配P5,再到P3.結果就是:

            雖然進程的這個順序有很多種,在都滿足不造成死鎖的情況下,是否有最優的排序呢?我覺得應該是有的,就是在不發生死鎖的情況下,我們應該是優先給予需要資源少的進程。

          posted @ 2012-04-17 13:33 順其自然EVO 閱讀(212) | 評論 (0)編輯 收藏

          ubuntu下安裝和配置bugzilla

            我們需要建一個自己的bug管理系統,我就自己動手自己安裝bugzilla了,在安裝之前我在網上google了一下,看了一個網友的安裝心得,不過基本上沒有在ubuntu/debian上安裝的。我就自己試著開始了。

          不多說了:

          sudo apt-get install mysql-server注意:需要設置mysql的root 用戶的密碼,注意要和以后的bugzilla的管理員密碼一致

          sudo apt-get install bugzilla按照需要輸入管理員帳號,密碼

          ubuntu把需要的apache,sendmail,還有那些依賴的perl模塊都一起安裝了.

          開始配置bugzilla

          配置apache2
          vi /etc/apache2/httpd.conf 添加
          ServerName localhost:80
          //網上人坑爹把單詞拼錯了
          sudo /etc/init.d/apache2 restart
          配置bugzilla
          vi /etc/bugzilla/localconfig
          修改相應的配置:
          $webservergroup = "www-data";

          #
          # How to access the SQL database:
          #
          $db_host = "localhost"; # where is the database?
          $db_port = 3306; # which port to use
          $db_name = "bugs"; # name of the MySQL database
          $db_user = "bugs"; # user to attach to the MySQL database
          //不用改數據庫  你安裝bugzallia的時候會讓你配置的 很簡單
          #
          # Some people actually use passwords with their MySQL database ...
          #
          $db_pass = "1234";

          #
          # Should checksetup.pl try to check if your MySQL setup is correct?
          # (with some combinations of MySQL/Msql-mysql/Perl/moonphase this doesn"t work)
          #
          $db_check = 1;
          $index_html = 1;

          配置數據庫:
          mysql -u root -p1234

          Create database bugs;

          GRANT SELECT, INSERT, UPDATE, DELETE, INDEX, ALTER, CREATE, LOCK TABLES,CREATE TEMPORARY TABLES, DROP, REFERENCES ON bugs.* TO bugs@localhost IDENTIFIED BY "1234";

          Flush privileges;
          quit;

          退出數據庫;

          重新生成bugzilla數據庫;
          cd /usr/share/bugzilla/lib/
          sudo perl checksetup.pl
          根據提示輸入

          注意:在ubuntu上安裝的bugzilla的主登錄窗口有點bug,需要從頁面地下的login按鈕進入就可以了。

          posted @ 2012-04-16 18:26 順其自然EVO 閱讀(711) | 評論 (0)編輯 收藏

          開發人員抵觸代碼審查的4個原因

            據調查顯示,代碼審查工作有助于提高軟件開發質量,然而許多開發者卻不愿意在他們的團隊中實施代碼審查工作,本文主要分析了開發者為什么會抵制代碼審查工作的原因以及為什么他們會有此想法,目的是為了引導開發者加入代碼審查工作。

            代碼審查究竟是什么樣的工作呢?通常情況下它是指否決質量的一種過程。大量統計數據表明代碼審查極大的提高了軟件質量以及降低了技術風險,不僅如此,它還降低了開發成本。

            一起來看下代碼審查工作所帶來的好處:

            如圖所示,代碼審查工作帶來這么多的益處,那為什么還有一些開發團隊拒絕這一做法呢?我們一起來分析下原因:

          first ,better code starts with review

          fight bad code ,and find more bugs with code review!

          good code reviews

          tackle your code and design requirements/docunments



          文化問題或許已成為一種巨大的障礙,大部分開發者會厭惡代碼審查是因為他們無法忘記那些痛苦的審查會議,更槽糕的是,他們害怕因劣質代碼而遭到管理 者的批評與指責(這個通常是管理者自身的原因,而不是壞代碼)。代碼審查工作有助于提升團隊自身能力,我們應該持積極態度,而不是為了找機會來貶低同伴。

            另一種可能性,當大家相互協作、積極互動時,管理者會誤認為大家在“聊天”。敏捷性團隊已經意識到快速創建軟件工作需要積極的互動與協作。他們認為堅持代碼審查工作,是通向成功的秘訣。

            第三種可能性誤解,開發者利用靜態分析工具來查找bug,以致代碼審查工作成為不必要性。然而事實并非如此,Capers Jones,一位軟件質量度量領域的巨人,曾發表過一篇文章“結合視察、靜態分析和測試能消除影響效率缺陷的95%”,這種三叉戟式的方法最能確保軟件質 量。

            靜態分析只是其中的一個分叉。

            靜態分析工具有著很大的局限性,包括無法辨認出一些疑似代碼,比如,靜態分析工具不具備標記功能,因為它無法確定一個函數名為getRandomNumber是否應該總返回相同的值(with a hat tip toXKCD)。

          Int getRandomNumber()
           {<
           return 4; //chosen by fair dice roll.
           //guaranteed to be random
           }

            也許代碼審查最大障礙是恐懼。開發者擔心錯過最后期限,害怕分心,害怕投入過多時間。要知道,這些都是愚蠢的想法,代碼審查的目的是在前端開發過程中最大限度的提高代碼質量以及幫助你縮短開發周期。

            最后,我認為,調用一個進程(代碼審查工作)能夠促進團隊合作,提供指導且有助于技能的發展,鼓勵開發者熟悉代碼的基礎部分,最終可達到提高整 個軟 件質量。當然,如果您想快速輸入代碼,可以考慮一些代碼審查工具,前提是,你要確保該工具是輕量級并且有趣。一旦你習慣了使用該工具便有了依賴性(許多使 用代碼審工具用戶都這么認為)“我們無法想象沒有編碼工具的日子”,我想你會發現它們的價值所在。

            無論如何,請記住,拒絕代碼審查是不可取的。


          posted @ 2012-04-16 09:35 順其自然EVO 閱讀(174) | 評論 (0)編輯 收藏

          CENTOS 下載地址

          http://mirrors.163.com/centos/6.2/isos/i386/CentOS-6.2-i386-bin-DVD1.iso

          posted @ 2012-04-13 14:53 順其自然EVO 閱讀(441) | 評論 (0)編輯 收藏

          HttpWatch使用指南---web網頁性能分析強大的工具

          一 概述:

           

          HttpWatch強大的網頁數據分析工具.集成在Internet Explorer工具欄.包括網頁摘要.Cookies管理,緩存管理.消息頭發送/接受.字符查詢,POST 數據和目錄管理功能。報告輸出 HttpWatch 是一款能夠收集并顯示頁頁深層信息的軟件。它不用代理服務器或一些復雜的網絡監控工具,就能夠在顯示網頁同時顯示網頁請求和回應的日志信息。甚至可以顯示 瀏覽器緩存和IE之間的交換信息。集成在Internet Explorer工具欄。

          二 安裝HttpWatch

          三 基本功能介紹

          啟動Httpwatch

          從IE的“查看”—“瀏覽器欄”—“HttpWatch”啟動HttpWatch。如下圖所示:

          以下是HttpWatch程序界面

          以下用登錄我的郵箱mail.163.com例子來展示Httpwatch:

          點擊“Record”后,在IE打開需要錄制的網址,mail.163.com,輸入用戶名,密碼后完成登錄操作

          1. 3.1 Overview(概要)

          表示選定某個信息顯示其概要信息

          如上圖紅框所示:

          URL: http://mimg.163.com/external/closea_d.js

          Result:200

          請求的URL是http://mimg.163.com/external/closea_d.js,返回的Htpp狀態代碼結果200,表示成功;

          Resync URL   Browser requested refresh if changed - http://mimg.163.com/external/closea_d.js

          瀏覽器請求的URL

          Started At      2008-Jan-04 09:21:09.422 (local time)

          請求開始時間(實際記錄的是本機的時間)

          Connect       Connect to IP address '218.107.55.86'

          請求的網址的IP地址

          Http Request   Unconditional request sent for http://mimg.163.com/external/closea_d.js

          Http請求,當瀏覽器向Web服務器發出請求時,它向服務器傳遞了一個數據塊,也就是請求信息

          Http Response Headers and content returned

          Http響應,當瀏覽器接受到web服務器返回的信息時
          2. 3.2 Header(報頭)

          表示從Web服務器發送和接受的報頭信息;

          http://g1a90.mail.163.com/a/p/main.htm?sid=UBDCcOJJDknBulMFzSJJipPzfROMNqHO

          如上圖紅框所示:

          Http請求頭發送信息

          Headers Sent                     value

          Request-Line                     GET /external/closea_d.js HTTP/1.1

          以上代碼中“GET”代表請求方法,“closea_d.js”表示URI,“HTTP/1.1代表協議和協議的版本。

          Accept                            */*

          指示能夠接受的返回數據的范圍, */*表示所有

          Accept-Encoding                  gzip, deflate

          Accept-Encoding表明了瀏覽器可接受的除了純文本之外的內容編碼的類型,比如gzip壓縮還是deflate壓縮內容。

          Accept-Language                  zh-cn

          表示能夠接受的返回數據的語言

          Connection                       Keep-Alive

          保持Tcp請求連接

          備注:在HTTP工作開始之前,Web瀏覽器首先要通過網絡與Web服務器建立連接,該連接是通過TCP來完成的,該協議與IP協議共同構建 Internet,即著名的TCP/IP協議族,因此Internet又被稱作是TCP/IP網絡。HTTP是比TCP更高層次的應用層協議,根據規則, 只有低層協議建立之后才能,才能進行更層協議的連接,因此,首先要建立TCP連接,一般TCP連接的端口號是80

          Cookie                   vjuids=-1b9063da8.1173d33f879.0.9aab8b85a459d; vjlast=1199406314; _ntes_nnid=a1e69963f40453af8a9ad171cc4cd8da,0|tech|; NTES_UFC=3000000100000000000000000000000000000000000000000000000000000000; Province=021; City=021; ntes_mail_firstpage=normal; NTES_SESS=68LUOUH9ewcCBFyN5OXZ_0qf._IOMCkFscaGYrooXpjtVF7r8Vx7jAzg7HGdWo00GQEn1ZmrZcX7FMAXnb052r8XOFZZYk.hN; NETEASE_SSN=mayingbao2002; NETEASE_ADV=11&23&1199409658752;

          Coremail=VDeAMrrrDFaTa%XCVwJiXXsRLSLkbLhZXXZGqPJkEXFKNt   

          Cookie沒什么說的就是客戶端記錄相關信息

          Host                     mimg.163.com

          請求連接的主機名稱’

          Referer Http://g1a114.mail.163.com/a/p/main.htm?sid=XCVwJiXXsRLSLkbLhZXXZGqPJkEXFKNt   

          包含一個URL,用戶從該URL代表的頁面出發訪問當前請求的頁面

          User-Agent         Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)                                                                                   

          客戶端標識瀏覽器類型

          Http請求頭返回信息

          Headers Received                                              Value

          Status-Line                                                     Http/1.0 200 ok

          表示Http服務端響應返回200

          Accept-Ranges                                               bytes

          Http請求范圍的度量單位

          Age                                                       117

          表示Http接受到請求操作響應后的緩存時間

          Cache-Control                                              max-age=3600

          一個用于定義緩存指令的通用頭標

          Connection                                               keep-alive

          保持Tcp請求連接

          Content-Type                                             application/x-javascript

          標明發送或者接收的實體的MIME類型

          Date                                                 Fri, 04 Jan 2008 01:12:26 GMT

          發送HTTP消息的日期

          Etag                                              "10f470-734-b32eb00"

          一種實體頭標,它向被發送的資源分派一個唯一的標識符

          Expires                                      Fri, 04 Jan 2008 02:12:26 GMT

          指定實體的有效期

          Last-Modified                                Fri, 04 Jan 2008 01:01:00 GMT

          指定被請求資源上次被修改的日期和時間

          Server                                      Apache

          一種標明Web服務器軟件及其版本號的頭標

          X-Cache                                    HIT from mimg68.nets.com   

          表示你的 http request 是由 proxy server 回的
          3. 3.3 Cookies

          顯示Cookies信息

          如上圖所示City=021,其實是我163郵箱中設置城市信息值,在Cookies中記錄為021(代表上海這個城市)

          備注:

          什么是cookie?Cookie是一種在客戶端保持HTTP狀態信息的技術,Cookie是在瀏覽器訪問WEB服務器的某個資源時,由WEB服務器在HTTP響應消息頭中附帶傳送給瀏覽器的一片數據,WEB服務器傳送給各個客戶端瀏覽器的數據是可以各不相同的。

          瀏覽器可以決定是否保存這片數據,一旦WEB瀏覽器保存了這片數據,那么它在以后每次訪問該WEB服務器時,都應在HTTP請求頭中將這片數據回傳給WEB服務器。

          顯然,Cookie最先是由WEB服務器發出的,是否發送Cookie和發送的Cookie的具體內容,完全是由WEB服務器決定的。

          Cookie在瀏覽器與WEB服務器之間傳送的過程如圖7.1所示。



          4. 3.4 Cache(緩存)

          顯示在請求完成前后的瀏覽器緩存里URL地址欄里的詳細信息

          5. 3.5 Query String(查詢字符串)

          顯示查詢字符串被用在是傳遞參數url中

          如下圖所示:

          http://reg.yodao.com/setcookie.jsp?username=mayingbao2002&domain=yodao.com&loginCookie=uaLr3t2p5wKi_ku90vYy04gK1MamttMzYGFxdsppqrz3ZhjsWZ8jzDlVjmxEIpSSx2hn__w3ZsoBSFu6gKRZyRUdIgZYzVciX&clearPersistCookie=


          如上面的紅框中顯示的mayingbao2002字符串,是存在于請求的URL傳遞的參

          6.3.6 POST Data

          顯示通過Post方式數據信息

          以下是mail.163.com登錄過程中POST Data,如下圖所示:

          https://reg.163.com/logins.jsp?type=1&url=http://fm163.163.com/coremail/fcg/ntesdoor2?lightweight%3D1%26verifycookie%3D1%26language%3D-1%26style%3D-1

          上面的紅框:application/x-www-form-urlencoded表示,post方式默認提交數據編碼

          備注:以下為Post方式提交數據編碼幾種方式:

          text/plain

          以純文本的形式傳送

          application/x-www-form-urlencoded

          默認的編碼形式,即URL編碼形式

          multipart/form-data

          MIME編碼,上傳文件的表單必須選擇該

          Mime Type指的是如text/html,text/xml等類型

          MIME>(Multipurpose Internet Email Extension),意為多用途Internet郵件擴展,它是一種多用途網際郵件擴充協議,在1992年最早應用于電子郵件系統,但后來也應用到瀏覽 器。服務器會將它們發送的多媒體數據的類型告訴瀏覽器,而通知手段就是說明該多媒體數據的MIME類型,從而讓瀏覽器知道接收到的信息哪些是MP3文件, 哪些是JPEG文件等等。當服務器把把輸出結果傳送到瀏覽器上的時候,瀏覽器必須啟動適當的應用程序來處理這個輸出文檔。在HTTP中,MIME類型被定 義在<head>、</head>部分的Content-Type中。

          數據類型

          MIME類型

          超文本標記語言文本 .htm,.html文件

          text/html(數據類別是text,種類是html,下同)

          純文本,.txt文件

          text/plain

          RTF文本,.rtf文件

          application/rtf

          GIF圖形,.gif文件

          image/gif

          JPEG圖形,.jpeg, .jpg文件

          image/jpeg

          au聲音,.au文件

          audio/basic

          MIDI音樂,mid,.midi文件

          audio/midi,audio/x-midi

          RealAudio音樂,.ra, .ram文件

          audio/x-pn-realaudio

          MPEG,.mpg,.mpeg文件

          video/mpeg

          AVI,.avi文件

          video/x-msvideo

          GZIP,.gz文件

          application/x-gzip

          TAR,.tar文件

          application/x-tar

          如上圖紅圈所表示,可以看到POST Data 中的password和username數據;

          備注:get方法和Post方法區別

          GET方法

          GET方法是默認的HTTP請求方法,我們日常用GET方法來提交表單數據,然而用GET方法提交的表單數據只經過了簡單的編碼,同時它將作為URL的一部分向Web服務器發送,因此,如果使用GET方法來提交表單數據就存在著安全隱患上。例如

          Http://127.0.0.1/login.jsp?Name=zhangshi&Age=30&Submit=%cc%E+%BD%BB

          從上面的URL請求中,很容易就可以辯認出表單提交的內容。(?之后的內容)另外由于GET方法提交的數據是作為URL請求的一部分所以提交的數據量不能太大

          POST方法

          POST方法是GET方法的一個替代方法,它主要是向Web服務器提交表單數據,尤其是大批量的數據。POST方法克服了GET方法的一些缺點。通 過POST方法提交表單數據時,數據不是作為URL請求的一部分而是作為標準數據傳送給Web服務器,這就克服了GET方法中的信息無法保密和數據量太小 的缺點。因此,出于安全的考慮以及對用戶隱私的尊重,通常表單提交時采用POST方法。

          7. >3.7 Content

          統計顯示收到的Http響應信息

          如下圖所示:可以查看

          https://reg.163.com/logins.jsp?type=1&url=http://fm163.163.com/coremail/fcg/ntesdoor2?lightweight%3D1%26verifycookie%3D1%26language%3D-1%26style%3D-1

          頁響應具體內容:

          8. >3.8 Stream

          顯示客戶端發送的數據,然后服務器端返回的數據

          客戶端發送總數據:901 bytes sent to 218.107.55.86:80

          客戶端接受到服務器端返回總數據:247 bytes received by 192.168.52.188.10720

          以下用請求一個mail.163.com中的Logo圖標為例說明:



          http://mimg.163.com/logo/163logo.gif

          左邊:客戶端向服務器端發送數據流

          1 GET /logo/163logo.gif HTTP/1.1

          以上代碼中“GET”代表請求方法,“closea_d.js”表示URI,“HTTP/1.1代表協議和協議的版本。

          2 Accept: */*

          指示能夠接受的返回數據的范圍, */*表示所有

          3 Referer: http://g1a114.mail.163.com/a/f/js3/0712240954/index_v6.htm

          包含一個URL,用戶從該URL代表的頁面出發訪問當前請求的頁面

          4 Accept-Language: zh-cn

          表示能夠接受的返回數據的語言

          5 Accept-Encoding: gzip, deflate

          Accept-Encoding>表明了瀏覽器可接受的除了純文本之外的內容編碼的類型,比如gzip壓縮還是deflate壓縮內容。

          6 User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)

          客戶端標識瀏覽器類型

          7 Host: mimg.163.com

          訪問地址主機標識地址

          8 Connection: Keep-Alive

          保持Tcp連接(前臺已有備注,這里不做說明)

          9Cookie: vjuids=-1b9063da8.1173d33f879.0.9aab8b85a459d; vjlast=1199406314; _ntes_nnid=a1e69963f40453af8a9ad171cc4cd8da,0|tech|; NTES_UFC=3000000100000000000000000000000000000000000000000000000000000000; Province=021; City=021; ntes_mail_firstpage=normal; NTES_SESS=68LUOUH9ewcCBFyN5OXZ_0qf._IOMCkFscaGYrooXpjtVF7r8Vx7jAzg7HGdWo00GQEn1ZmrZcX7FMAXnb052r8XOFZZYk.hN; NETEASE_SSN=mayingbao2002; NETEASE_ADV=11&23&1199409658752; Coremail=VDeAMrrrDFaTa%XCVwJiXXsRLSLkbLhZXXZGqPJkEXFKNt; wmsvr_domain=g1a114.mail.163.com

          Cookies>沒什么說的,前面已列舉了

          右邊:服務器端向客戶端返回數據流

          1 HTTP/1.0 304 Not Modified

          服務器告訴客戶,原來緩沖的文檔還可以繼續使用。

          2 Date: Mon, 31 Dec 2007 21:42:27 GMT

          發送HTTP消息的日期

          3 Content-Type: image/gif

          服務器返回請求類型是image/gif

          4 Expires: Wed, 30 Jan 2008 21:42:27 GMT

          指定實體的有效期

          5 Last-Modified: Wed, 19 Apr 2006 03:46:16 GMT

          指定被請求資源上次被修改的日期和時間

          6 Age: 5607

          表示Http接受到請求操作響應后的緩存時間

          7 X-Cache: HIT from mimg68.nets.com

          表示你的 http request 是由 proxy server 回的

          8 Connection: keep-alive

          保持Tcp請求連接狀態

          9. >3.9 HttpWatch>請求信息框

          菜單區如上圖紅框所示:

          Started: >表示開始記錄請求一個URL時間

          Time: >表示記錄請求耗費的時間

          Sent: >表示客戶端向服務器端發送請求字節大小

          Reveived:>表示客戶端收到服務端發送請求字節大小

          Method: >表示請求URL方式

          Result: >表示服務器返回到客戶端結果

          以下是Httpwatch中http狀態碼列表

          200

          OK/Success status code

          302

          Moved temporarily status code

          304

          Not modified status code

          401

          Access denied status code

          404

          Page or file not found

          Aborted

          Internet Explorer aborted the HTTP request before a response was received

          (Cache)

          Content read from cache without sending an HTTP request to the server

          ERROR_*

          An error occurred such as ERROR_INTERNET_NAME_NOT_RESOLVED

          2xx

          Successful HTTP status code

          3xx

          Redirection HTTP status code

          4xx

          Client error HTTP status code

          5xx

          Server error HTTP status code

          詳細Http狀態參數

          態代碼 狀態信息 含義
          100 Continue 初始的請求已經接受,客戶應當繼續發送請求的其余部分。(HTTP 1.1新)
          101 Switching Protocols 服務器將遵從客戶的請求轉換到另外一種協議(HTTP 1.1新)
          200 OK 一切正常,對GET和POST請求的應答文檔跟在后面。
          201 Created 服務器已經創建了文檔,Location頭給出了它的URL。
          202 Accepted 已經接受請求,但處理尚未完成。
          203 Non-Authoritative Information 文檔已經正常地返回,但一些應答頭可能不正確,因為使用的是文檔的拷貝(HTTP 1.1新)。
          204 No Content 沒有新文檔,瀏覽器應該繼續顯示原來的文檔。如果用戶定期地刷新頁面,而Servlet可以確定用戶文檔足夠新,這個狀態代碼是很有用的。
          205 Reset Content 沒有新的內容,但瀏覽器應該重置它所顯示的內容。用來強制瀏覽器清除表單輸入內容(HTTP 1.1新)。
          206 Partial Content 客戶發送了一個帶有Range頭的GET請求,服務器完成了它(HTTP 1.1新)。
          300 Multiple Choices 客戶請求的文檔可以在多個位置找到,這些位置已經在返回的文檔內列出。如果服務器要提出優先選擇,則應該在Location應答頭指明。
          301 Moved Permanently 客戶請求的文檔在其他地方,新的URL在Location頭中給出,瀏覽器應該自動地訪問新的URL。
          302 Found 類似于301,但新的URL應該被視為臨時性的替代,而不是永久性的。注意,在HTTP1.0中對應的狀態信息是 “Moved Temporatily”。 出現該狀態代碼時,瀏覽器能夠自動訪問新的URL,因此它是一個很有用的狀態代碼。 注意這個狀態代碼有時候可以和301替換使用。例如,如果瀏覽器錯誤地請求http://host/~user(缺少了后面的斜杠),有的服務器返回 301,有的則返回302。 嚴格地說,我們只能假定只有當原來的請求是GET時瀏覽器才會自動重定向。請參見307。
          303 See Other 類似于301/302,不同之處在于,如果原來的請求是POST,Location頭指定的重定向目標文檔應該通過GET提?。℉TTP 1.1新)。
          304 Not Modified 客戶端有緩沖的文檔并發出了一個條件性的請求(一般是提供If-Modified-Since頭表示客戶只想比指定日期更新的文檔)。服務器告訴客戶,原來緩沖的文檔還可以繼續使用。
          305 Use Proxy 客戶請求的文檔應該通過Location頭所指明的代理服務器提?。℉TTP 1.1新)。
          307 Temporary Redirect 和302(Found)相同。許多瀏覽器會錯誤地響應302應答進行重定向,即使原來的請求是POST,即使它實際上只 能在POST請求的應答是303時才能重定向。由于這個原因,HTTP 1.1新增了307,以便更加清除地區分幾個狀態代碼:當出現303應答時,瀏覽器可以跟隨重定向的GET和POST請求;如果是307應答,則瀏覽器只 能跟隨對GET請求的重定向。(HTTP 1.1新)
          400 Bad Request 請求出現語法錯誤。
          401 Unauthorized 客戶試圖未經授權訪問受密碼保護的頁面。應答中會包含一個WWW-Authenticate頭,瀏覽器據此顯示用戶名字/密碼對話框,然后在填寫合適的Authorization頭后再次發出請求。
          403 Forbidden 資源不可用。服務器理解客戶的請求,但拒絕處理它。通常由于服務器上文件或目錄的權限設置導致。
          404 Not Found 無法找到指定位置的資源。這也是一個常用的應答。
          405 Method Not Allowed 請求方法(GET、POST、HEAD、DELETE、PUT、TRACE等)對指定的資源不適用。(HTTP 1.1新)
          406 Not Acceptable 指定的資源已經找到,但它的MIME類型和客戶在Accpet頭中所指定的不兼容(HTTP 1.1新)。
          407 Proxy Authentication Required 類似于401,表示客戶必須先經過代理服務器的授權。(HTTP 1.1新)
          408 Request Timeout 在服務器許可的等待時間內,客戶一直沒有發出任何請求??蛻艨梢栽谝院笾貜屯徽埱?。(HTTP 1.1新)
          409 Conflict 通常和PUT請求有關。由于請求和資源的當前狀態相沖突,因此請求不能成功。(HTTP 1.1新)
          410 Gone 所請求的文檔已經不再可用,而且服務器不知道應該重定向到哪一個地址。它和404的不同在于,返回407表示文檔永久地離開了指定的位置,而404表示由于未知的原因文檔不可用。(HTTP 1.1新)
          411 Length Required 服務器不能處理請求,除非客戶發送一個Content-Length頭。(HTTP 1.1新)
          412 Precondition Failed 請求頭中指定的一些前提條件失?。℉TTP 1.1新)。
          413 Request Entity Too Large 目標文檔的大小超過服務器當前愿意處理的大小。如果服務器認為自己能夠稍后再處理該請求,則應該提供一個Retry-After頭(HTTP 1.1新)。
          414 Request URI Too Long URI太長(HTTP 1.1新)。
          416 Requested Range Not Satisfiable 服務器不能滿足客戶在請求中指定的Range頭。(HTTP 1.1新)
          500 Internal Server Error 服務器遇到了意料不到的情況,不能完成客戶的請求。
          501 Not Implemented 服務器不支持實現請求所需要的功能。例如,客戶發出了一個服務器不支持的PUT請求。
          502 Bad Gateway 服務器作為網關或者代理時,為了完成請求訪問下一個服務器,但該服務器返回了非法的應答。
          503 Service Unavailable 服務器由于維護或者負載過重未能應答。例如,Servlet可能在數據庫連接池已滿的情況下返回503。服務器返回503時可以提供一個Retry-After頭。
          504 Gateway Timeout 由作為代理或網關的服務器使用,表示不能及時地從遠程服務器獲得應答。(HTTP 1.1新)
          505 HTTP Version Not Supported 服務器不支持請求中所指明的HTTP版本。(HTTP 1.1新)

           

          Type:請求URL的類型

          Type: 請求URL的類型

          以下是Httpwatch中的URL的類型列表

           

          text/html

          Normal html based content

          text/css

          Cascading style sheets

          text/xml

          XML data, e.g. SOAP requests and responses

          text/*

          Any textual content type including all the above types

          image/gif

          GIF image

          image/jpg

          JPEG image

          image/*

          Any image including gifs, jpgs and png files

          application/x-javascript

          Javascript

          application/*

          Any application content, e.g. flash files (application/x-shockwave-flash)

          URL:列出請求的URL具體地址

          以下主要是HttpWatch菜單區的功能介紹:

          10.3.10 Record

          點擊”Record”按鈕開始錄制Http請求操作

          11.3.11 Stop

          點擊”Stop”按鈕停止錄制Http請求操作

          12.3.12 Clear

          點擊”Clear”按鈕,清除所有錄制Log記錄如下圖所示紅框中內容:

          13.3.13 Summary

          點擊”Summary”按鈕,顯示或隱藏所有請求信息概述

          以下用httpwatch工具記錄打開http://www.google.cn/過程,Summary信息如下:


          Perfomance信息如上圖所示:

          Elapsed time      Http URL請求時間總和    

          Network Round Trips 沒搞明白

          Downloaded Data   客戶端接受到服務器端傳來的數據總和

          Uploaded Data      客戶端發送到服務器端數據總和

          Http compression savings http數據壓縮

          DNS Lookups   DNS解析

          Tcp Connets    Tcp連接

          Status codes信息如上圖所示

          Cache   表示緩存的數據有4處

          200 ok   表示Http狀態代碼200 ok 1處

          14.3.14 Find

          點擊”Find”按鈕,可以打開一個查詢對話框,在日志記錄中去搜索字符串

          15.3.15 Filter

          點擊”Filter”按鈕, 可以打開一個過濾器對話框,如下圖所示

          16.3.16 Save

          點擊”Save”按鈕,可以打開保存對話框,如下圖所示:

          可以保存的格式為.hwl (Httpwatch Log文件格式), .Xml, CVS格式

          17.3.17 Help

          點擊”Help”按鈕,沒什么說的,就是英語Help

          2 四定位問題技巧

          1. 4.1 巧用Filter功能過濾信息

          假設懷疑yun.js有問題,當然你要對js程序要有了解,可使用Filter過濾器,直接將需要的yun.js找出,查看其是否存在問題!

          posted @ 2012-04-13 14:52 順其自然EVO 閱讀(1391) | 評論 (0)編輯 收藏

          Yslow web前端性能分析工具

          YSlow分析網頁,并提出如何提高其性能的基礎上一套規則,高性能的網頁。我搜索一下”Yslow使用說明“,發現都是舊版本Yslow的使用介紹。于是翻譯了一下yahoo官方關于新版Yslow的的使用幫助,希望給初次使用Yslow的朋友一些幫助。

          注:英文不是很好,對著翻譯軟件翻譯的,有不對的地方,大家指正。

          安裝 YSlow

          先安裝 Firebug  https://addons.mozilla.org/en-US/firefox/addon/1843

          Firebug 幫助文檔 http://www.getfirebug.com/docs.html.

          再下載安裝  http://developer.yahoo.com/yslow

           

          使用Yslow

          Yslow是運行在Firebug窗口下,所有要運行Yslow,必須安裝Firebug。

          有兩種方法啟動Yslow

                 1、打開Firebug窗口,選擇Yslow選項。

                 2、直接點擊瀏覽器右下角的Yslow啟動按鈕。

          你第一次打開Yslow時,以下圖像作為Firebug的一部分被顯示在的瀏覽器窗口。

          點擊 Run Test 運行Yslow,也可以點擊 Grade, Components, 或Statistics選項開始對頁面的分析。

          你可以選擇 Autorun YSlow each time a web page is loaded 它將自動對以后打開頁面進行分析,您也可以右擊YSlow狀態欄,然后選擇或取消自動運行。

           

          Yslow視圖

          YSlow顯示測試結果的分析,分為等級、組件、統計信息。你可以瀏覽這些觀點之間選擇標簽以觀的名字在YSlow標簽的Firebug控制臺。

          以下是說明的等級、組件、統計信息。

          一、等級視圖

            查看一個分析,選擇頁面的性能等級標簽或點擊網頁的字母等級在狀態欄這頁紙的底部。

          視圖顯示了等級為網頁的成績單。整個字母等級為頁面顯示在頂部隨著全面數值的表現。這個頁面是基于22可分級的高性能網頁的規則(見性能規則)。這些規則是列在按重要性的順序,從最重要不重要。從 A 級到 F 級,A 級為最高。

          下面是一個等級的例子:

          如果頁面與某一個規則無關,則顯示 N/A ,表示不適用。

          點擊每一規則,都給出了改進建議。要查看更全面的改進方法進入前端性能優化指南

          二、組件視圖

          分組顯示頁面組件,表格列出組件的信息,點擊 Expand All展開顯示給個分組內各的組件信息。

          下面簡要列在組件檢視表:

          TYPE:該組件的類型。該網頁是由組成部分的下列類型: doc, js, css, flash, cssimage, image, redirect, favicon, xhr, and iframe.

          SIZE(KB):該組件的大小以千字節。

          GZIP(KB):該組件的gzip壓縮的大小以千字節。

          COOKIE RECEIVED(bytes):字節數在HTTP設置的Cookie響應頭。

          COOKIE SENT(bytes):節數的Cookie在HTTP請求報頭

          HEADERS:HTTP信息頭,點擊放大鏡查看全面信息。

          URL:鏈接地址

          EXPIRES(Y/M/D):日期的Expires頭,屬于緩存設置一種。

          RESPONSE TIME (ms):響應時間

          ETAG:ETag響應頭,也是緩存設置的一種

          ACTION:額外的性能分析

          三、統計信息視圖

           左側圖表顯示是頁面元素在空緩存的加載情況,右側為頁面元素使用緩存后的頁面加載情況。我們可以看到,頁面元素緩存后的使頁面的http請求和頁面總大小都減少,從而加快了頁面打開時間。參看(頁面的緩存設置

          YSlow菜單欄

           

          一、規則集

               1 、YSlow ( 2版) -這一規則集包含了所有22個測試的規則。
               2 、精英( V1導聯) -這個規則集包含原始13規則中使用了YSlow 1.0 。
               3、小網站或博客-這個規則集包含14個規則,適用于小型網站或博客。參照下方的圖片,看看哪一種規則,在這個規則集。

          請注意,最后選定的規則集成為默認的規則集。默認規則集可以是一個預定義的三個之一或您自己創建的一個。

          要創建您自己的規則集,單擊Rulesets下拉菜單旁邊的 Edit 按鈕。新的規則集屏幕將顯示:

              1、點擊左側 New Set 按鈕,出現全部22調規則,勾選你所需的

              2、點擊 Save ruleset as... 保存,會彈出個命名窗口,命名就可以了。

              3、你還可以對自定義的規則再次編輯或者刪除。

           

          YSlow 工具

          YSlow的工具菜單上提供了多種報告工具,您可以使用獲得的信息,以幫助您的網頁分析。以下是截圖工具菜單:

          1、JSLint

          JSLint收集所有外部和內部的JavaScript從目前的網頁,提交給JSLint ,一個JavaScript驗證,并打開一個單獨的窗口了一份報告,存在問題,該網頁的JavaScript的。該報告包括大致位置的源代碼的問題。很多 時候,這些問題是語法錯誤,但JSLint尋找風格公約的問題和結構性問題。

          2、All JS

          收集所有外部和內部的JavaScript的網頁,并顯示在一個單獨的腳本窗口。您可能想要使用這個工具來查看某個腳本,以及是否實際使用是正確的。

          3、All JS Beautified

          將js以人們可讀的方式展示。

          4、All JS Minified

          收集所有外部和內嵌JavaScript,刪除評論和白色空間以縮小的腳本。以改善網頁的性能。

          5、All CSS

          收集所有的行內和外部的樣式表在網頁上,并將其顯示在一個單獨的窗口。

          6、All Smush.it

          如果您按一下所有Smush.it , Smush.it將運行在網頁上所有的圖片組成。此工具將告訴你該圖像可被優化,并創建一個壓縮文件,來優化圖像。當您選擇此工具你會看到輸出如下所示:

          以上就是Yslow的使用指南,結束。

           

          posted @ 2012-04-13 13:53 順其自然EVO 閱讀(547) | 評論 (0)編輯 收藏

          軟件測試用例的設計心得

          1、了解軟件的原始需求(測試目的)

            在編寫一個軟件或者模塊的測試用例時候,一定要明白這個功能的原始需求,也就是軟件的使用者(客戶)的需求。理解原始需求后,編寫的測試用例才更有目的性。

            2、熟悉軟件的功能需求(測試點)

            這個功能需求是指軟件的細化需求點,這個一般在需求文檔里面都會體現。這里要做的是把 “粗略”的需求,細化成一個個小需求點。熟悉功能需求后,要知道軟件是怎么使用的,這也才能覆蓋到各種操作。

            總之,測試用例一定要全部覆蓋所有的需求點,這是最基本的一點。

            3、熟悉軟件的實現原理(測試點)

            在理解原始需求和軟件的功能需求后,根據需求編寫的測試用例,基本上都能覆蓋得比較全面了。

            在此基礎上,熟悉軟件的實現原理,理解軟件的內部處理。

           ?。?)熟悉原理的過程是進一步深入熟悉軟件的過程。如果單單是從需求點上面覆蓋案例,測試用例只能覆蓋“表面”的一層。一些內部的處理流程也許沒有覆蓋到,而這些沒有覆蓋到的代碼很可能就是一個風險點。

            (2)熟悉模塊原理后,還有一點就是易于分析軟件模塊的關聯性。一個大型的軟件,都是一些小模塊的組合而成。軟件越是大型,耦合就越大,“互相影響”就會越多,若設計用例單單從模塊本身考慮的話,很可能就會對其他模塊造成風險。

            4、用戶場景和網上問題(測試點)

            從用戶的使用場景考慮,這在一些網絡設備比較重要,比如軟件后期在一些真實的使用環境中使用。

            還要就是從一些網上問題總結出來的,那些地方容易出錯,在設計案例的時候需要考慮進去 。

            5、測試用例的框架

            一個測試用例的框架體現了一個測試人員在設計測試用例的整體思路。框架也是從大到小劃分下來,可以是:

            UI界面,功能,容錯,兼容,性能等幾大類,每個大類在根據軟件的邏輯等進行劃分成小類,最后細分到測試點。

            6、測試步驟(測試技巧方法)

            前面4點都是從測試點的角度考慮,測試用例在完成測試點外,接下來就是測試步驟和測試結果啦。

            測試用例可以寫的很詳細,也可以寫的比較簡單。這要看公司的要求,有些公司要求測試步驟很細很細,包括測試結果和測試步驟一一對應。

            要求測試步驟寫的很詳細的公司,一般是怕執行人員的執行力不到位,導致沒有理解案例的目的,導致漏測。一般出現在新員工對軟件系統的不熟悉。

            如果測試步驟寫的很詳細的話,會很耗時間,而且過于詳細的會限制執行人員的思維。個人認為測試用例的重點在于測試點上。

            7、測試用例的一些思路

            在設計測試用例中,通常較多使用的是邊界值,等價類,通過和不通過測試。下面從單個模塊或者單個功能點考慮:(結合一些網上文章的觀點)

           ?。?)UI界面:易用性,提示信息,整體布局,按鈕圖標,色彩,中英文標點錯別字。

           ?。?)數據的多樣性:有效數據,合法的無效數據(邊界值),非法的異常數據,產生錯誤輸出的合法數據組合等各種數據的組合。

           ?。?)操作多樣性:添加刪除編輯查詢 ,多用戶的操作。

            (4)容量測試

           ?。?)用戶權限:使用權限,各種操作的權限。

           ?。?)升級安裝卸載:平滑升級

           ?。?)日志相關(包括調試日志)

            (8)軟件功能的邏輯劃分:功能上劃分未能覆蓋的代碼邏輯,可以添加白盒灰盒用例。

           ?。?)可靠性,容錯性

           ?。?0)兼容性:瀏覽器,系統,支撐軟件。

           ?。?1)安全性

           ?。?2)性能(這里的性能是指,單個模塊或者子系統的性能)

            總之測試用例首先要能覆蓋所有功能需求點,然后搞懂軟件處理邏輯,可以找開發一起看測試用例,把沒有覆蓋到的代碼流程相應的用例補充,至此,用例基本不會出現基本功能的問題。

            在此基礎上,可以進行一些可靠性,容錯性,兼容性等用例的設計,測試下軟件的穩定性。

          posted @ 2012-04-13 11:08 順其自然EVO 閱讀(302) | 評論 (0)編輯 收藏

          軟件測試管理藝術的未來

            概述:什么是測試管理的藝術?在物聯網、云技術、移動互聯網的興起發展,三網合一成為大趨勢的未來,測試管理藝術又將何去何從呢?本文旨在與對測試管理感興趣的同仁進行探討。

            名家名言

            藝術不是你所看到的東西,而是你讓別人看到的東西。

                                ——埃德加 德加(Edgar Hilaire Germain de Gas)

            什么是測試管理的藝術?

            一提到藝術我們馬上就會想到繪畫、雕塑、戲劇、建筑、舞蹈、詩歌等等,但在這里我們要討論的,是關于測試管理的藝術。首先我們來看,什么是測試?ISTQB為測試做了如下定義:

            測試是一個過程,它包括了軟件生命周期的所有活動,有靜態的也有動態的。它涉及到計劃、準備和對軟件及其相關工作產品的評估,目的是

            ● 判定軟件或軟件的工作產品是否滿足特定需求;

            ● 證明它們是否符合目標;

            ● 發現缺陷。

            但是什么時候做測試?是在產品將要完成的時候來做還是從產品需求定義的時候就開始做?實際經驗又告訴我們,如果在產品將要完成的時候再做測試那么就太晚了,預防缺陷遠比發現缺陷耗費的費用和時間少的多。所以,測試的目的應該是:

            ● 預防缺陷;

            ● 提供與產品質量相關的信息和信心;

            ● 發現缺陷。

            什么是管理?

            管:為了達成某一目的,行使一定的權力,組織分配人員執行任務。

            理:在目標實現的過程中,控制過程,使其條理化、有序進行。

             測試管理(manage)就是制定計劃、執行計劃、檢查和改進過程從而達到測試目的的一切方法和活動。制定計劃(或規定、規范、標準、法規等)是設計達 到目標的路徑,將整體的大目標分成一個個階段性的小目標,確定實現階段性目標所需要采取的戰略措施,部署相應的人力、物力、規定走向目標時應該遵循的規 范、標準、法規和過程等;執行就是按照計劃去做,即實施;檢查就是將執行的過程或結果與計劃進行對比,總結出經驗,找出差距;改進首先是推廣通過檢查總結 出的經驗,將經驗轉變為長效機制或新的規定;再次是針對檢查發現的問題進行糾正,制定糾正、預防措施,以持續改進。

            測試管理的藝術就是創造管理方法和技巧,創造性的運用管理方法和技巧實現測試的目的。它應該是基于實踐的,與時俱進的,同時也是感性的,反映人類內心的情感和訴求,反映對理想的追求。因為只有這樣的藝術才會有生命力。

            回顧國際上的管理學藝術之路,我們可以看到管理學經歷了兩大階段:

            第一階段:從行為科學到戰略管理

              從個體行為到組織行為(1956—1965)

              從組織中的人到人的組織(1966—1975)

              從過程管理到戰略管理(1976—1985)

           第二階段:從組織變革到知識管理

              從職能組織到變革組織(1986—1995)

              從組織管理到知識管理(1996—2005)

            回顧軟件測試的目的演變,我們可以看到如下的脈絡:

              以調試為主(從有軟件開始-1956)

              證明程序是正確的(1957–1978)

              證明程序中有錯誤(1979–1982)

              評估產品能力(1983–1987)

              預防缺陷(1988–1992)

              預防缺陷,發現缺陷,評估質量(1992– )

            管理理念方法和技巧都是以目標為導向的。當我們的目標發生了變化的時候,管理的藝術也隨之得到了發展。我們可以清楚的看到管理藝術隨著測試目的的變化而變化,在有一個時間上一一對應(或者略帶滯后)的關系。

            比如在測試目的從“調試”轉換到“證明程序是正確的”時,也是管理藝術從個體行為到組織行為轉變的過程。再比如,當測試的目的從“證明程序中有錯誤”改變為“評估產品能力”時,管理藝術也經歷了從過程管理到戰略管理的轉換。

            隨著物聯網、云技術、移動互聯網的興起和發展,測試管理也受到了空前未有的挑戰,因為測試對象的開發規模,組織形式,應用范圍以及對人類生活的影響都產生了前所未有的革命。如何創造管理方法和技巧,創造性地運用管理方法和技巧來適應這場革命成為我們必須面對的課題。

            筆者以為,未來的測試組織和測試過程應該體現:效率 Performance,安全 Security,隨時可取 Availability,靈活收放 Scalability的特性。

            未來的測試管理應該是

            ● 多種軟件生命周期的組合 – V模型和敏捷開發敏捷測試的一體化;

            ● 多種測試組織形式的組合 – 內包、外包、研發測試人員角色互換,獨立測試團隊,第三方測試多種測試組織形式的一體化;

            ● 多種文化交融,超越地域分布,集目標管理、知識管理、人才管理、信息化管理為一體。

            只有這樣,我們才能與時俱進,適應新的形勢發展,創造出新的測試管理藝術。

            讓我們聽從內心的直覺,聽從內心對美的呼喚和追求,一起去探索尋求21世紀新的測試管理藝術,并將這些藝術表現出來。因為正如法國古典印象主義畫家埃德加.德加(Edgar Hilaire Germain de Gas)所說的:

            “藝術不是你所看到的東西,而是你讓別人看到的東西。”

          posted @ 2012-04-13 11:03 順其自然EVO 閱讀(203) | 評論 (0)編輯 收藏

          僅列出標題
          共394頁: First 上一頁 336 337 338 339 340 341 342 343 344 下一頁 Last 
          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 静乐县| 融水| 广灵县| 额敏县| 明星| 仁布县| 泰来县| 十堰市| 聂拉木县| 襄垣县| 太和县| 望奎县| 武冈市| 清丰县| 英山县| 南丰县| 吉林省| 沙雅县| 沈阳市| 临城县| 桃园县| 古蔺县| 浠水县| 石家庄市| 青铜峡市| 鹰潭市| 黎城县| 娄底市| 吐鲁番市| 胶南市| 文化| 晋江市| 松潘县| 乌拉特后旗| 普安县| 疏附县| 左权县| 普兰店市| 克山县| 新余市| 全椒县|