Software Engineering Body of Knowledge (v3) (2014) (811503), страница 16
Текст из файла (страница 16)
Itis accomplished through making use of standards(see section 1.5, Standards in Construction),modular design (see section 3.1, ConstructionDesign), and numerous other specific techniques(see section 3.3, Coding). It is also supported byconstruction-focused quality techniques (see section 3.7, Construction Quality).1.2. Anticipating Change[1*]Most software will change over time, and theanticipation of change drives many aspects ofsoftware construction; changes in the environments in which software operates also affect software in diverse ways.Anticipating change helps software engineersbuild extensible software, which means they canenhance a software product without disruptingthe underlying structure.Anticipating change is supported by many specific techniques (see section 3.3, Coding).1.3. Constructing for Verification[1*]Constructing for verification means buildingsoftware in such a way that faults can be readily found by the software engineers writing thesoftware as well as by the testers and users duringindependent testing and operational activities.Specific techniques that support constructing forverification include following coding standards tosupport code reviews and unit testing, organizingcode to support automated testing, and restricting the use of complex or hard-to-understand language structures, among others.1.4. Reuse[2*]Reuse refers to using existing assets in solvingdifferent problems.
In software construction, typical assets that are reused include libraries, modules, components, source code, and commercialoff-the-shelf (COTS) assets. Reuse is best practiced systematically, according to a well-defined,repeatable process. Systematic reuse can enablesignificant software productivity, quality, andcost improvements.Reuse has two closely related facets: “construction for reuse” and “construction with reuse.” Theformer means to create reusable software assets,while the latter means to reuse software assets inthe construction of a new solution. Reuse oftentranscends the boundary of projects, which meansreused assets can be constructed in other projectsor organizations.1.5. Standards in Construction[1*]Applying external or internal development standards during construction helps achieve a project’s objectives for efficiency, quality, and cost.Specifically, the choices of allowable programming language subsets and usage standards areimportant aids in achieving higher security.Standards that directly affect constructionissues include• communication methods (for example, standards for document formats and contents)• programming languages (for example, language standards for languages like Java andC++)• coding standards (for example, standards fornaming conventions, layout, and indentation)• platforms (for example, interface standardsfor operating system calls)3-4 SWEBOK® Guide V3.0• tools (for example, diagrammatic standardsfor notations like UML (Unified ModelingLanguage)).Use of external standards.
Constructiondepends on the use of external standards for construction languages, construction tools, technicalinterfaces, and interactions between the SoftwareConstruction KA and other KAs. Standards comefrom numerous sources, including hardware andsoftware interface specifications (such as theObject Management Group (OMG)) and international organizations (such as the IEEE or ISO).Use of internal standards. Standards may alsobe created on an organizational basis at the corporate level or for use on specific projects. Thesestandards support coordination of group activities, minimizing complexity, anticipating change,and constructing for verification.2. Managing Construction2.1. Construction in Life Cycle Models[1*]Numerous models have been created to developsoftware; some emphasize construction morethan others.Some models are more linear from the construction point of view—such as the waterfall andstaged-delivery life cycle models.
These modelstreat construction as an activity that occurs onlyafter significant prerequisite work has been completed—including detailed requirements work,extensive design work, and detailed planning.The more linear approaches tend to emphasizethe activities that precede construction (requirements and design) and to create more distinct separations between activities. In these models, themain emphasis of construction may be coding.Other models are more iterative—such asevolutionary prototyping and agile development.
These approaches tend to treat construction as an activity that occurs concurrently withother software development activities (includingrequirements, design, and planning) or that overlaps them. These approaches tend to mix design,coding, and testing activities, and they often treatthe combination of activities as construction (seethe Software Management and Software ProcessKAs).Consequently, what is considered to be “construction” depends to some degree on the lifecycle model used. In general, software construction is mostly coding and debugging, butit also involves construction planning, detaileddesign, unit testing, integration testing, and otheractivities.2.2. Construction Planning[1*]The choice of construction method is a key aspectof the construction-planning activity.
The choiceof construction method affects the extent towhich construction prerequisites are performed,the order in which they are performed, and thedegree to which they should be completed beforeconstruction work begins.The approach to construction affects the project team’s ability to reduce complexity, anticipatechange, and construct for verification. Each ofthese objectives may also be addressed at the process, requirements, and design levels—but theywill be influenced by the choice of constructionmethod.Construction planning also defines the orderin which components are created and integrated,the integration strategy (for example, phased orincremental integration), the software qualitymanagement processes, the allocation of taskassignments to specific software engineers, andother tasks, according to the chosen method.2.3. Construction Measurement[1*]Numerous construction activities and artifacts canbe measured—including code developed, codemodified, code reused, code destroyed, code complexity, code inspection statistics, fault-fix andfault-find rates, effort, and scheduling.
These measurements can be useful for purposes of managingconstruction, ensuring quality during construction,and improving the construction process, amongother uses (see the Software Engineering ProcessKA for more on measurement).Software Construction 3-53. Practical ConsiderationsConstruction is an activity in which the softwareengineer has to deal with sometimes chaotic andchanging real-world constraints, and he or shemust do so precisely.
Due to the influence of realworld constraints, construction is more driven bypractical considerations than some other KAs,and software engineering is perhaps most craftlike in the construction activities.3.1. Construction Design[1*]Some projects allocate considerable design activity to construction, while others allocate designto a phase explicitly focused on design. Regardless of the exact allocation, some detailed designwork will occur at the construction level, and thatdesign work tends to be dictated by constraintsimposed by the real-world problem that is beingaddressed by the software.Just as construction workers building a physical structure must make small-scale modifications to account for unanticipated gaps in thebuilder’s plans, software construction workersmust make modifications on a smaller or largerscale to flesh out details of the software designduring construction.The details of the design activity at the construction level are essentially the same as described inthe Software Design KA, but they are applied ona smaller scale of algorithms, data structures, andinterfaces.3.2. Construction Languages[1*]Construction languages include all forms ofcommunication by which a human can specify anexecutable problem solution to a problem.
Construction languages and their implementations(for example, compilers) can affect softwarequality attributes of performance, reliability, portability, and so forth. They can be serious contributors to security vulnerabilities.The simplest type of construction languageis a configuration language, in which softwareengineers choose from a limited set of predefined options to create new or custom softwareinstallations. The text-based configuration filesused in both the Windows and Unix operatingsystems are examples of this, and the menu-styleselection lists of some program generators constitute another example of a configuration language.Toolkit languages are used to build applications out of elements in toolkits (integrated setsof application-specific reusable parts); they aremore complex than configuration languages.Toolkit languages may be explicitly defined asapplication programming languages, or the applications may simply be implied by a toolkit’s setof interfaces.Scripting languages are commonly used kindsof application programming languages.