为测试事业不懈努力!

发布新日志

  • 缺陷管理之缺陷收敛趋势分析

    jx9747 发布于 2010-01-29 10:29:04

        之前在别处写过一篇的一篇博文,忘了同步过来了,发现被很过网站抄袭(连个转字都不写,晕),分享给各位测友吧 (*^__^*) 嘻嘻……

    版权声明:本文可以被转载,但是在未经本人许可前,不得用于任何商业用途或其他以盈利为目的的用途。本人保留对本文的一切权利。如需转载,请在转载是保留此版权声明,并保证本文的完整性。

    缺陷趋势,个人的理解是在一定周期时间或者一定阶段内,缺陷的按照一个或者多个维度的动态分布。周期可以是天,周,月。阶段可以是版本,例如1.2,1.3,1.3。

    先来张图,有个直观的认识。
    先对上图中出现的术语解释一下。
    发现缺陷:测试人员在某一测试周期内新发现的缺陷总数。
    修复缺陷:测试人员在某一测试周期内,对开发人员修复的缺陷验证并通过并缺陷总数。
    遗留缺陷:在某一测试周期结束时刻,未关闭的缺陷总数。
    收敛趋势:表示在一定周期内,遗留缺陷的变化情况。

     

    收敛趋势曲线走势能反映被测试目标的质量变化情况,可以辅助管理人员决策,也可以做为产品的发布的一个重要参考。收敛趋势曲线往下跌的时候,表示产品质量在持续改善。收敛趋势曲线往上扬,表示产品质量在持续恶化,如果在开发阶段前期,这种情况也正常;如果在开发阶段的后期或者临近发布点,那么这种情况要引起注意了。收敛趋势曲线越趋近于水平(横轴),产品质量越好。

    蓝色缺陷越趋近于近于水平(横轴),表示产品质量比较稳定,但不代表质量好。另外,蓝色和红色两条曲线可以辅助分析收敛趋势的变化情况,如果发现缺陷数目大于修复缺陷数,那么收敛趋势曲线就上扬,反之则下跌。  


  • 如何写测试人员的周报(或日报)

    小丫头 发布于 2009-08-17 20:58:06

    众所周知,在职场,总有各式各样的报告要看,要写,而最常规的莫过于周报(或者日报)了.这类报告通常是关于个人的工作情况或者项目的进展情况等.那么作为一名测试人员,该如何写周报呢(若有日报需要,以此类推).

    通常在写一份报告之前考虑这么两个方面会让你的报告更具阅读性,那就是:报告要表达的主题是什么,报告的观众/听众是谁.对于同一个(或者相似的)主题,观众/听众不一样,报告所需要陈述的具体内容通常也是不一样的.

    下面我想从测试员和测试组长(负责人)的角度分别罗列一下测试周报的模式和内容.

    一. 测试员 (tester)
    测试员的周报一般来说是汇报给自己的组长,就我自己的工作经历来说,一般软件公司测试组长兼具项目以及行政两个方面,也就是说一方面主导分配到这个测试小组的测试任务,另一方面也要关注组员的工作绩效以及团队发展等.所以汇报给测试组长的周报就要比较详细的从项目和团队合作方面同时阐述自己一周的工作情况.大概可以包括这个几点:
    1.内容概要罗列以及花费时间列表
    阐述本周自己主要的工作情况,譬如参与了哪几个项目的哪些相关测试,出席了几个公司会议,参加了几个公司内(或外)的相关培训课,阅读了什么工作相关的资料/书籍等,同时(推荐以表格的形式)列出每一项工作(或相关)内容所花费的时间(work hour)
    2.执行的测试用例数目
    按照项目分别列出,本周执行了多少测试用例,其中pass多少,fail多少,有多少用例被block了不能执行(需要另外列出具体的被block原因,如某个bug或者某项测试资源没有到位),还有多少已分配的测试用例没有完成.这些信息推荐以表格形式给出,参见下面的草图:
       Pass  Fail Blocked   Remaining
      Project A  25  3  2  16
     ......        
    如果执行了ad-hoc或者exploration测试,可以考虑以表格形式列出测试内容.
    3.提交的bug具体数目
    体现测试人员绩效一个重要的方面是提交的bug数量和质量.所有在这里列出本周里在每个测试项目中你提交的有效bug数,无效bug数(重复的bug,不能复现的bug),验证的bug数(有效修复-fixed,无效修复-reject),这些信息同样推荐以表格形式给出,参见下面的草图:
       Submitted-Valid  Submitted-Duplicated  Submitted-Unreproduciable  Verify-Fixed Verify-Reject 
     Project A  5  2  0  8  3
     ......          
    4.其它
    任何工作相关的其余内容.譬如你希望多一个测试平台,你需要某本专业书籍等等等等.

    版权声明:本文出自小丫头的51Testing软件测试博客:http://www.51testing.com/?18819

    原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处 、作者信息和本声明,否则将追究法律责任。

    二.测试组长
    测试组长的周报通常来说覆盖两个方面,一是项目相关情况,这个内容的目标读者是所有和项目相关的人员(项目经理,产品经理,开发人员,测试人员,发布人员等),另一个方面是关于团队管理方面(有时候会把这一项单独放在一份报告里发给测试经理,毕竟项目相关人员只关注项目的测试进展情况,基本不关心测试团队成员的具体工作内容)
    1.严重问题
    任何阻止测试顺利进行的issue都要在这里醒目列出,同时要注明希望问题得到解决的最后期限,如果知道报告接受者中的谁可以帮助推动解决这个问题,要明确指到该人姓名.
    2.各个项目测试用例完成情况
    可以用类似于下面的柱状图来表示
    (如有必要,可以给出具体的链接指向测试用例管理库中本轮测试的详细内容和结果)
    3.各个项目的bug以固定时间为单位(通常周报中就按周来统计)的增减情况
    (统计的bug数量可以是所有优先级/严重程度的bug总和,也可以只取第一第二优先级/严重程度的bug进行统计,因为很多时候,这类bug的数量直接影响产品发布与否,而这个,正是项目相关人员最关心的)
    例见下图
    (如有必要,给出具体链接指向bug管理库中该项目所有bug的详细内容)
    4.各个项目的bug按照一定类别的百分比统计
    (这个图可以让看报告的人一目了然当前项目中的主要问题存在哪里,是功能上的,还是界面上的,还是通讯上的,还是其它等等等等)
    例见下图(具体分类根据不同产品不同项目而不同)
    5.(如有必要)测试小组成员的大概工作情况
    可以包括:有多少测试人员参与,每个人在各个项目中花费的时间,有时候也可以列出每个测试员执行了多少测试用例,提交了多少bug,验证了多少bug等信息
    可以参见如下表格:
    6.任何项目相关的其它杂事


    暂时就想到这么多了,欢迎大家指点意见.

    版权声明:本文出自小丫头的51Testing软件测试博客:http://www.51testing.com/?18819

    原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处 、作者信息和本声明,否则将追究法律责任。
  • 面试外企必备_测试英文概念

    helina168 发布于 2009-08-14 20:48:38

    A (return to top of page)

    Acceptance Testing: Testing conducted to enable a user/customer to determine whether to accept a software product. Normally performed to validate the software meets a set of agreed acceptance criteria.

    Accessibility Testing: Verifying a product is accessible to the people having disabilities (deaf, blind, mentally disabled etc.).

    Ad Hoc Testing: A testing phase where the tester tries to 'break' the system by randomly trying the system's functionality. Can include negative testing as well. See also Monkey Testing.

    Agile Testing: Testing practice for projects using agile methodologies, treating development as the customer of testing and emphasizing a test-first design paradigm. See also Test Driven Development.

    Application Binary Interface (ABI): A specification defining requirements for portability of applications in binary forms across defferent system platforms and environments.

    Application Programming Interface (API): A formalized set of software calls and routines that can be referenced by an application program in order to access supporting system or network services.

    Automated Software Quality (ASQ): The use of software tools, such as automated testing tools, to improve software quality.

    Automated Testing:

    Testing employing software tools which execute tests without manual intervention. Can be applied in GUI, performance, API, etc. testing. The use of software to control the execution of tests, the comparison of actual outcomes to predicted outcomes, the setting up of test preconditions, and other test control and test reporting functions. B (return to top of page)

    Backus-Naur Form.: A metalanguage used to formally describe the syntax of a language.

    Basic Block: A sequence of one or more consecutive, executable statements containing no branches.

    Basis Path Testing: A white box test case design technique that uses the algorithmic flow of the program to design tests.

    Basis Set: The set of tests derived using basis path testing.

    Baseline: The point at which some deliverable produced during the software engineering process is put under formal change control.

    Benchmark Testing: Tests that use representative sets of programs and data designed to evaluate the performance of computer hardware and software in a given configuration.

    Beta Testing: Testing of a rerelease of a software product conducted by customers.

    Binary Portability Testing: Testing an executable application for portability across system platforms and environments, usually for conformation to an ABI specification.

    Black Box Testing: Testing based on an analysis of the specification of a piece of software without reference to its internal workings. The goal is to test how well the component conforms to the published requirements for the component.

    Bottom Up Testing: An approach to integration testing where the lowest level components are tested first, then used to facilitate the testing of higher level components. The process is repeated until the component at the top of the hierarchy is tested.

    Boundary Testing: Test which focus on the boundary or limit conditions of the software being tested. (Some of these tests are stress tests).

    Boundary Value Analysis: In boundary value analysis, test cases are generated using the extremes of the input domaini, e.g. maximum, minimum, just inside/outside boundaries, typical values, and error values. BVA is similar to Equivalence Partitioning but focuses on "corner cases".

    Branch Testing: Testing in which all branches in the program source code are tested at least once.

    Breadth Testing: A test suite that exercises the full functionality of a product but does not test features in detail.

    Bug: A fault in a program which causes the program to perform. in an unintended or unanticipated manner.

    C (return to top of page)

    CAST: Computer Aided Software Testing.

    Capture/Replay Tool: A test tool that records test input as it is sent to the software under test. The input cases stored can then be used to reproduce the test at a later time. Most commonly applied to GUI test tools.

    CMM: The Capability Maturity Model for Software (CMM or SW-CMM) is a model for judging the maturity of the software processes of an organization and for identifying the key practices that are required to increase the maturity of these processes.

    Cause Effect Graph: A graphical representation of inputs and the associated outputs effects which can be used to design test cases.

    Code Complete: Phase of development where functionality is implemented in entirety; bug fixes are all that are left. All functions found in the Functional Specifications have been implemented.

    Code Coverage: An analysis method that determines which parts of the software have been executed (covered) by the test case suite and which parts have not been executed and therefore may require additional attention.

    Code Inspection: A formal testing technique where the programmer reviews source code with a group who ask questions analyzing the program logic, analyzing the code with respect to a checklist of historically common programming errors, and analyzing its compliance with coding standards.

    Code Walkthrough: A formal testing technique where source code is traced by a group with a small set of test cases, while the state of program variables is manually monitored, to analyze the programmer's logic and assumptions.

    Coding: The generation of source code.

    Compatibility Testing: Testing whether software is compatible with other elements of a system with which it should operate, e.g. browsers, Operating Systems, or hardware.

    Component: A minimal software item for which a separate specification is available.

    Component Testing: See Unit Testing.

    Concurrency Testing: Multi-user testing geared towards determining the effects of accessing the same application code, module or database records. Identifies and measures the level of locking, deadlocking and use of single-threaded code and locking semaphores.

    Conformance Testing: The process of testing that an implementation conforms to the specification on which it is based. Usually applied to testing conformance to a formal standard.

    Context Driven Testing: The context-driven school of software testing is flavor of Agile Testing that advocates continuous and creative evaluation of testing opportunities in light of the potential information revealed and the value of that information to the organization right now.

    Conversion Testing: Testing of programs or procedures used to convert data from existing systems for use in replacement systems.

    Cyclomatic Complexity: A measure of the logical complexity of an algorithm, used in white-box testing.

    D (return to top of page)

    Data Dictionary: A database that contains definitions of all data items defined during analysis.

    Data Flow Diagram: A modeling notation that represents a functional decomposition of a system.

    Data Driven Testing: Testing in which the action of a test case is parameterized by externally defined data values, maintained as a file or spreadsheet. A common technique in Automated Testing.

    Debugging: The process of finding and removing the causes of software failures.

    Defect: Nonconformance to requirements or functional / program specification

    Dependency Testing: Examines an application's requirements for pre-existing software, initial states and configuration in order to maintain proper functionality.

    Depth Testing: A test that exercises a feature of a product in full detail.

    Dynamic Testing: Testing software through executing it. See also Static Testing.

    E (return to top of page)

    Emulator: A device, computer program, or system that accepts the same inputs and produces the same outputs as a given system.

    Endurance Testing: Checks for memory leaks or other problems that may occur with prolonged execution.

    End-to-End testing: Testing a complete application environment in a situation that mimics real-world use, such as interacting with a database, using network communications, or interacting with other hardware, applications, or systems if appropriate.

    Equivalence Class: A portion of a component's input or output domains for which the component's behaviour is assumed to be the same from the component's specification.

    Equivalence Partitioning: A test case design technique for a component in which test cases are designed to execute representatives from equivalence classes.

    Exhaustive Testing: Testing which covers all combinations of input values and preconditions for an element of the software under test.

    F (return to top of page)

    Functional Decomposition: A technique used during planning, analysis and design; creates a functional hierarchy for the software.

    Functional Specification: A document that describes in detail the characteristics of the product with regard to its intended features.

    Functional Testing: See also Black Box Testing.

    Testing the features and operational behavīor of a product to ensure they correspond to its specifications. Testing that ignores the internal mechanism of a system or component and focuses solely on the outputs generated in response to selected inputs and execution conditions. G (return to top of page)

    Glass Box Testing: A synonym for White Box Testing.

    Gorilla Testing: Testing one particular module,functionality heavily.

    Gray Box Testing: A combination of Black Box and White Box testing methodologies: testing a piece of software against its specification but using some knowledge of its internal workings.

    H (return to top of page)

    High Order Tests: Black-box tests conducted once the software has been integrated.

    I (return to top of page)

    Independent Test Group (ITG): A group of people whose primary responsibility is software testing,

    Inspection: A group review quality improvement process for written material. It consists of two aspects; product (document itself) improvement and process improvement (of both document production and inspection).

    Integration Testing: Testing of combined parts of an application to determine if they function together correctly. Usually performed after unit and functional testing. This type of testing is especially relevant to client/server and distributed systems.

    Installation Testing: Confirms that the application under test recovers from expected or unexpected events without loss of data or functionality. Events can include shortage of disk space, unexpected loss of communication, or power out conditions.

    J (return to top of page)

    K (return to top of page)

    L (return to top of page)

    Load Testing: See Performance Testing.

    Localization Testing: This term refers to making software specifically designed for a specific locality.

    Loop Testing: A white box testing technique that exercises program loops.

    M (return to top of page)

    Metric: A standard of measurement. Software metrics are the statistics describing the structure or content of a program. A metric should be a real objective measurement of something such as number of bugs per lines of code.

    Monkey Testing: Testing a system or an Application on the fly, i.e just few tests here and there to ensure the system or an application does not crash out.

    Mutation Testing: Testing done on the application where bugs are purposely added to it.

    N (return to top of page)

    Negative Testing: Testing aimed at showing software does not work. Also known as "test to fail". See also Positive Testing.

    N+1 Testing: A variation of Regression Testing. Testing conducted with multiple cycles in which errors found in test cycle N are resolved and the solution is retested in test cycle N+1. The cycles are typically repeated until the solution reaches a steady state and there are no errors. See also Regression Testing.

    O (return to top of page)

    P (return to top of page)

    Path Testing: Testing in which all paths in the program source code are tested at least once.

    Performance Testing: Testing conducted to evaluate the compliance of a system or component with specified performance requirements. Often this is performed using an automated test tool to simulate large number of users. Also know as "Load Testing".

    Positive Testing: Testing aimed at showing software works. Also known as "test to pass". See also Negative Testing.

    Q (return to top of page)

    Quality Assurance: All those planned or systematic actions necessary to provide adequate confidence that a product or service is of the type and quality needed and expected by the customer.

    Quality Audit: A systematic and independent examination to determine whether quality activities and related results comply with planned arrangements and whether these arrangements are implemented effectively and are suitable to achieve objectives.

    Quality Circle: A group of individuals with related interests that meet at regular intervals to consider problems or other matters related to the quality of outputs of a process and to the correction of problems or to the improvement of quality.

    Quality Control: The operational techniques and the activities used to fulfill and verify requirements of quality.

    Quality Management: That aspect of the overall management function that determines and implements the quality policy.

    Quality Policy: The overall intentions and direction of an organization as regards quality as formally expressed by top management.

    Quality System: The organizational structure, responsibilities, procedures, processes, and resources for implementing quality management.

    R (return to top of page)

    Race Condition: A cause of concurrency problems. Multiple accesses to a shared resource, at least one of which is a write, with no mechanism used by either to moderate simultaneous access.

    Ramp Testing: Continuously raising an input signal until the system breaks down.

    Recovery Testing: Confirms that the program recovers from expected or unexpected events without loss of data or functionality. Events can include shortage of disk space, unexpected loss of communication, or power out conditions.

    <>Regression Testing: Retesting a previously tested program following modification to ensure that faults have not been introduced or uncovered as a result of the changes made.

    Release Candidate: A pre-release version, which contains the desired functionality of the final version, but which needs to be tested for bugs (which ideally should be removed before the final version is released).

    S (return to top of page)

    <>Sanity Testing: Brief test of major functional elements of a piece of software to determine if its basically operational. See also Smoke Testing.

    <>Scalability Testing: Performance testing focused on ensuring the application under test gracefully handles increases in work load.

    <>Security Testing: Testing which confirms that the program can restrict access to authorized personnel and that the authorized personnel can access the functions available to their security level.

    <>Smoke Testing: A quick-and-dirty test that the major functions of a piece of software work. Originated in the hardware testing practice of turning on a new piece of hardware for the first time and considering it a success if it does not catch on fire.

    <>Soak Testing: Running a system at high load for a prolonged period of time. For example, running several times more transactions in an entire day (or night) than would be expected in a busy day, to identify and performance problems that appear after a large number of transactions have been executed.

    <>Software Requirements Specification: A deliverable that describes all data, functional and behavīoral requirements, all constraints, and all validation requirements for software/

    <>Software Testing: A set of activities conducted with the intent of finding errors in software.

    <>Static Analysis: Analysis of a program carried out without executing the program.

    Static Analyzer: A tool that carries out static analysis.

    <>Static Testing: Analysis of a program carried out without executing the program.

    Storage Testing: Testing that verifies the program under test stores data files in the correct directories and that it reserves sufficient space to prevent unexpected termination resulting from lack of space. This is external storage as opposed to internal storage.

    Stress Testing: Testing conducted to evaluate a system or component at or beyond the limits of its specified requirements to determine the load under which it fails and how. Often this is performance testing using a very high level of simulated load.

    Structural Testing: Testing based on an analysis of internal workings and structure of a piece of software. See also White Box Testing.

    System Testing: Testing that attempts to discover defects that are properties of the entire system rather than of its individual components.

    T (return to top of page)

    Testability: The degree to which a system or component facilitates the establishment of test criteria and the performance of tests to determine whether those criteria have been met.

    Testing:

    The process of exercising software to verify that it satisfies specified requirements and to detect errors. The process of analyzing a software item to detect the differences between existing and required conditions (that is, bugs), and to evaluate the features of the software item (Ref. IEEE Std 829). The process of operating a system or component under specified conditions, observing or recording the results, and making an evaluation of some aspect of the system or component. Test Automation: See Automated Testing.

    Test Bed: An execution environment configured for testing. May consist of specific hardware, OS, network topology, configuration of the product under test, other application or system software, etc. The Test Plan for a project should enumerated the test beds(s) to be used.

    Test Case:

    Test Case is a commonly used term for a specific test. This is usually the smallest unit of testing. A Test Case will consist of information such as requirements testing, test steps, verification steps, prerequisites, outputs, test environment, etc. A set of inputs, execution preconditions, and expected outcomes developed for a particular objective, such as to exercise a particular program path or to verify compliance with a specific requirement. Test Driven Development: Testing methodology associated with Agile Programming in which every chunk of code is covered by unit tests, which must all pass all the time, in an effort to eliminate unit-level and regression bugs during development. Practitioners of TDD write a lot of tests, i.e. an equal number of lines of test code to the size of the production code.

    Test Driver: A program or test tool used to execute a tests. Also known as a Test Harness.

    Test Environment: The hardware and software environment in which tests will be run, and any other software with which the software under test interacts when under test including stubs and test drivers.

    Test First Design: Test-first design is one of the mandatory practices of Extreme Programming (XP).It requires that programmers do not write any production code until they have first written a unit test.

    Test Harness: A program or test tool used to execute a tests. Also known as a Test Driver.

    Test Plan: A document describing the scope, approach, resources, and schedule of intended testing activities. It identifies test items, the features to be tested, the testing tasks, who will do each task, and any risks requiring contingency planning. Ref IEEE Std 829.

    Test Procedure: A document providing detailed instructions for the execution of one or more test cases.

    Test Scenario: Definition of a set of test cases or test scrīpts and the sequence in which they are to be executed.

    Test scrīpt: Commonly used to refer to the instructions for a particular test that will be carried out by an automated test tool.

    Test Specification: A document specifying the test approach for a software feature or combination or features and the inputs, predicted results and execution conditions for the associated tests.

    Test Suite: A collection of tests used to validate the behavīor of a product. The scope of a Test Suite varies from organization to organization. There may be several Test Suites for a particular product for example. In most cases however a Test Suite is a high level concept, grouping together hundreds or thousands of tests related by what they are intended to test.

    Test Tools: Computer programs used in the testing of a system, a component of the system, or its documentation.

    Thread Testing: A variation of top-down testing where the progressive integration of components follows the implementation of subsets of the requirements, as opposed to the integration of components by successively lower levels.

    Top Down Testing: An approach to integration testing where the component at the top of the component hierarchy is tested first, with lower level components being simulated by stubs. Tested components are then used to test lower level components. The process is repeated until the lowest level components have been tested.

    Total Quality Management: A company commitment to develop a process that achieves high quality product and customer satisfaction.

    Traceability Matrix: A document showing the relationship between Test Requirements and Test Cases.

    U (return to top of page)

    Usability Testing: Testing the ease with which users can learn and use a product.

    Use Case: The specification of tests that are conducted from the end-user perspective. Use cases tend to focus on operating software as an end-user would conduct their day-to-day activities.

    User Acceptance Testing: A formal product evaluation performed by a customer as a condition of purchase.

    Unit Testing: Testing of individual software components.

    V (return to top of page)

    Validation: The process of evaluating software at the end of the software development process to ensure compliance with software requirements. The techniques for validation is testing, inspection and reviewing.

    Verification: The process of determining whether of not the products of a given phase of the software development cycle meet the implementation steps and can be traced to the incoming objectives established during the previous phase. The techniques for verification are testing, inspection and reviewing.

    Volume Testing: Testing which confirms that any values that may become large over time (such as accumulated counts, logs, and data files), can be accommodated by the program and will not cause the program to stop working or degrade its operation in any manner.

    W (return to top of page)

    Walkthrough: A review of requirements, designs or code characterized by the author of the material under review guiding the progression of the review.

    White Box Testing: Testing based on an analysis of internal workings and structure of a piece of software. Includes techniques such as Branch Testing and Path Testing. Also known as Structural Testing and Glass Box Testing. Contrast with Black Box Testing.

    Workflow Testing: scrīpted end-to-end testing which duplicates specific workflows which are expected to be utilized by the end-user.

    X (return to top of page)

    Y (return to top of page)

    Z (return to top of page)

     

  • 软件测试面试题(最新!更新中!)

    fengyun32 发布于 2009-09-26 12:05:01

    01. 为什么要在一个团队中开展软件测试工作?
      因为没有经过测试的软件很难在发布之前知道该软件的质量,就好比ISO质量认证一样,测试同样也需要质量的保证,这个时候就需要在团队中开展软件测试的工作。在测试的过程发现软件中存在的问题,及时让开发人员得知并修改问题,在即将发布时,从测试报告中得出软件的质量情况。

    02. 您在以往的测试工作中都曾经具体从事过哪些工作?其中最擅长哪部分工作?
      我曾经做过web测试,后台测试,客户端软件,其中包括功能测试,性能测试,用户体验测试。最擅长的是功能测试

    03. 您所熟悉的软件测试类型都有哪些?请试着分别比较这些不同04. 的测试类型的区别与联系(如功能测试、性能测试……)
      测试类型有:功能测试,性能测试,界面测试。
      功能测试在测试工作中占的比例最大,功能测试也叫黑盒测试。是把测试对象看作一个黑盒子。利用黑盒测试法进行动态测试时,需要测试软件产品的功能,不需测试软件产品的内部结构和处理过程。采用黑盒技术设计测试用例的方法有:等价类划分、边界值分析、错误推测、因果图和综合策略。
      性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。负载测试和压力测试都属于性能测试,两者可以结合进行。通过负载测试,确定在各种工作负载下系统的性能,目标是测试当负载逐渐增加时,系统各项性能指标的变化情况。压力测试是通过确定一个系统的瓶颈或者不能接收的性能点,来获得系统能提供的最大服务级别的测试。
      界面测试,界面是软件与用户交互的最直接的层,界面的好坏决定用户对软件的第一印象。而且设计良好的界面能够引导用户自己完成相应的操作,起到向导的作用。同时界面如同人的面孔,具有吸引用户的直接优势。设计合理的界面能给用户带来轻松愉悦的感受和成功的感觉,相反由于界面设计的失败,让用户有挫败感,再实用强大的功能都可能在用户的畏惧与放弃中付诸东流。
      区别在于,功能测试关注产品的所有功能上,要考虑到每个细节功能,每个可能存在的功能问题。性能测试主要关注于产品整体的多用户并发下的稳定性和健壮性。界面测试更关注于用户体验上,用户使用该产品的时候是否易用,是否易懂,是否规范(快捷键之类的),是否美观(能否吸引用户的注意力),是否安全(尽量在前台避免用户无意输入无效的数据,当然考虑到体验性,不能太粗鲁的弹出警告)?做某个性能测试的时候,首先它可能是个功能点,首先要保证它的功能是没问题的,然后再考虑该功能点的性能测试

    04.您认为做好测试用例设计工作的关键是什么?
    白盒测试用例设计的关键是以较少的用例覆盖尽可能多的内部程序逻辑结果
    黑盒法用例设计的关键同样也是以较少的用例覆盖模块输出和输入接口。不可能做到完全测试,以最少的用例在合理的时间内发现最多的问题


    05.     请试着比较一下黑盒测试、白盒测试、单元测试、集成测试、系统测试、验收测试的区别与联系。

      黑盒测试:已知产品的功能设计规格,可以进行测试证明每个实现了的功能是否符合要求。
      白盒测试:已知产品的内部工作过程,可以通过测试证明每种内部操作是否符合设计规格要求,所有内部成分是否以经过检查。

      软件的黑盒测试意味着测试要在软件的接口处进行。这种方法是把测试对象看做一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明。因此黑盒测试又叫功能测试或数据驱动测试。黑盒测试主要是为了发现以下几类错误:
      1、是否有不正确或遗漏的功能?
      2、在接口上,输入是否能正确的接受?能否输出正确的结果?
      3、是否有数据结构错误或外部信息(例如数据文件)访问错误?
      4、性能上是否能够满足要求?
      5、是否有初始化或终止性错误?

      软件的白盒测试是对软件的过程性细节做细致的检查。这种方法是把测试对象看做一个打开的盒子,它允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。通过在不同点检查程序状态,确定实际状态是否与预期的状态一致。因此白盒测试又称为结构测试或逻辑驱动测试。白盒测试主要是想对程序模块进行如下检查:
      1、对程序模块的所有独立的执行路径至少测试一遍。
      2、对所有的逻辑判定,取“真”与取“假”的两种情况都能至少测一遍。
      3、在循环的边界和运行的界限内执行循环体。
      4、测试内部数据结构的有效性,等等。

      单元测试(模块测试)是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。

      单元测试是由程序员自己来完成,最终受益的也是程序员自己。可以这么说,程序员有责任编写功能代码,同时也就有责任为自己的代码编写单元测试。执行单元测试,就是为了证明这段代码的行为和我们期望的一致。

      集成测试(也叫组装测试,联合测试)是单元测试的逻辑扩展。它的最简单的形式是:两个已经测试过的单元组合成一个组件,并且测试它们之间的接口。从这一层意义上讲,组件是指多个单元的集成聚合。在现实方案中,许多单元组合成组件,而这些组件又聚合成程序的更大部分。方法是测试片段的组合,并最终扩展进程,将您的模块与其他组的模块一起测试。最后,将构成进程的所有模块一起测试。

      系统测试是将经过测试的子系统装配成一个完整系统来测试。它是检验系统是否确实能提供系统方案说明书中指定功能的有效方法。(常见的联调测试)

      系统测试的目的是对最终软件系统进行全面的测试,确保最终软件系统满足产品需求并且遵循系统设计。

      验收测试是部署软件之前的最后一个测试操作。验收测试的目的是确保软件准备就绪,并且可以让最终用户将其用于执行软件的既定功能和任务。
    验收测试是向未来的用户表明系统能够像预定要求那样工作。经集成测试后,已经按照设计把所有的模块组装成一个完整的软件系统,接口错误也已经基本排除了,接着就应该进一步验证软件的有效性,这就是验收测试的任务,即软件的功能和性能如同用户所合理期待的那样。

    06. 测试计划工作的目的是什么?测试计划工作的内容都包括什么?其中哪些是最重要的?
      软件测试计划是指导测试过程的纲领性文件,包含了产品概述、测试策略、测试方法、测试区域、测试配置、测试周期、测试资源、测试交流、风险分析等内容。借助软件测试计划,参与测试的项目成员,尤其是测试管理人员,可以明确测试任务和测试方法,保持测试实施过程的顺畅沟通,跟踪和控制测试进度,应对测试过程中的各种变更。
    测试计划和测试详细规格、测试用例之间是战略和战术的关系,测试计划主要从宏观上规划测试活动的范围、方法和资源配置,而测试详细规格、测试用例是完成测试任务的具体战术。所以其中最重要的是测试测试策略和测试方法(最好是能先评审)

    07. 您认为做好测试计划工作的关键是什么?
      1. 明确测试的目标,增强测试计划的实用性
      编写软件测试计划得重要目的就是使测试过程能够发现更多的软件缺陷,因此软件测试计划的价值取决于它对帮助管理测试项目,并且找出软件潜在的缺陷。因此,软件测试计划中的测试范围必须高度覆盖功能需求,测试方法必须切实可行,测试工具并且具有较高的实用性,便于使用,生成的测试结果直观、准确
      2.坚持“5W”规则,明确内容与过程
      “5W”规则指的是“What(做什么)”、“Why(为什么做)”、“When(何时做)”、“Where(在哪里)”、“How(如何做)”。利用“5W”规则创建软件测试计划,可以帮助测试团队理解测试的目的(Why),明确测试的范围和内容(What),确定测试的开始和结束日期(When),指出测试的方法和工具(How),给出测试文档和软件的存放位置(Where)。
      3.采用评审和更新机制,保证测试计划满足实际需求
    测试计划写作完成后,如果没有经过评审,直接发送给测试团队,测试计划内容的可能不准确或遗漏测试内容,或者软件需求变更引起测试范围的增减,而测试计划的内容没有及时更新,误导测试执行人员。
      4. 分别创建测试计划与测试详细规格、测试用例
      应把详细的测试技术指标包含到独立创建的测试详细规格文档,把用于指导测试小组执行测试过程的测试用例放到独立创建的测试用例文档或测试用例管理数据库中。测试计划和测试详细规格、测试用例之间是战略和战术的关系,测试计划主要从宏观上规划测试活动的范围、方法和资源配置,而测试详细规格、测试用例是完成测试任务的具体战术。

    08. 您所熟悉的测试用例设计方法都有哪些?请分别以具体的例子来说明这些方法在测试用例设计工作中的应用。
      1.等价类划分
      划分等价类: 等价类是指某个输入域的子集合.在该子集合中,各个输入数据对于揭露程序中的错误都是等效的.并合理地假定:测试某等价类的代表值就等于对这一类其它值的测试.因此,可以把全部输入数据合理划分为若干等价类,在每一个等价类中取一个数据作为测试的输入条件,就可以用少量代表性的测试数据.取得较好的测试结果.等价类划分可有两种不同的情况:有效等价类和无效等价类.

      2.边界值分析法
      边界值分析方法是对等价类划分方法的补充。测试工作经验告诉我,大量的错误是发生在输入或输出范围的边界上,而不是发生在输入输出范围的内部.因此针对各种边界情况设计测试用例,可以查出更多的错误.
      使用边界值分析方法设计测试用例,首先应确定边界情况.通常输入和输出等价类的边界,就是应着重测试的边界情况.应当选取正好等于,刚刚大于或刚刚小于边界的值作为测试数据,而不是选取等价类中的典型值或任意值作为测试数据.

    3.错误推测法
      基于经验和直觉推测程序中所有可能存在的各种错误, 从而有针对性的设计测试用例的方法.
      错误推测方法的基本思想: 列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据他们选择测试用例. 例如, 在单元测试时曾列出的许多在模块中常见的错误. 以前产品测试中曾经发现的错误等, 这些就是经验的总结. 还有, 输入数据和输出数据为0的情况. 输入表格为空格或输入表格只有一行. 这些都是容易发生错误的情况. 可选择这些情况下的例子作为测试用例.

    4.因果图方法
      前面介绍的等价类划分方法和边界值分析方法,都是着重考虑输入条件,但未考虑输入条件之间的联系, 相互组合等. 考虑输入条件之间的相互组合,可能会产生一些新的情况. 但要检查输入条件的组合不是一件容易的事情, 即使把所有输入条件划分成等价类,他们之间的组合情况也相当多. 因此必须考虑采用一种适合于描述对于多种条件的组合,相应产生多个动作的形式来考虑设计测试用例. 这就需要利用因果图(逻辑模型). 因果图方法最终生成的就是判定表. 它适合于检查程序输入条件的各种组合情况.

    09. 请以您以往的实际工作为例,10. 详细的描述一次测试用例设计的完整的过程。
      就说最近的这次网站功能的测试吧
      首先:得到相关文档(需求文档和设计文档),理解需求和设计设计思想后,想好测试策略(测试计划简单点就OK了),考虑到测试环境,测试用例,测试时间等问题。
      第二步:设计测试用例,测试策略是:把网站部分的功能点测试完,然后在进行系统测试(另外个模块呢有另一个测试人员负责,可以进行联调测试),网站模块的测试基本是功能测试和界面测试(用户并发的可能性很小,所以不考虑):这次的网站的输入数据呢是使用数据库中的某张表记录,如果表中某一数据记录中新加进来的(还没有被处理的,有个标志位),网站启动后会立刻去刷那张表,得到多条数据,然后在进行处理。处理过程中,会经历3个步骤,网站才算完成了它的任务。有3个步骤呢,就可以分别对  这3个步骤进行测试用例的设计,尽量覆盖到各种输入情况(包括数据库中的数据,用户的输入等),得出了差不多50个用例。界面测试,也就是用户看的到的地方,包括发送的邮件和用户填写资料的页面展示。
      第三步:搭建测试环境(为什么这个时候考虑测试环境呢?因为我对网站环境已经很熟了,只有有机器能空于下来做该功能测试就可以做了),因为网站本身的环境搭建和其他的系统有点不同,它需要的测试环境比较麻烦,需要web服务器(Apache,tomcat),不过这次需求呢,网站部分只用到了tomcat,所以只要有tomcat即可
      第四步:执行测试

    11. 您以往是否曾经从事过性能测试工作?如果有,12. 请尽可能的详细描述您以往的性能测试工作的完整过程。
      是的,曾经做过网站方面的性能测试,虽然做的时间并不久(2个月吧),当时呢,是有位网站性能测试经验非常丰富的前辈带着我一起做。
    性能测试类型包括负载测试,强度测试,容量测试等
      负载测试:负载测试是一种性能测试指数据在超负荷环境中运行,程序是否能够承担。
      强度测试: 强度测试是一种性能测试,他在系统资源特别低的情况下软件系统运行情况
      容量测试:确定系统可处理同时在线的最大用户数  
      在网站流量逐渐加大的情况下,开始考虑做性能测试了,首先要写好性能测试计划,根据运营数据得出流量最大的页面(如果是第一次的话,一般是首页,下载页,个人帐户页流量最大,而且以某种百分比),

      Web服务器指标指标:
      * Avg Rps: 平均每秒钟响应次数=总请求时间 / 秒数;
      * Successful Rounds:成功的请求;
      * Failed Rounds :失败的请求;
      * Successful Hits :成功的点击次数;
      * Failed Hits :失败的点击次数;
      * Hits Per Second :每秒点击次数;
      * Successful Hits Per Second :每秒成功的点击次数;
      * Failed Hits Per Second :每秒失败的点击次数;
      * Attempted Connections :尝试链接数;  

    13. 您在从事性能测试工作时,14. 是否使用过一些测试工具?如果有,15. 请试述该工具的工作原理,16. 并以一个具体的工作中的例子描述该工具是如何在实际工作中应用的。

    17. 您认为性能测试工作的目的是什么?做好性能测试工作的关键是什么?

    18. 在您以往的工作中,19. 一条软件缺陷(或者叫Bug)记录都包含了哪些内容?如何提交高质量的软件缺陷(Bug)记录?

    20. 您以往所从事的软件测试工作中,21. 是否使用了一些工具来进行软件缺陷(Bug)的管理?如果有,22. 请结合该工具描述软件缺陷(Bug)跟踪管理的流程。

    23. 您认为在测试人员同24. 开发人员的沟通过程中,25. 如何提高沟通的效率和改善沟通的效果?维持测试人员同26. 开发团队中其他成员良好的人际关系的关键是什么?

    27. 在您以往的测试工作中,28. 最让您感到不29. 满意或者不30. 堪回首的事情是什么?您是如何来对待这些事情的?

    31. 在即将完成这次笔试前,32. 您是否愿意谈一些自己在以往的学习和工作中获得的工作经验和心得体会?(可以包括软件测试、过程改进、软件开发或者与此无关的其他方面)

    33.        你对测试最大的兴趣在哪里?为什么?
      最大的兴趣就是测试有难度,有挑战性!做测试越久越能感觉到做好测试有多难。曾经在无忧测试网上看到一篇文章,是关于如何做好一名测试工程师。一共罗列了11,12点,有部分是和人的性格有关,有部分需要后天的努力。但除了性格有关的1,2点我没有把握,其他点我都很有信心做好它。
      刚开始进入测试行业时,对测试的认识是从无忧测试网上了解到的一些资料,当时是冲着做测试需要很多技能才能做的好,虽然入门容易,但做好很难,比开发更难,虽然当时我很想做开发(学校专业课我基本上不缺席,因为我喜欢我的专业),但看到测试比开发更难更有挑战性,想做好测试的意志就更坚定了。
      不到一年半的测试工作中,当时的感动和热情没有减退一点(即使环境问题以及自身经验,技术的不足,做测试的你一定也能理解)。
      我觉得做测试整个过程中有2点让我觉得很有难度(对我来说,有难度的东西我就非常感兴趣),第一是测试用例的设计,因为测试的精华就在测试用例的设计上了,要在版本出来之前,把用例写好,用什么测试方法写?(也就是测试计划或测试策略),如果你刚测试一个新任务时,你得花一定的时间去消化业务需求和技术基础,业务需求很好理解(多和产品经理和开发人员沟通就能达到目的),而技术基础可就没那么简单了,这需要你自觉的学习能力,比如说网站吧,最基本的技术知识你要知道网站内部是怎么运作的的,后台是怎么响应用户请求的?测试环境如何搭建?这些都需要最早的学好。至少在开始测试之前能做好基本的准备,可能会遇到什么难题?需求细节是不是没有确定好?这些问题都能在设计用例的时候发现。
      第二是发现BUG的时候了,这应该是测试人员最基本的任务了,一般按测试用例开始测试就能发现大部分的bug,还有一部分bug需要测试的过程中更了解所测版本的情况获得更多信息,补充测试用例,测试出bug。还有如何发现bug?这就需要在测试用例有效的情况下,通过细心和耐心去发现bug了,每个用例都有可能发现bug,每个地方都有可能出错,所以测试过程中思维要清晰(测试过程数据流及结果都得看仔细了,bug都在里面发现的)。如何描述bug也很有讲究,bug在什么情况下会产生,如果条件变化一点点,就不会有这个bug,以哪些最少的操作步骤就能重现这个bug,这个bug产生的规律是什么?如果你够厉害的话,可以帮开发人员初步定位问题。

    34. 你的测试职业发展是什么?
      测试经验越多,测试能力越高。所以我的职业发展是需要时间累积的,一步步向着高级测试工程师奔去。而且我也有初步的职业规划,前3年累积测试经验,按如何做好测试工程师的11,12点要求自己,不断的更新自己改正自己,做好测试任务。

    35. 你自认为测试的优势在哪里?
      优势在于我对测试坚定不移的信心和热情,虽然经验还不够,但测试需要的基本技能我有信心在工作中得以发挥。

    36. 你以前工作时的测试流程是什么?
      公司对测试流程没有规定如何做,但每个测试人员都有自己的一套测试流程。我说下我1年来不断改正(自己总结,吸取同行的方法)后的流程吧。需求评审(有开发人员,产品经理,测试人员,项目经理)->需求确定(出一份确定的需求文档)->开发设计文档(开发人员在开始写代码前就能输出设计文档)->想好测试策略,写出测试用例->发给开发人员和测试经理看看(非正式的评审用例)->接到测试版本->执行测试用例(中间可能会补充用例)->提交bug(有些bug需要开发人员的确定(严重级别的,或突然发现的在测试用例范围之外的,难以重现的),有些可以直接录制进TD)->开发人员修改(可以在测试过程中快速的修改)->回归测试(可能又会发现新问题,再按流程开始跑)。

    37. 当开发人员说不38. 是BUG时,39. 你如何应付?
      开发人员说不是bug,有2种情况,一是需求没有确定,所以我可以这么做,这个时候可以找来产品经理进行确认,需不需要改动,3方商量确定好后再看要不要改。二是这种情况不可能发生,所以不需要修改,这个时候,我可以先尽可能的说出是BUG的依据是什么?如果被用户发现或出了问题,会有什么不良结果?程序员可能会给你很多理由,你可以对他的解释进行反驳。如果还是不行,那我可以给这个问题提出来,跟开发经理和测试经理进行确认,如果要修改就改,如果不要修改就不改。其实有些真的不是bug,我也只是建议的方式写进TD中,如果开发人员不修改也没有大问题。如果确定是bug的话,一定要坚持自己的立场,让问题得到最后的确认。

    23.你为什么想离开目前的职务?
      因为公司运作情况并不理想,公司需要调整部门体系,公司考虑到缩减部门人员,所以大批量的裁员(有6,7个),这是我的第一份工作,对公司也有较深的感情,因为在这里我找到了职业理想(就是测试),所以公司需要精简人员,我自愿退出。虽然很舍不得,但我将会有新的发挥能力的舞台。

    24:你对我们公司了解有多少?

    25:你找工作时,最重要的考虑因素为何?
      工作的性质和内容是否能让我发挥所长,并不断成长。

    26:为什么我们应该录取你?
      您可以由我过去的工作表现所呈现的客观数据,明显地看出我全力以赴的工作态度。

    27:请谈谈你个人的最大特色。
      我的坚持度很高,事情没有做到一个令人满意的结果,绝不罢手。

    28.白箱测试和黑箱测试是什么?什么是回归测试?

    29。单元测试、集成测试、系统测试的侧重点是什么?

    30。设计用例的方法、依据有那些?

    31。一个测试工程师应具备那些素质和技能?

    32.集成测试通常都有那些策略?

    33.你用过的测试工具的主要功能、性能及其他?

    34.一个缺陷测试报告的组成

    35.基于WEB信息管理系统测试时应考虑的因素有哪些?

    36.软件测试项目从什么时候开始,?为什么?

    37.需求测试注意事项有哪些?

    38.简述一下缺陷的生命周期

    39.测试分析测试用例注意(事项)?
      你在你所在的公司是怎么开展测试工作的?是如何组织的?
      你认为理想的测试流程是什么样子?
      你是怎样工作的?
      软件测试活动的生命周期是什么?
      请画出软件测试活动的流程图?
      针对缺陷采取怎样管理措施?
      什么是测试评估?测试评估的范围是什么?
      如果能够执行完美的黑盒测试,还需要进行白盒测试吗?为什么?
      测试结束的标准是什么?
      软件验收测试除了alpha,beta测试以外,还有哪一种?
      做测试多久了?
      以前做过哪些项目?
      你们以前测试的流程是怎样的?
      <答:测试计划-测试用例设计-测试执行-测试分析报告>
      用过哪些测试工具?
      为什么选择测试这行?
      <答:它是一个新兴的行业,有发展潜力,而且很锻炼人,需要掌握更多的技能,比做开发要更难>
      为什么值得他们公司雇用?
      如果我雇用你,你能给部门带来什么贡献?
      如何从工作中看出你是个自动自觉的人
      你的工作通常能在时限内完成吗.(我想问一下就是她问这个问题的动机是什么)
      通常你对于别人批评你会有什么样的反应
      如果明知这样做不对,你还会依主管的指过去做吗
      如果你接到一个客户抱怨的电话,你确知无法解决他的问题,你会怎么处理
      你觉得什么样的人最难相处
      为什么值得他们公司雇用?
        帮助公司提高软件质量和测试部门的技术水平
      如果我雇用你,你能给部门带来什么贡献?
        分享我的测试经验和测试技能,提高测试部门技术水平
      如何从工作中看出你是个自动自觉的人
               自动自觉范围太广
            1. 工作成果
            2. 工作质量 
      你的工作通常能在时限内完成吗.(我想问一下就是她问这个问题的动机是什么)
        在有足够的资源和合理的工作量的情况下,完全可以按时完成,并能比一般人做的更好
      通常你对于别人批评你会有什么样的反应
        有错即改,无措勉之

      如果明知这样做不对,你还会依主管的指过去做吗
        在公司内部下级是否有申诉渠道?

      如果你接到一个客户抱怨的电话,你确知无法解决他的问题,你会怎么处理
        为什么抱怨?是怎么样的问题?
        如果是客服问题,提交客服部门解决
        如果是质量问题,分析原因,下一版本改进
      你觉得什么样的人最难相处
        自以为是的人

      什么叫单元测试?
        请就软件测试人员应该具备什么样的基本素质说说你的看法。

      请就如何在开发中进行软件质量控制说说你的看法
       简述软件测试的意义,以及软件测试的分类

    1、功能测试,性能测试,界面测试,安全测试(可以简单点,比如只涉及到COOKIES里的内容),压力测试(商业性质的网站) 等等,B/S软件也要根据其具体功能采用不同的测试策略。
    2、态度、责任心、自信、敏锐的观察力、良好的发散思维
    3、先设计后开发模式,加强单元测试,加强代码走查,有一套完整的白盒测试方法。关键是加强开发人员的质量意识,增进程序员向工程师水平发展。
    4、意义嘛,就自己想吧。软件测试的分类,这个很多人都按各种方法去分。无明确答案给你。

    对测试的理解——基本的测试知识,对测试是否认可? 75。
          3、谈一谈过去自己的工作——了解经历、提供进一步提问的素材,表达能力  
    测试技能
    测试设计的方法并举例说明——测试技术的使用
    测试工具——熟悉程度,能否与当前工作匹配?
    如何做计划?如何跟踪计划?——日常工作能力
    如果开发人员提供的版本不满足测试的条件,如何做?——与开发人员协作的能力
    熟悉unix系统、oracle数据库吗?——是否具备系统知识
    做过开发吗?写过哪些代码?——开发技能
    阅读英语文章,给出理解说明?——部分英语能力
    文档的意义——是否善于思考?(最简单的概念,不同层次的理解)
    假如进入我们公司,对我们哪些方面会有帮助?——讲讲自己的特长
    随便找一件物品,让其测试——测试的实际操作能力
    软件测试的方法有?
    软件测试的过程?
    有一个新的软件,假如你是测试工程师,该如何做?

    软件测试分哪两种方法?分别适合什么情况?
    2。一套完整的测试应该由哪些阶段组成?分别阐述一下各个阶段。
    3。软件测试的类型有那些?分别比较这些不同的测试类型的区别与联系。
    4。测试用例通常包括那些内容?着重阐述编制测试用例的具体做法
    5。在分别测试winform的C/S结构与测试WEB结构的软件是,应该采取什么样的方法分别测试?他们存在什么样的区别与联系?
    6。在测试winform的C/S结构软件时,发现这个软件的运行速度很慢,您会认为是什么原因?您会采取哪些方法去检查这个原因?
    7。描述使用bugzilla缺陷管理工具对软件缺陷(BUG)跟踪的管理的流程
    你在五年内的个人目标和职业目标分别是什么?
      分析这个问题是用来了解你的计划能力的,通过这个问题,面试人同时还可以知道你的目标是否符合企业对你的安排。
      错误回答我想在将来的某个时候考虑这个问题。如今企业的领导者更换频繁,我认为做太多的个人计划是荒谬可笑的,不是吗?
      评论这种回答属于令人反感的一类。首先,当有人想了解你的目标时,"将来的某个时候"这种通俗说法并不奏效。其次,认为企业很脆弱,领导者更换频繁,这种说法毫无疑问会令人反感,而且也是不合理的。最后,认为做计划可笑,看不起这个问题,而且反问面试人,这些都注定了这样的求职者最终会失败。
      正确回答从现在起的五年之内,我希望能够在一个很好的职位上待几年,而且最好有一次晋升,然后就期待着下一步。不管是向上提升,还是在企业内横向调动,对我个人来说,我希望找到一家企业——一家愿意做相互投入的企业——待上一段时间。
      评论这个问题没有回答得过分具体(那样可能会产生漏洞),而且它表明你有雄心,并且思考过在企业中的成长方式。通过表达横向调动和向上提升的愿望,表明你是一个有灵活性的人。
     问题23 你怎样做出自己的职业选择?
      分析 面试人提出这个问题是为了了解求职者的动机,看看他(她)应聘这份工作是否有什么历史渊源,是否有职业规划,是不是仅仅在漫无目的地申请很多工作。
      错误回答 我一直都想在企业界工作。自孩提时代起,我就梦想自己至少也要成为大企业的副总裁。
      评论 除了难以令人相信之外,这种回答还存在一个问题:它表明求职者会对副总裁以下的职位不感兴趣。
      正确回答 在上大学四年级前的那个夏天,我决定集中精力在某一领域谋求发展。尽管我是学商业的,但是我不知道自己最终会从事哪一行业的工作。我花了一定的时间考虑自己的目标,想清楚了自己擅长做的事情以及想从工作中得到的东西,最后我得出了一个坚定的结论,那就是这个行业是最适合我的。
      评论 这种回答表明,求职者认真地做过一些计划,缩小了自己的关注点,而且也认准了前进的方向。这种回答还表明,求职者理解个人职业规划的重要性,并且有能力做出认真的个人决策。
    1. 你都用什么测试方法
    2.怎么编写案例
    3.怎么才能够全面的测试到每一个点
    1. 你都用什么测试方法
    针对不同的产品或者系统或者模块,有不同的测试方法。总体而言有白盒测试和黑盒测试。
    2.怎么编写案例
    案例的编写与测试阶段的定义有很大的关系。系统测试和unit测试的案例可能不同。总体而言测试案例根据系统的需求而定。
    3.怎么才能够全面的测试到每一个点
    测试的全面性主要需要在设计测试计划的时候考虑,从测试策略,产品需求等等多个角度考虑从而定义全部的测试点。
    1、谈谈软件测试技术,以及如何提高
    2、谈谈软件测试职业发展,以及个人的打算
    3、谈谈软件测试在企业的地位,也可以结合软件生命周期来谈
    有可能清晰的思路比确切的答案更重要
    在这里,主要说下笔试和面试的问题,希望大家共同参考。
           1,一般公司里实际的软件测试流程是什么样的?你们公司又是怎样的?
           2,软件工程师要具有那些素质?
           3,你会哪些测试工具?怎么操作?
           4,你能不能说下你的3到5年的职业计划(规划)
           5,你觉得你来应聘有那些优势?
    其余的还好说,但就第4个问题,我感到不好说哦!希望大家给个意见
    第一关:首先要自我介绍,自己的性格怎么样,目前的工作经历积累了一些什么经验取得了些什么值得一说的成果。然后要说说对软件测试怎么看?还有对于软件测试有什么自己的想法。为什么会想到要做这行(因为我的简历上的工作经历没有关于测试方面的)。哦,还有期望薪资。
    第二关:认为软件测试人员所要具备的基本素质,如果遇到问题会怎样处理,如果得不到研发人员的配合(就是研发说这个不是问题)你又会怎么处理?然后就是一些基本概念,比如软件测试的流程有哪些?如果我上任了,首先会怎么开始自己的工作计划。
    (前两关通过了后面这个就好过多了)
    第三关:像我介绍了一下公司的情况,告诉我主要针对什么内容的测试,会不会使用数据库。告诉我大概要做哪些内容,详细的可以上岗以后慢慢熟悉。
    大概就这么多了,这对没有经过这一关的不知道有没有帮助,仅供参考吧
    我觉得就像李波说的,关键是要给对方留下好印象:)

    面试官最后会问你有什么问题要问吗。作为应聘者的你一般不要说没问题问,这会给面试官留下你不太重视这份工作的坏印象。所以如果你想得到这份工作的话应该抓住这最后的表现自己的机会:
    你可以问:
    1.           贵公司近期和远期的发展目标是什么?
    2.           贵公司的主要竞争对手有哪些?
    3.           贵公司有多少开发人员有多少测试人员?
    4.           贵公司又进一步扩充测试人员的计划吗?
    5.           如果我有幸能进入贵公司的话,我有怎么样的发展?
    6.           测试人员的沟通能力很重要,贵公司有规范的沟通渠道吗?
    7.           请介绍一下贵公司的福利情况。
    8.           请问我什么时候能知道结果?

  • 手机常用快捷指令

    TT-Testing 发布于 2008-11-25 21:37:26

    手机常用快捷指令 

    呼叫转移设置 

    开启所有条件呼叫转移:**004*转移目标号码#@

    取消所有条件呼叫转移:##004#@

    取消所有呼叫转移:##002#@ 

    转接所有来电: 

    设置转接所有来电至:**21*转移目标号码#@

    取消转接所有来电功能:##21#@

    查询转接所有来电功能当前状态及设置:*#21#@ 

    无人接听时转接来电: 

    设置30秒或最长时限无人接听时转接来电至:**61*转接目标号码#@

    设置N秒无人接听时转接来电至:

     **61*转接目标号码**N#@N可以是51015202530 

    取消无人接听时转接来电功能:##61#@

    查询状态:*#61#@ 

    无网络或关机时转接来电:

    设置无网络或关机时转接来电至:**62*转移目标号码#@

    取消无网络或关机时转接来电功能:##62#@ 

    查询状态:*#62#@ 

    占线时转接来电:

    设置占线时转接来电至:**67*转移目标号码#@ 

    取消占线时转接来电功能:##67#@ 

    查询状态:*#67#@ 

    呼叫限制设置

    这组功能的实现需要网络密码,即我们通常所说的PIN码。具体密码要向当地运营商询问。

    禁止所有拨入、拨出电话: 

    开启:**330*网络密码#@ 

    关闭:##330*网络密码#@ 

    查询:*#330#@ 

    禁止所有拨出电话: 

    开启:**33*网络密码#@**333*网络密码#@

    关闭:##33*网络密码@##333*网络密码#@

    查询:*#33#@*#333#@ 

    禁拨国际长途: 

    开启:**331*网络密码#@ 

    关闭:##331*网络密码#@  

    查询:*#331#@   

    禁止所有拨入电话:  

    开启:**35*网络密码#@**353*网络密码#@  

    关闭:##35*网络密码###353*网络密码#@   

    查询:*#35#@*#353#@   

    国际漫游时禁止所有拨入:  

    开启:**351*网络密码#@   

    关闭:##351*网络密码#@   

    查询:*#351#@   

    呼叫等待设置   

    开启呼叫等待:*43#@   

    关闭呼叫等待:#43#@  

    查询状态:*#43#@   

    密码功能设置   

    修改网络限制/禁拨密码:

    **03*330*旧网络密码*新网络密码*新网络密码#@   

    修改PIN码: 

    **04*PIN*PIN*PIN#@   

    修改PIN2

    **042*PIN2*PIN2*PIN2#@   

    PUK重置PIN,可在PIN被锁时启用:  

    **05*PUK*PIN*PIN#@   

    PUK2重置PIN2,可在PIN2被锁时启用:  

    **052*PUK2*PIN2*PIN2#@   

    注:1@表示发射键(即我们输完电话号码后确认呼叫开始的键); 
    2
    、以上各功能需到营业厅开通相应服务后才可使用;

  • 软件评测师考试大纲

    zfh1005 发布于 2008-11-24 22:44:42Top 1 Digest 1

    软件评测师考试大纲

    一、考试说明

    1.考试要求 

    (1)熟悉计算机基础知识;

    (2)熟悉操作系统、数据库、中间件、程序设计语言基础知识;

    (3)熟悉计算机网络基础知识;

    (4)熟悉软件工程知识,理解软件开发方法及过程;

    (5)熟悉软件质量及软件质量管理基础知识;

    (6)熟悉软件测试标准;

    (7)掌握软件测试技术及方法;

    (8)掌握软件测试项目管理知识;

    (9)掌握C语言及C++或Java语言程序设计技术;

    (10)了解信息化及信息安全基础知识;

    (11)熟悉知识产权相关法律、法规;

    (12)正确阅读并理解相关领域的英文资料。

    2.通过本考试的合格人员能在掌握软件工程与软件测试知识基础上,运用软件测试管理办法、软件测试策略、软件测试技术,独立承担软件测试项目;具有工程师的实际工作能力和业务水平。

    3.本考试设置的科目包括:

    (1)软件工程与软件测试基础知识,考试时间为150分钟,笔试,选择题;

    (2)软件测试应用技术,考试时间为150分钟,笔试,问答题。

     

     

    二、考试范围

     

    考试科目1:软件工程与软件测试基础知识 

    1.计算机系统基础知识

    1.1 计算机系统构成及硬件基础知识

    ·计算机系统的构成

    ·处理机

    ·基本输入输出设备

    ·存储系统

    1.2 操作系统基础知识

    ·操作系统的中断控制、进程管理、线程管理

    ·处理机管理、存储管理、设备管理、文件管理、作业管理

    ·网络操作系统和嵌入式操作系统基础知识

    ·操作系统的配置

    1.3 数据库基础知识

    ·数据库基本原理

    ·数据库管理系统的功能和特征

    ·数据库语言与编程

    1.4 中间件基础知识

    1.5 计算机网络基础知识

    ·网络分类、体系结构与网络协议

    ·常用网络设备

    ·Internet基础知识及其应用

    ·网络管理

    1.6 程序设计语言知识

    ·汇编、编译、解释系统的基础知识

    ·程序设计语言的基本成分(数据、运算、控制和传输、过程(函数)调用)

    ·面向对象程序设计

    ·各类程序设计语言的主要特点和适用情况

    ·C语言以及C++(或Java)语言程序设计基础知识

    2.标准化基础知识

    ·标准化的概念(标准化的意义、标准化的发展、标准化机构)

    ·标准的层次(国际标准、国家标准、行业标准、企业标准)

    ·标准的类别及生命周期

    3.信息安全知识

    ·信息安全基本概念

    ·计算机病毒及防范

    ·网络入侵手段及防范

    ·加密与解密机制

    4.信息化基础知识

    ·信息化相关概念

    ·与知识产权相关的法律、法规

    ·信息网络系统、信息应用系统、信息资源系统基础知识

    5.软件工程知识

    5.1 软件工程基础

    ·软件工程概念

    ·需求分析

    ·软件系统设计

    ·软件组件设计

    ·软件编码

    ·软件测试

    ·软件维护

    5.2 软件开发方法及过程

    ·结构化开发方法

    ·面向对象开发方法

    ·瀑布模型

    ·快速原型模型

    ·螺旋模型 

    5.3 软件质量管理

    ·软件质量及软件质量管理概念

    ·软件质量管理体系

    ·软件质量管理的目标、内容、方法和技术

    5.4 软件过程管理

    ·软件过程管理概念

    ·软件过程改进

    ·软件能力成熟度模型

    5.5 软件配置管理

    ·软件配置管理的意义

    ·软件配置管理的过程、方法和技术

    5.6软件开发风险基础知识

    ·风险管理

    ·风险防范及应对

    5.7 软件工程有关的标准

    ·软件工程术语

    ·计算机软件开发规范

    ·计算机软件产品开发文件编制指南

    ·计算机软件需求规范说明编制指南

    ·计算机软件测试文件编制规范

    ·计算机软件配置管理计划规范

    ·计算机软件质量保证计划规范

    ·数据流图、程序流程图、系统流程图、程序网络图和系统资源图的文件编制符号及约定

    6.软件评测师职业素质要求

    ·软件评测师职业特点与岗位职责

    ·软件评测师行为准则与职业道德要求

    ·软件评测师的能力要求

    7.软件评测知识

    7.1 软件测试基本概念

    ·软件质量与软件测试

    ·软件测试定义

    ·软件测试目的

    ·软件测试原则

    ·软件测试对象

    7.2 软件测试过程模型

    ·V模型

    ·W模型

    ·H模型

    ·测试模型的使用

    7.3 软件测试类型

    ·单元测试、集成测试、系统测试

    ·确认测试、验收测试 

    ·开发方测试、用户测试、第三方测试

    ·动态测试、静态测试

    ·白盒测试、黑盒测试、灰盒测试

    7.4 软件问题分类

    ·软件错误

    ·软件缺陷

    ·软件故障

    ·软件失效

    7.5 测试标准

    <?xml:namespace prefix=st1 ns="urn:schemas-microsoft-com:office:smarttags" />7.5.1 GB/T 16260.1 – 2003 软件工程 产品质量 第1部分:质量模型

    7.5.2 GB/T 18905.1 – 2002 软件工程 产品评价 第1部分:概述

    7.5.3 GB/T 18905.5 – 2002 软件工程 产品评价 第5部分:评价者用的过程

    8.软件评测现状与发展

    ·国内外现状

    ·软件评测发展趋势

    9.专业英语

    ·正确阅读并理解相关领域的英文资料

     

     

    考试科目2:软件测试应用技术

    1. 软件生命周期测试策略

    1.1 设计阶段的评审

    ·需求评审

    ·设计评审

    ·测试计划与设计

    1.2 开发与运行阶段的测试

    ·单元测试

    ·集成测试

    ·系统(确认)测试

    ·验收测试

    2. 测试用例设计方法

    2.1 白盒测试设计

    ·白盒测试基本技术

    ·白盒测试方法

    2.2 黑盒测试用例设计

    ·测试用例设计方法

    ·测试用例的编写

    2.3 面向对象测试用例设计

    2.4 测试方法选择的策略

    ·黑盒测试方法选择策略

    ·白盒测试方法选择策略

    ·面向对象软件的测试策略

    3. 软件测试技术与应用

    3.1 软件自动化测试

    ·软件自动化测试基本概念

    ·选择自动化测试工具

    ·功能自动化测试

    ·负载压力自动化测试

    3.2 面向对象软件的测试

    ·面向对象测试模型

    ·面向对象分析的测试

    ·面向对象设计的测试

    ·面向对象编程的测试

    ·面向对象的单元测试

    ·面向对象的集成测试

    ·面向对象的系统测试

    3.3 负载压力测试

    ·负载压力测试基本概念

    ·负载压力测试解决方案

    ·负载压力测试指标分析

    ·负载压力测试实施

    3.4 Web应用测试

    ·Web应用的测试策略

    ·Web应用设计测试

    ·Web应用开发测试

    ·Web应用运行测试

    3.5 网络测试

    ·网络系统全生命周期测试策略

    ·网络仿真技术

    ·网络性能测试

    ·网络应用测试

    3.6 安全测试

    ·测试内容

    ·测试策略

    ·测试方法

    3.7 兼容性测试

    ·硬件兼容性测试

    ·软件兼容性测试

    ·数据兼容性测试

    ·新旧系统数据迁移测试

    ·平台软件测试

    3.8 易用性测试

    ·功能易用性测试

    ·用户界面测试

    3.9 文档测试

    ·文档测试的范围

    ·用户文档的内容

    ·用户文档测试的要点

    ·用户手册的测试

    ·在线帮助的测试

    4. 测试项目管理

    ·测试过程的特性与要求

    ·软件测试与配置管理

    ·测试的组织与人员

  • Linux命令大全之一-------档案目录管理

    lihang617 发布于 2008-09-25 22:55:39

    Linux命令大全—档案目录管理



    名称:cat 
    使用权限:所有使用者 
    使用方式:cat [-AbeEnstTuv] [--help] [--version] fileName 
    说明:把档案串连接后传到基本输出(萤幕或加 > fileName 到另一个档案) 
    参数: 
    -n 或 --number 由 1 开始对所有输出的行数编号 
    -b 或 --number-nonblank 和 -n 相似,只不过对于空白行不编号 
    -s 或 --squeeze-blank 当遇到有连续两行以上的空白行,就代换为一行的空白行 
    -v 或 --show-nonprinting 
    范例: 
    cat -n textfile1 > textfile2 把 textfile1 的档案内容加上行号后输入 textfile2 这个档案里 
    cat  -b textfile1 textfile2 >> textfile3 把  textfile1 和 textfile2 的档案内容加上行号(空白行不加)之后将内容附加到  textfile3 里。 
    范例: 
    把 textfile1 的档案内容加上行号后输入 textfile2 这个档案里 
    cat -n textfile1 > textfile2 
    把 textfile1 和 textfile2 的档案内容加上行号(空白行不加)之后将内容附加到 textfile3 里。 
    cat -b textfile1 textfile2 >> textfile3 
    cat /dev/null > /etc/test.txt 此为清空/etc/test.txt档案内容 
    cat 也可以用来制作 image file。例如要制作软碟的 image file,将软碟放好后打 
    cat /dev/fd0 > OUTFILE 
    相反的,如果想把 image file 写到软碟,请打 
    cat IMG_FILE > /dev/fd0 
    注: 
    1. OUTFILE 指输出的 image 档名。 
    2. IMG_FILE 指 image file。 
    3. 若从 image file 写回 device 时,device 容量需与相当。 
    4. 通常用在制作开机磁片。
    名称 : cd 
    使用权限 : 所有使用者 
    使用方式 : cd [dirName] 
    说明 : 变换工作目录至 dirName。 其中 dirName 表示法可为绝对路径或相对路径。若目录名称省略,则变换至使用者的 home directory (也就是刚  login 时所在的目录)。 
    另外,"~" 也表示为 home directory 的意思,"." 则是表示目前所在的目录,".." 则表示目前目录位置的上一层目录。 
    范例 : 跳到 /usr/bin/ : 
    cd /usr/bin 
    跳到自己的 home directory : 
    cd ~ 
    跳到目前目录的上上两层 : 
    cd ../.. 
    cd - 返回进入当前目录前所在目录

    指令名称 : chmod 
    使用权限 : 所有使用者 
    使用方式 : chmod [-cfvR] [--help] [--version] mode file... 
    说明 : Linux/Unix 的档案调用权限分为三级 : 档案拥有者、群组、其他。利用 chmod 可以藉以控制档案如何被他人所调用。 
    参数 : 
    mode : 权限设定字串,格式如下 : [ugoa...][[+-=][rwxX]...][,...],其中 
    u 表示该档案的拥有者,g 表示与该档案的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。 
    + 表示增加权限、- 表示取消权限、= 表示唯一设定权限。 
    r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该档案是个子目录或者该档案已经被设定过为可执行。 
    -c : 若该档案权限确实已经更改,才显示其更改动作 
    -f : 若该档案权限无法被更改也不要显示错误讯息 
    -v : 显示权限变更的详细资料 
    -R : 对目前目录下的所有档案与子目录进行相同的权限变更(即以递回的方式逐个变更) 
    --help : 显示辅助说明 
    --version : 显示版本 
    范例 :将档案 file1.txt 设为所有人皆可读取 : 
    chmod ugo+r file1.txt 
    将档案 file1.txt 设为所有人皆可读取 : 
    chmod a+r file1.txt 
    将档案 file1.txt 与 file2.txt 设为该档案拥有者,与其所属同一个群体者可写入,但其他以外的人则不可写入 : 
    chmod ug+w,o-w file1.txt file2.txt 
    将 ex1.py 设定为只有该档案拥有者可以执行 : 
    chmod u+x ex1.py 
    将目前目录下的所有档案与子目录皆设为任何人可读取 : 
    chmod -R a+r * 
    此外chmod也可以用数字来表示权限如 chmod 777 file 
    语法为:chmod abc file 
    其中a,b,c各为一个数字,分别表示User、Group、及Other的权限。 
    r=4,w=2,x=1 
    若要rwx属性则4+2+1=7; 
    若要rw-属性则4+2=6; 
    若要r-x属性则4+1=7。 
    范例: 
    chmod a=rwx file 
    和 
    chmod 777 file 
    效果相同 
    chmod ug=rwx,o=x file 
    和 
    chmod 771 file 
    效果相同 
    若用chmod 4755 filename可使此程序具有root的权限

    指令名称 : chown 
    使用权限 : root 
    使用方式 : chmod [-cfhvR] [--help] [--version] user[:group] file... 
    说明 : Linux/Unix 是多人多工操作系统,所有的档案皆有拥有者。利用 chown 可以将档案的拥有者加以改变。一般来说,这个指令只有是由系统管理者(root)所使用,一般使用者没有权限可以改变别人的档案拥有者,也没有权限可以自己的档案拥有者改设为别人。只有系统管理者(root)才有这样的权限。 
    参数 : 
    user : 新的档案拥有者的使用者 
    IDgroup : 新的档案拥有者的使用者群体(group) 
    -c : 若该档案拥有者确实已经更改,才显示其更改动作 
    -f : 若该档案拥有者无法被更改也不要显示错误讯息 
    -h : 只对于连结(link)进行变更,而非该 link 真正指向的档案 
    -v : 显示拥有者变更的详细资料 
    -R : 对目前目录下的所有档案与子目录进行相同的拥有者变更(即以递回的方式逐个变更) 
    --help : 显示辅助说明 
    --version : 显示版本 
    范例 : 
    将档案 file1.txt 的拥有者设为 users 群体的使用者 jessie : 
    chown jessie:users file1.txt 
    将目前目录下的所有档案与子目录的拥有者皆设为 users 群体的使用者 lamport : 
    chmod -R lamport:users *

    名称:cp 

    使用权限:所有使用者 

    使用方式: 

    cp [options] source dest 
    cp [options] source... directory 

    说明:将一个档案拷贝至另一档案,或将数个档案拷贝至另一目录。 

    参数: 

    -a 尽可能将档案状态、权限等资料都照原状予以复制。 
    -r 若 source 中含有目录名,则将目录下之档案亦皆依序拷贝至目的地。 
    -f 若目的地已经有相同档名的档案存在,则在复制前先予以删除再行复制。 
    范例: 
    将档案 aaa 复制(已存在),并命名为 bbb : 
    cp aaa bbb 

    将所有的C语言程序拷贝至 Finished 子目录中 : 
    cp *.c Finished

    名称:cut 
    使用权限:所有使用者 
    用法:cut -cnum1-num2 filename 
    说明:显示每行从开头算起 num1 到 num2 的文字。 
    范例: 

    shell>> cat example 
    test2 
    this is test1 
    shell>> cut -c0-6 example ## print 开头算起前 6 个字元 
    test2 
    this i 

    cut其实很有用 
    -c m-n 表示显示每一行的第m个字元到第n个字元。例如: 
    ---------file----------- 
    liubi 23 14000 
    ---------file----------- 
    # cut -c 3-9,12-20 file 
    liubi 14000 

    -f m-n 表示显示第m栏到第n栏(使用tab分隔)。例如: 
    ---------file----------- 
    liubi 23 14000 
    ---------file----------- 
    # cut -f 1,3 file 
    liubi 14000

    名称 : find 
    用法 : find 
    使用说明 : 
    将档案系统内符合 expression 的档案列出来。你可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。 
    find  根据下列规则判断 path 和 expression,在命令列上第一个 - ( )  , ! 之前的部份为 path,之后的是 expression。如果  path 是空字串则使用目前路径,如果 expression 是空字串则使用 -print 为预设 expression。 
    expression 中可使用的选项有二三十个之多,在此只介绍最常用的部份。 
    -mount, -xdev : 只检查和指定目录在同一个档案系统下的档案,避免列出其它档案系统中的档案 
    -amin n : 在过去 n 分钟内被读取过 
    -anewer file : 比档案 file 更晚被读取过的档案 
    -atime n : 在过去 n 天过读取过的档案 
    -cmin n : 在过去 n 分钟内被修改过 
    -cnewer file :比档案 file 更新的档案 
    -ctime n : 在过去 n 天过修改过的档案 
    -empty :  空的档案-gid n or -group name :  gid 是 n 或是 group 名称是 name 
    -ipath p, -path p : 路径名称符合 p 的档案,ipath 会忽略大小写 
    -name name, -iname name : 档案名称符合 name 的档案。iname 会忽略大小写 
    -size  n : 档案大小 是 n 单位,b 代表 512 位元组的区块, c 表示字元数,k 表示 kilo bytes,w 是二个位元组。-type  c : 档案类型是 c 的档案。 
    d: 目录 
    c: 字型装置档案 
    b: 区块装置档案 
    p: 具名贮列 
    f: 一般档案 
    l: 符号连结 
    s: socket 
    -pid n : process id 是 n 的档案 
    你可以使用 ( ) 将运算式分隔,并使用下列运算。 
    exp1 -and exp2 
    ! expr 
    -not expr 
    exp1 -or exp2 
    exp1, exp2 
    范例: 
    将目前目录及其子目录下所有延伸档名是 c 的档案列出来。 
    # find . -name "*.c" 
    将目前目录其其下子目录中所有一般档案列出 
    # find . -ftype f 
    将目前目录及其子目录下所有最近 20 分钟内更新过的档案列出 
    # find . -ctime -20 
    find . -name "*" -exec grep xxx {}  -print |morexxx为你想要找的字符串

    名称:less 

    使用权限:所有使用者 

    使用方式: 

    less [Option] filename 

    说明: 
    less  的作用与 more 十分相似,都可以用来浏览文字档案的内容,不同的是 less 允许使用者往回卷动以浏览已经看过的部份,同时因为 less 并未在一开始就读入整个档案,因此在遇上大型档案的开启时,会比一般的文书编辑器(如  vi)来的快速。 

    指令名称 : ln 
    使用权限 : 所有使用者 
    使用方式 : ln [options] source dist,其中 option 的格式为 : 
    [-bdfinsvF] [-S backup-suffix] [-V {numbered,existing,simple}] 
    [--help] [--version] [--] 
    说明 : Linux/Unix 档案系统中,有所谓的连结(link),我们可以将其视为档案的别名,而连结又可分为两种  : 硬连结(hard link)与软连结(symbolic link),硬连结的意思是一个档案可以有多个名称,而软连结的方式则是产生一个特殊的档案,该档案的内容是指向另一个档案的位置。硬连结是存在同一个档案系统中,而软连结却可以跨越不同的档案系统。 
    ln source dist 是产生一个连结(dist)到 source,至于使用硬连结或软链结则由参数决定。 
    不论是硬连结或软链结都不会将原本的档案复制一份,只会占用非常少量的磁碟空间。 
    参数 : 
    -f :  链结时先将与 dist 同档名的档案删除-d : 允许系统管理者硬链结自己的目录- i : 在删除与 dist 同档名的档案时先进行询问-n : 在进行软连结时,将  dist 视为一般的档案-s : 进行软链结(symbolic link)-v :  在连结之前显示其档名-b : 将在链结时会被覆写或删除的档案进行备份-S SUFFIX :  将备份的档案都加上 SUFFIX 的字尾-V METHOD : 指定备份的方式-- help : 显示辅助说明--version : 显示版本 
    范例 : 
    将档案 yy 产生一个 symbolic link : zz 
    ln -s yy zz 
    将档案 yy 产生一个 hard link : zz 
    ln yy xx

    名称:locate 
    使用权限:所有使用者 
    使用方式: locate [-q] [-d ] [--database= ] 
    locate [-r ] [--regexp= ] 
    locate [-qv] [-o ] [--output= ] 
    locate [-e ] [-f ] <[-l ] [-c] 
    <[-U ] [-u]> 
    locate [-Vh] [--version] [--help] 
    说明: 
    locate 让使用者可以很快速的搜寻档案系统内是否有指定的档案。其方法是先建立一个包括系统内所有档案名称及路径的数据库,之后当寻找时就只需查询这个数据库,而不必实际深入档案系统之中了。 
    在一般的 distribution 之中,数据库的建立都被放在 contab 中自动执行。一般使用者在使用时只要用 
    # locate your_file_name的型式就可以了。 

    参数: 
    -u 
    -U 

    建立数据库,-u 会由根目录开始,-U 则可以指定开始的位置。 
    -e 

    将 排除在寻找的范围之外。 
    -l 
    如果 是 1.则启动安全模式。在安全模式下,使用者不会看到权限无法看到的档案。这会始速度减慢,因为 locate 必须至实际的档案系统中取得档案的权限资料。 
    -f 
    将特定的档案系统排除在外,例如我们没有到理要把 proc 档案系统中的档案放在数据库中。 
    -q 
    安静模式,不会显示任何错误讯息。 
    -n 
    至多显示 个输出。 
    -r 
    使用正规运算式 做寻找的条件。 
    -o 
    指定数据库存的名称。 
    -d 

    指定数据库的路径 
    -h 
    显示辅助讯息 
    -v 
    显示更多的讯息 
    -V 
    显示程序的版本讯息 范例: 
    locate chdrv : 寻找所有叫 chdrv 的档案 
    locate -n 100 a.out : 寻找所有叫 a.out 的档案,但最多只显示 100 个 
    locate -u : 建立数据库 
    locate 命令可以在搜寻数据库时快速找到档案,数据库由updatedb程序来更新,updatedb是由cron daemon周期性建立的, locate命令在搜寻数据库时比由整个由硬盘资料来搜寻资料来得快,但较差劲的是locate所找到的档案若是最近才建立或刚更名的,可能会找不到,在内定值中,updatedb每天会跑一次,可以由修改crontab来更新设定值。(etc/crontab) 
    locate指定用在搜寻符合条件的档案,它会去储存档案与目录名称的数据库内,寻找合乎范本样式条件的档案或目录录,可以使用特殊字元(如”*”或”?”等)来指定范本样式,如指定范本为kcpa*ner, locate会找出所有起始字串为kcpa且结尾为ner的档案或目录,如名称为kcpartner若目录录名称为kcpa_ner则会列出该目录下包括子目录在内的所有档案。 
    locate指令和find找寻档案的功能类似,但 locate是透过update程序将硬盘中的所有档案和目录资料先建立一个索引数据库,在执行loacte时直接找该索引,查询速度会较快,索引数据库一般是由操作系统管理,但也可以直接下达update强迫系统立即修改索引数据库。 
    不过第一次在执行update後再使用 locate寻找档案常会失败,此时就要执行slocate ˉu该命令(也可执行updatedb指令,其效果相同)来更新slocate数据库,该命令会在/usr/sbin下产生slocate执行档,再由locate到此数据库寻找所要找的资料。

    名称 : ls 
    使用权限 : 所有使用者 
    使用方式 : ls [-alrtAFR] [name...] 
    说明 : 显示指定工作目录下之内容(列出目前工作目录所含之档案及子目录)。 
    参数 : 
    -a 显示所有档案及目录 (ls内定将档案名或目录名称开头为"."的视为隐藏档,不会列出) 
    -l 除档案名称外,亦将档案型态、权限、拥有者、档案大小等资讯详细列出 
    -r 将档案以相反次序显示(原定依英文字母次序) 
    -t 将档案依建立时间之先后次序列出 
    -A 同 -a ,但不列出 "." (目前目录) 及 ".." (父目录) 
    -F 在列出的档案名称后加一符号;例如可执行档则加 "*", 目录则加 "/" 
    -R 若目录下有档案,则以下之档案亦皆依序列出 
    范例: 
    列出目前工作目录下所有名称是 s 开头的档案,愈新的排愈后面 : 
    ls -ltr s* 
    将 /bin 目录以下所有目录及档案详细资料列出 : 
    ls -lR /bin 
    列出目前工作目录下所有档案及目录;目录于名称后加 "/", 可执行档于名称后加 "*" : 
    ls -AF

    名称: mkdir 
    使用权限:于目前目录有适当权限的所有使用者 
    使用方式:mkdir [-p] dirName 
    说明:建立名称为 dirName 之子目录。 
    参数:-p 确保目录名称存在,不存在的就建一个。 
    范例: 
    在工作目录下,建立一个名为 AAA 的子目录 : 
    mkdir AAA 
    在工作目录下的 BBB 目录中,建立一个名为 Test 的子目录。若 BBB 目录原本不存在,则建立一个。(注:本例若不加 -p,且原本 BBB目录不存在,则产生错误。) 
    mkdir -p BBB/Test

    名称:more 
    使用权限:所有使用者 
    使用方式:more [-dlfpcsu] [-num] [+/pattern] [+linenum] [fileNames..] 
    说明:类似 cat ,不过会以一页一页的显示方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按  b 键就会往回(back)一页显示,而且还有搜寻字串的功能(与 vi 相似),使用中的说明文件,请按  h 。 
    参数: 

    -num 一次显示的行数 
    -d 提示使用者,在画面下方显示 [Press space to continue, 'q' to quit.] ,如果使用者按错键,则会显示 [Press 'h' for instructions.] 而不是 '' 声 
    -l 取消遇见特殊字元 ^L(送纸字元)时会暂停的功能 
    -f 计算行数时,以实际上的行数,而非自动换行过后的行数(有些单行字数太长的会被扩展为两行或两行以上) 
    -p 不以卷动的方式显示每一页,而是先清除萤幕后再显示内容 
    -c 跟 -p 相似,不同的是先显示内容再清除其他旧资料 
    -s 当遇到有连续两行以上的空白行,就代换为一行的空白行 
    -u 不显示下引号 (根据环境变数 TERM 指定的 terminal 而有所不同) 
    +/ 在每个档案显示前搜寻该字串(pattern),然后从该字串之后开始显示 
    +num 从第 num 行开始显示 
    fileNames 欲显示内容的档案,可为复数个数 
    范例: 
    more -s testfile 逐页显示 testfile 之档案内容,如有连续两行以上空白行则以一行空白行显示。 
    more +20 testfile 从第 20 行开始显示 testfile 之档案内容。

    名称:mv 
    使用权限:所有使用者 
    使用方式: 
    mv [options] source dest 
    mv [options] source... directory 
    说明:将一个档案移至另一档案,或将数个档案移至另一目录。 
    参数:-i 若目的地已有同名档案,则先询问是否覆盖旧档。 
    范例: 
    将档案 aaa 更名为 bbb : 
    mv aaa bbb 
    将所有的C语言程序移至 Finished 子目录中 : 
    mv -i *.c
    名称:rm 
    使用权限:所有使用者 
    使用方式:rm [options] name... 
    说明:删除档案及目录。 
    参数: 
    -i 删除前逐一询问确认。 
    -f 即使原档案属性设为唯读,亦直接删除,无需逐一确认。 
    -r 将目录及以下之档案亦逐一删除。 
    范例: 
    删除所有C语言程序档;删除前逐一询问确认 : 
    rm -i *.c 
    将 Finished 子目录及子目录中所有档案删除 : 
    rm -r Finished
    名称:rmdir 
    使用权限:于目前目录有适当权限的所有使用者 
    使用方式: rmdir [-p] dirName 
    说明: 删除空的目录。 
    参数: -p 是当子目录被删除后使它也成为空目录的话,则顺便一并删除。 
    范例: 
    将工作目录下,名为 AAA 的子目录删除 : 
    rmdir AAA 
    在工作目录下的 BBB 目录中,删除名为 Test 的子目录。若 Test 删除后,BBB 目录成为空目录,则 BBB 亦予删除。 
    rmdir -p BBB/Test
    名称:split 
    使用权限:所有使用者 
    使用方式:split [OPTION] [INPUT [PREFIX]] 
    说明: 
    将一个档案分割成数个。而从 INPUT 分割输出成固定大小的档案,其档名依序为 PREFIXaa, PREFIXab...;PREFIX 预设值为 `x'。若没有 INPUT 档或为 `-',则从标准输入读进资料。 
    选项: 
    -b, --bytes=SIZE 
    SIZE 值为每一输出档案的大小,单位为 byte。 
    -C, --line-bytes=SIZE 
    每一输出档中,单行的最大 byte 数。 
    -l, --lines=NUMBER 
    NUMBER 值为每一输出档的列数大小。 
    -NUMBER 
    与 -l NUMBER 相同。 
    --verbose 
    于每个输出档被开启前,列印出侦错资讯到标准错误输出。 
    --help 
    显示辅助资讯然后离开。 
    --version 
    列出版本资讯然后离开。 
    SIZE 可加入单位: b 代表 512, k 代表 1K, m 代表 1 Meg。 
    范例: 
    PostgresSQL 大型数据库备份与回存: 
    因 Postgres 允许表格大过你系统档案的最大容量,所以要将表格 dump 到单一的档案可能会有问题,使用 split 来进行档案分割。 
    % pg_dump dbname | split -b 1m - filename.dump. 
    重新载入 
    % createdb dbname 
    % cat filename.dump.* | pgsql dbname
    名称:touch 
    使用权限:所有使用者 
    使用方式: 
    touch [-acfm] 
    [-r reference-file] [--file=reference-file] 
    [-t MMDDhhmm[[CC]YY][.ss]] 
    [-d time] [--date=time] [--time={atime,access,use,mtime,modify}] 
    [--no-create] [--help] [--version] 
    file1 [file2 ...] 
    说明: 
    touch 指令改变档案的时间记录。 ls -l 可以显示档案的时间记录。 
    参数: 
    a 改变档案的读取时间记录。 
    m 改变档案的修改时间记录。 
    c 假如目的档案不存在,不会建立新的档案。与 --no-create 的效果一样。 
    f 不使用,是为了与其他 unix 系统的相容性而保留。 
    r 使用参考档的时间记录,与 --file 的效果一样。 
    d 设定时间与日期,可以使用各种不同的格式。 
    t 设定档案的时间记录,格式与 date 指令相同。 
    --no-create 不会建立新档案。 
    --help 列出指令格式。 
    --version 列出版本讯息。 
    范例: 
    最简单的使用方式,将档案的时候记录改为现在的时间。若档案不存在,系统会建立一个新的档案。 
    touch file 
    touch file1 file2 
    将  file 的时间记录改为 5 月 6 日 18 点  3 分,公元两千年。时间的格式可以参考 date 指令,至少需输入 MMDDHHmm ,就是月日时与分。 
    touch -c -t 05061803 file 
    touch -c -t 050618032000 file 
    将 file 的时间记录改变成与 referencefile 一样。 
    touch -r referencefile file 
    将  file 的时间记录改成 5 月 6 日 18 点  3 分,公元两千年。时间可以使用 am, pm 或是 24 小时的格式,日期可以使用其他格式如 6 May 2000 。 
    touch -d "6:03pm" file 
    touch -d "05/06/2000" file 
    touch -d "6:03pm 05/06/2000" file 
    touch  也可以制造一个空档(0 byte).例如DHCP Server所需的/etc/dhcpd.leases, dhcpd 必须要有这个档案才能运作正常.[root@/root]#touch /etc/dhcpd.leases [root@/root]#ls -l /etc/dhcpd.leases-rw-r--r-- 1 root root 0 Jul 3 05:50 /etc/dhcpd.leases 
    记得上一次重灌前把/etc下的设定档tar起来,重灌好之后把原有设定还原,却发现系统检查设定档的时间有问题,这个时候用 
    find /etc -name * -exec touch {}; 
    就可以把设定档的时间更新到与现在一致了。
    chgrp命令 

    功能∶改变文件或目录所属的组。 

    语法∶chgrp [选项] group filename 

    该命令改变指定指定文件所属的用户组。其中group可以是用户组ID,也可以是 /etc/group文件中用户组的组名。文件名是以空格分开的要改变属组的文件列 表,支持通配符。如果用户不是该文件的属主或超级用户,则不能改变该文件 的组。

  • linux学习之SHELL脚本

    lihang617 发布于 2008-09-25 23:40:24

    非常好的BASH脚本编写教程

    这里有个老American写的 BASH脚本编写教程,非常不错,至少没接触过BASH的也能看懂!

    建立一个脚本

      Linux中有好多中不同的shell,但是通常我们使用bash (bourne again shell) 进行shell编程,因为bash是免费的并且很容易使用。所以在本文中笔者所提供的脚本都是使用bash(但是在大多数情况下,这些脚本同样可以在 bash的大姐,bourne shell中运行)。
      如同其他语言一样,通过我们使用任意一种文字编辑器,比如nedit、kedit、emacs、vi
      等来编写我们的shell程序。
      程序必须以下面的行开始(必须方在文件的第一行):
    #!/bin/sh
      符号#!用来告诉系统它后面的参数是用来执行该文件的程序。在这个例子中我们使用/bin/sh来执行程序。
      当编辑好脚本时,如果要执行该脚本,还必须使其可执行。
      要使脚本可执行:
    chmod +x filename
      然后,您可以通过输入: ./filename 来执行您的脚本。
    注释
      在进行shell编程时,以#开头的句子表示注释,直到这一行的结束。我们真诚地建议您在程序中使用注释。如果您使用了注释,那么即使相当长的时间内没有使用该脚本,您也能在很短的时间内明白该脚本的作用及工作原理。
    变量
      在其他编程语言中您必须使用变量。在shell编程中,所有的变量都由字符串组成,并且您不需要对变量进行声明。要赋值给一个变量,您可以这样写:
    变量名=值
      取出变量值可以加一个美元符号($)在变量前面:
    #!/bin/sh
    #对变量赋值:
    a="hello world"
    # 现在打印变量a的内容:
    echo "A is:"
    echo $a
      在您的编辑器中输入以上内容,然后将其保存为一个文件first。之后执行chmod +x first
      使其可执行,最后输入./first执行该脚本。
      这个脚本将会输出:
    A is:
    hello world
      有时候变量名很容易与其他文字混淆,比如:
    num=2
    echo "this is the $numnd"
      这并不会打印出"this is the 2nd",而仅仅打印"this is the ",因为shell会去搜索变量numnd的值,但是这个变量时没有值的。可以使用花括号来告诉shell我们要打印的是num变量:
    num=2
    echo "this is the ${num}nd"
      这将打印: this is the 2nd
      有许多变量是系统自动设定的,这将在后面使用这些变量时进行讨论。
      如果您需要处理数学表达式,那么您需要使用诸如expr等程序(见下面)。
      除了一般的仅在程序内有效的shell变量以外,还有环境变量。由export关键字处理过的变量叫做环境变量。我们不对环境变量进行讨论,因为通常情况下仅仅在登录脚本中使用环境变量。
    Shell命令和流程控制
      在shell脚本中可以使用三类命令:
    1)Unix 命令:
      虽然在shell脚本中可以使用任意的unix命令,但是还是由一些相对更常用的命令。这些命令通常是用来进行文件和文字操作的。
    常用命令语法及功能
      echo "some text": 将文字内容打印在屏幕上
      ls: 文件列表
      wc –l filewc -w filewc -c file: 计算文件行数计算文件中的单词数计算文件中的字符数
      cp sourcefile destfile: 文件拷贝
      mv oldname newname : 重命名文件或移动文件
      rm file: 删除文件
      grep 'pattern' file: 在文件内搜索字符串比如:grep 'searchstring' file.txt
      cut -b colnum file: 指定欲显示的文件内容范围,并将它们输出到标准输出设备比如:输出每行第5个到第9个字符cut -b5-9 file.txt千万不要和cat命令混淆,这是两个完全不同的命令
      cat file.txt: 输出文件内容到标准输出设备(屏幕)上
      file somefile: 得到文件类型
      read var: 提示用户输入,并将输入赋值给变量
      sort file.txt: 对file.txt文件中的行进行排序
      uniq: 删除文本文件中出现的行列比如: sort file.txt | uniq
      expr: 进行数学运算Example: add 2 and 3expr 2 "+" 3
      find: 搜索文件比如:根据文件名搜索find . -name filename -print
      tee: 将数据输出到标准输出设备(屏幕) 和文件比如:somecommand | tee outfile
      basename file: 返回不包含路径的文件名比如: basename /bin/tux将返回 tux
      dirname file: 返回文件所在路径比如:dirname /bin/tux将返回 /bin
      head file: 打印文本文件开头几行
      tail file : 打印文本文件末尾几行
      sed: Sed是一个基本的查找替换程序。可以从标准输入(比如命令管道)读入文本,并将结果输出到标准输出(屏幕)。该命令采用正则表达式(见参考)进行搜索。 不要和shell中的通配符相混淆。比如:将linuxfocus 替换为 LinuxFocus :cat text.file | sed 's/linuxfocus/LinuxFocus/' &gt; newtext.file
      awk: awk 用来从文本文件中提取字段。缺省地,字段分割符是空格,可以使用-F指定其他分割符。cat file.txt | awk -F, '{print $1 "," $3 }'这里我们使用,作为字段分割符,同时打印第一个和第三个字段。如果该文件内容如下: Adam Bor, 34, IndiaKerry Miller, 22, USA命令输出结果为:Adam Bor, IndiaKerry Miller, USA
    2) 概念: 管道, 重定向和 backtick
      这些不是系统命令,但是他们真的很重要。
      管道 (|) 将一个命令的输出作为另外一个命令的输入。
    grep "hello" file.txt | wc -l
      在file.txt中搜索包含有”hello”的行并计算其行数。
      在这里grep命令的输出作为wc命令的输入。当然您可以使用多个命令。
      重定向:将命令的结果输出到文件,而不是标准输出(屏幕)。
      &gt; 写入文件并覆盖旧文件
      &gt;&gt; 加到文件的尾部,保留旧文件内容。
    反短斜线
     使用反短斜线可以将一个命令的输出作为另外一个命令的一个命令行参数。
      命令:
    find . -mtime -1 -type f -print
      用来查找过去24小时(-mtime –2则表示过去48小时)内修改过的文件。如果您想将所有查找到的文件打一个包,则可以使用以下脚本:
    #!/bin/sh
    # The ticks are backticks (`) not normal quotes ('):
    tar -zcvf lastmod.tar.gz `find . -mtime -1 -type f -print`
      3) 流程控制
      "if" 表达式 如果条件为真则执行then后面的部分:
    if ....; then
      ....
    elif ....; then
      ....
    else
      ....
    fi
      大多数情况下,可以使用测试命令来对条件进行测试。比如可以比较字符串、判断文件是否存在及是否可读等等…
      通常用" [ ] "来表示条件测试。注意这里的空格很重要。要确保方括号的空格。
    [ -f "somefile" ] :判断是否是一个文件
    [ -x "/bin/ls" ] :判断/bin/ls是否存在并有可执行权限
    [ -n "$var" ] :判断$var变量是否有值
    [ "$a" = "$b" ] :判断$a和$b是否相等
      执行man test可以查看所有测试表达式可以比较和判断的类型。
      直接执行以下脚本:
    #!/bin/sh
    if [ "$SHELL" = "/bin/bash" ]; then
     echo "your login shell is the bash (bourne again shell)"
    else
     echo "your login shell is not bash but $SHELL"
    fi
      变量$SHELL包含了登录shell的名称,我们和/bin/bash进行了比较。
    快捷操作符
      熟悉C语言的朋友可能会很喜欢下面的表达式:
    [ -f "/etc/shadow" ] && echo "This computer uses shadow passwors"
      这里 && 就是一个快捷操作符,如果左边的表达式为真则执行右边的语句。您也可以认为是逻辑运算中的与操作。上例中表示如果/etc/shadow文件存在则打印” This computer uses shadow passwors”。同样或操作(||)在shell编程中也是可用的。这里有个例子:
    #!/bin/sh
    mailfolder=/var/spool/mail/james
    [ -r "$mailfolder" ]' '{ echo "Can not read $mailfolder" ; exit 1; }
    echo "$mailfolder has mail from:"
    grep "^From " $mailfolder
      该脚本首先判断mailfolder是否可读。如果可读则打印该文件中的"From" 一行。如果不可读则或操作生效,打印错误信息后脚本退出。这里有个问题,那就是我们必须有两个命令:
      -打印错误信息
      -退出程序
      我们使用花括号以匿名函数的形式将两个命令放到一起作为一个命令使用。一般函数将在下文提及。
      不用与和或操作符,我们也可以用if表达式作任何事情,但是使用与或操作符会更便利很多。
      case表达式可以用来匹配一个给定的字符串,而不是数字。
    case ... in
    ...) do something here ;;
    esac
      让我们看一个例子。 file命令可以辨别出一个给定文件的文件类型,比如:
    file lf.gz
      这将返回:
    lf.gz: gzip compressed data, deflated, original filename,
    last modified: Mon Aug 27 23:09:18 2001, os: Unix
     我们利用这一点写了一个叫做smartzip的脚本,该脚本可以自动解压bzip2, gzip 和zip 类型的压缩文件:
    #!/bin/sh
    ftype=`file "$1"`
    case "$ftype" in
    "$1: Zip archive"*)
      unzip "$1" ;;
    "$1: gzip compressed"*)
      gunzip "$1" ;;
    "$1: bzip2 compressed"*)
      bunzip2 "$1" ;;
    *) error "File $1 can not be uncompressed with smartzip";;
    esac
      您可能注意到我们在这里使用了一个特殊的变量$1。该变量包含了传递给该程序的第一个参数值。也就是说,当我们运行:
    smartzip articles.zip
    $1 就是字符串 articles.zip
      select 表达式是一种bash的扩展应用,尤其擅长于交互式使用。用户可以从一组不同的值中进行选择。
    select var in ... ; do
     break
    done
    .... now $var can be used ....
    下面是一个例子:
    #!/bin/sh
    echo "What is your favourite OS?"
    select var in "Linux" "Gnu Hurd" "Free BSD" "Other"; do
        break
    done
    echo "You have selected $var"
      下面是该脚本运行的结果:
    What is your favourite OS?
    1) Linux
    2) Gnu Hurd
    3) Free BSD
    4) Other
    #? 1
    You have selected Linux
      您也可以在shell中使用如下的loop表达式:
    while ...; do
    ....
    done
      while-loop 将运行直到表达式测试为真。will run while the expression that we test for is true. 关键字"break" 用来跳出循环。而关键字”continue”用来不执行余下的部分而直接跳到下一个循环。
      for-loop表达式查看一个字符串列表 (字符串用空格分隔) 然后将其赋给一个变量:
    for var in ....; do
     ....
    done
      在下面的例子中,将分别打印ABC到屏幕上:
    #!/bin/sh
    for var in A B C ; do
     echo "var is $var"
    done
      下面是一个更为有用的脚本showrpm,其功能是打印一些RPM包的统计信息:
    #!/bin/sh
    # list a content summary of a number of RPM packages
    # USAGE: showrpm rpmfile1 rpmfile2 ...
    # EXAMPLE: showrpm /cdrom/RedHat/RPMS/*.rpm
    for rpmpackage in $*; do
     if [ -r "$rpmpackage" ];then
      echo "=============== $rpmpackage =============="
      rpm -qi -p $rpmpackage
     else
      echo "ERROR: cannot read file $rpmpackage"
     fi
    done
      这里出现了第二个特殊的变量$*,该变量包含了所有输入的命令行参数值。如果您运行showrpm openssh.rpm w3m.rpm webgrep.rpm
      此时 $* 包含了 3 个字符串,即openssh.rpm, w3m.rpm and webgrep.rpm.
    引号
      在向程序传递任何参数之前,程序会扩展通配符和变量。这里所谓扩展的意思是程序会把通配符(比如*)替换成合适的文件名,它变量替换成变量值。为了防 止程序作这种替换,您可以使用引号:让我们来看一个例子,假设在当前目录下有一些文件,两个jpg文件, mail.jpg 和tux.jpg。

    #!/bin/sh
    echo *.jpg
      这将打印出"mail.jpg tux.jpg"的结果。
      引号 (单引号和双引号) 将防止这种通配符扩展:
    #!/bin/sh
    echo "*.jpg"
    echo '*.jpg'
      这将打印"*.jpg" 两次。
      单引号更严格一些。它可以防止任何变量扩展。双引号可以防止通配符扩展但允许变量扩展。
    #!/bin/sh
    echo $SHELL
    echo "$SHELL"
    echo '$SHELL'
      运行结果为:
    /bin/bash
    /bin/bash
    $SHELL
      最后,还有一种防止这种扩展的方法,那就是使用转义字符——反斜杆:
    echo *.jpg
    echo $SHELL
      这将输出:
    *.jpg
    $SHELL
    Here documents
      当要将几行文字传递给一个命令时,here documents(译者注:目前还没有见到过对该词适合的翻译)一种不错的方法。对每个脚本写一段帮助性的文字是很有用的,此时如果我们四有那个 here documents就不必用echo函数一行行输出。 一个 "Here document" 以 &lt;&lt; 开头,后面接上一个字符串,这个字符串还必须出现在here document的末尾。下面是一个例子,在该例子中,我们对多个文件进行重命名,并且使用here documents打印帮助:
    #!/bin/sh
    # we have less than 3 arguments. Print the help text:
    if [ $# -lt 3 ] ; then
    cat &lt;
    ren -- renames a number of files using sed regular expressions
    USAGE: ren 'regexp' 'replacement' files...
    EXAMPLE: rename all *.HTM files in *.html:
     ren 'HTM$' 'html' *.HTM
    HELP
     exit 0
    fi
    ōLD="$1"
    NEW="$2"
    # The shift command removes one argument from the list of
    # command line arguments.
    shift
    shift
    # $* contains now all the files:
    for file in $*; do
      if [ -f "$file" ] ; then
       newfile=`echo "$file" | sed "s/${OLD}/${NEW}/g"`
       if [ -f "$newfile" ]; then
        echo "ERROR: $newfile exists already"
       else
        echo "renaming $file to $newfile ..."
        mv "$file" "$newfile"
       fi
      fi
    done
      这是一个复杂一些的例子。让我们详细讨论一下。第一个if表达式判断输入命令行参数是否小于3个 (特殊变量$# 表示包含参数的个数) 。如果输入参数小于3个,则将帮助文字传递给cat命令,然后由cat命令将其打印在屏幕上。打印帮助文字后程序退出。 如果输入参数等于或大于3个,我们就将第一个参数赋值给变量OLD,第二个参数赋值给变量NEW。下一步,我们使用shift命令将第一个和第二个参数从 参数列表中删除,这样原来的第三个参数就成为参数列表$*的第一个参数。然后我们开始循环,命令行参数列表被一个接一个地被赋值给变量$file。接着我 们判断该文件是否存在,如果存在则通过sed命令搜索和替换来产生新的文件名。然后将反短斜线内命令结果赋值给newfile。这样我们就达到了我们的目 的:得到了旧文件名和新文件名。然后使用mv命令进行重命名。
    函数
      如果您写了一些稍微复杂一些的程序,您就会发现在程序中可能在几个地方使用了相同的代码,并且您也会发现,如果我们使用了函数,会方便很多。一个函数是这个样子的:
    functionname()
    {
    # inside the body $1 is the first argument given to the function
    # $2 the second ...
    body
    }
      您需要在每个程序的开始对函数进行声明。

      下面是一个叫做xtitlebar的脚本,使用这个脚本您可以改变终端窗口的名称。这里使用了一个叫做help的函数。正如您可以看到的那样,这个定义的函数被使用了两次。
    #!/bin/sh
    # vim: set sw=4 ts=4 et:
    help()
    {
      cat &lt;
    xtitlebar -- change the name of an xterm, gnome-terminal or kde konsole
    USAGE: xtitlebar [-h] "string_for_titelbar"
    OPTIONS: -h help text
    EXAMPLE: xtitlebar "cvs"
    HELP
      exit 0
    }
    # in case of error or if -h is given we call the function help:
    [ -z "$1" ] && help
    [ "$1" = "-h" ] && help
    # send the escape sequence to change the xterm titelbar:
    echo -e "33]0;$107"
    #
      在脚本中提供帮助是一种很好的编程习惯,这样方便其他用户(和您)使用和理解脚本。
    命令行参数
      我们已经见过$* 和 $1, $2 ... $9 等特殊变量,这些特殊变量包含了用户从命令行输入的参数。迄今为止,我们仅仅了解了一些简单的命令行语法(比如一些强制性的参数和查看帮助的-h选项)。 但是在编写更复杂的程序时,您可能会发现您需要更多的自定义的选项。通常的惯例是在所有可选的参数之前加一个减号,后面再加上参数值 (比如文件名)。
      有好多方法可以实现对输入参数的分析,但是下面的使用case表达式的例子无遗是一个不错的方法。
    #!/bin/sh
    help()
    {
     cat &lt;
    This is a generic command line parser demo.
    USAGE EXAMPLE: cmdparser -l hello -f -- -somefile1 somefile2
    HELP
     exit 0
    }
    while [ -n "$1" ]; do
    case $1 in
      -h) help;shift 1;; # function help is called
      -f) opt_f=1;shift 1;; # variable opt_f is set
      -l) opt_l=$2;shift 2;; # -l takes an argument -&gt; shift by 2
      --) shift;break;; # end of options
      -*) echo "error: no such option $1. -h for help";exit 1;;
      *) break;;
    esac
    done

    echo "opt_f is $opt_f"
    echo "opt_l is $opt_l"
    echo "first arg is $1"
    echo "2nd arg is $2"
      您可以这样运行该脚本:
    cmdparser -l hello -f -- -somefile1 somefile2
      返回的结果是:
    opt_f is 1
    opt_l is hello
    first arg is -somefile1
    2nd arg is somefile2
      这个脚本是如何工作的呢?脚本首先在所有输入命令行参数中进行循环,将输入参数与case表达式进行比较,如果匹配则设置一个变量并且移除该参数。根据unix系统的惯例,首先输入的应该是包含减号的参数。
    实例
      一般编程步骤
      现在我们来讨论编写一个脚本的一般步骤。任何优秀的脚本都应该具有帮助和输入参数。并且写一个伪脚本(framework.sh),该脚本包含了大多数脚本都需要的框架结构,是一个非常不错的主意。这时候,在写一个新的脚本时我们只需要执行一下copy命令:
    cp framework.sh myscrīpt
     然后再插入自己的函数。
      让我们再看两个例子:
      二进制到十进制的转换
      脚本 b2d 将二进制数 (比如 1101) 转换为相应的十进制数。这也是一个用expr命令进行数学运算的例子:
    #!/bin/sh
    # vim: set sw=4 ts=4 et:
    help()
    {
     cat &lt;
    b2h -- convert binary to decimal
    USAGE: b2h [-h] binarynum
    OPTIONS: -h help text
    EXAMPLE: b2h 111010
    will return 58
    HELP
     exit 0
    }
    error()
    {
      # print an error and exit
      echo "$1"
      exit 1
    }
    lastchar()
    {
      # return the last character of a string in $rval
      if [ -z "$1" ]; then
        # empty string
        rval=""
        return
      fi
      # wc puts some space behind the output this is why we need sed:
      numofchar=`echo -n "$1" | wc -c | sed 's/ //g' `
      # now cut out the last char
      rval=`echo -n "$1" | cut -b $numofchar`
    }

    chop()
    {
      # remove the last character in string and return it in $rval
      if [ -z "$1" ]; then
        # empty string
        rval=""
        return
      fi
      # wc puts some space behind the output this is why we need sed:
      numofchar=`echo -n "$1" | wc -c | sed 's/ //g' `
      if [ "$numofchar" = "1" ]; then
        # only one char in string
        rval=""
        return
      fi
      numofcharminus1=`expr $numofchar "-" 1`
      # now cut all but the last char:
      rval=`echo -n "$1" | cut -b 0-${numofcharminus1}`
    }
    while [ -n "$1" ]; do
    case $1 in
      -h) help;shift 1;; # function help is called
      --) shift;break;; # end of options
      -*) error "error: no such option $1. -h for help";;
      *) break;;
    esac
    done
    # The main program
    sum=0
    weight=1
    # one arg must be given:
    [ -z "$1" ] && help
    binnum="$1"
    binnumorig="$1"

    while [ -n "$binnum" ]; do
      lastchar "$binnum"
      if [ "$rval" = "1" ]; then
        sum=`expr "$weight" "+" "$sum"`
      fi
      # remove the last position in $binnum
      chop "$binnum"
      binnum="$rval"
      weight=`expr "$weight" "*" 2`
    done
    echo "binary $binnumorig is decimal $sum"
    #
      该脚本使用的算法是利用十进制和二进制数权值 (1,2,4,8,16,..),比如二进制"10"可以这样转换成十进制:
    0 * 1 + 1 * 2 = 2
      为了得到单个的二进制数我们是用了lastchar 函数。该函数使用wc –c计算字符个数,然后使用cut命令取出末尾一个字符。Chop函数的功能则是移除最后一个字符。
      文件循环程序
      或许您是想将所有发出的邮件保存到一个文件中的人们中的一员,但是在过了几个月以后,这个文件可能会变得很大以至于使对该文件的访问速度变慢。下面的 脚本rotatefile 可以解决这个问题。这个脚本可以重命名邮件保存文件(假设为outmail)为outmail.1,而对于outmail.1就变成了outmail.2 等等等等...
    #!/bin/sh
    # vim: set sw=4 ts=4 et:
    ver="0.1"
    help()
    {
      cat &lt;
    rotatefile -- rotate the file name

    USAGE: rotatefile [-h] filename

    OPTIONS: -h help text
    EXAMPLE: rotatefile out
    This will e.g rename out.2 to out.3, out.1 to out.2, out to out.1
    and create an empty out-file
    The max number is 10
    version $ver
    HELP
      exit 0
    }

    error()
    {
      echo "$1"
      exit 1
    }
    while [ -n "$1" ]; do
    case $1 in
      -h) help;shift 1;;
      --) break;;
      -*) echo "error: no such option $1. -h for help";exit 1;;
      *) break;;
    esac
    done
    # input check:
    if [ -z "$1" ] ; then
    error "ERROR: you must specify a file, use -h for help"
    fi
    filen="$1"
    # rename any .1 , .2 etc file:
    for n in 9 8 7 6 5 4 3 2 1; do
      if [ -f "$filen.$n" ]; then
        p=`expr $n + 1`
        echo "mv $filen.$n $filen.$p"
        mv $filen.$n $filen.$p
      fi
    done
    # rename the original file:
    if [ -f "$filen" ]; then
      echo "mv $filen $filen.1"
      mv $filen $filen.1
    fi
    echo touch $filen
    touch $filen
      这个脚本是如何工作的呢?在检测用户提供了一个文件名以后,我们进行一个9到1的循环。文件9被命名为10,文件8重命名为9等等。循环完成之后,我们将原始文件命名为文件1同时建立一个与原始文件同名的空文件。
    调试
      最简单的调试命令当然是使用echo命令。您可以使用echo在任何怀疑出错的地方打印任何变量值。这也是绝大多数的shell程序员要花费80%的时间来调试程序的原因。Shell程序的好处在于不需要重新编译,插入一个echo命令也不需要多少时间。
      shell也有一个真实的调试模式。如果在脚本"strangescrīpt" 中有错误,您可以这样来进行调试:
    sh -x strangescrīpt
      这将执行该脚本并显示所有变量的值。
      shell还有一个不需要执行脚本只是检查语法的模式。可以这样使用:
    sh -n your_scrīpt
      这将返回所有语法错误。
Open Toolbar