Software Engineering Body of Knowledge (v3) (2014) (811503), страница 19
Текст из файла (страница 19)
A monitor contains the declaration of shared variables and procedures or functions that operate on those variables. The monitor construct ensures that onlyone process at a time is active within the monitor.A mutex (mutual exclusion) is a synchronization primitive that grants exclusive access to ashared resource by only one process or thread ata time.4.11. Middleware[3*] [6*]Middleware is a broad classification for software that provides services above the operatingsystem layer yet below the application programlayer. Middleware can provide runtime containers for software components to provide messagepassing, persistence, and a transparent locationacross a network.
Middleware can be viewed asa connector between the components that use themiddleware. Modern message-oriented middleware usually provides an Enterprise Service Bus(ESB), which supports service-oriented interaction and communication between multiple software applications.Software Construction 3-114.12. Construction Methods for DistributedSoftware[7*]A distributed system is a collection of physicallyseparate, possibly heterogeneous computer systems that are networked to provide the users withaccess to the various resources that the systemmaintains.
Construction of distributed software isdistinguished from traditional software construction by issues such as parallelism, communication, and fault tolerance.Distributed programming typically falls into oneof several basic architectural categories: clientserver, 3-tier architecture, n-tier architecture, distributed objects, loose coupling, or tight coupling(see section 14.3 of the Computing FoundationsKA and section 3.2 of the Software Design KA).4.13. Constructing Heterogeneous Systems[6*]Heterogeneous systems consist of a variety ofspecialized computational units of different types,such as Digital Signal Processors (DSPs), microcontrollers, and peripheral processors. Thesecomputational units are independently controlledand communicate with one another.
Embeddedsystems are typically heterogeneous systems.The design of heterogeneous systems mayrequire the combination of several specificationlanguages in order to design different parts ofthe system—in other words, hardware/softwarecodesign. The key issues include multilanguagevalidation, cosimulation, and interfacing.During the hardware/software codesign, software development and virtual hardware development proceed concurrently through stepwisedecomposition.
The hardware part is usuallysimulated in field programmable gate arrays(FPGAs) or application-specific integrated circuits (ASICs). The software part is translated intoa low-level programming language.4.14. Performance Analysis and Tuning[1*]Code efficiency—determined by architecture,detailed design decisions, and data-structure andalgorithm selection—influences an executionspeed and size. Performance analysis is the investigation of a program’s behavior using information gathered as the program executes, with thegoal of identifying possible hot spots in the program to be improved.Code tuning, which improves performance atthe code level, is the practice of modifying correctcode in ways that make it run more efficiently.Code tuning usually involves only small-scalechanges that affect a single class, a single routine,or, more commonly, a few lines of code.
A richset of code tuning techniques is available, including those for tuning logic expressions, loops, datatransformations, expressions, and routines. Usinga low-level language is another common technique for improving some hot spots in a program.4.15. Platform Standards[6*] [7*]Platform standards enable programmers todevelop portable applications that can be executed in compatible environments withoutchanges. Platform standards usually involve aset of standard services and APIs that compatible platform implementations must implement.Typical examples of platform standards are Java2 Platform Enterprise Edition (J2EE) and thePOSIX standard for operating systems (PortableOperating System Interface), which representsa set of standards implemented primarily forUNIX-based operating systems.4.16. Test-First Programming[1*]Test-first programming (also known as TestDriven Development—TDD) is a popular development style in which test cases are written priorto writing any code.
Test-first programming canusually detect defects earlier and correct themmore easily than traditional programming styles.Furthermore, writing test cases first forces programmers to think about requirements and designbefore coding, thus exposing requirements anddesign problems sooner.3-12 SWEBOK® Guide V3.05. Software Construction Tools5.1. Development Environments5.3. Unit Testing Tools[1*]A development environment, or integrated development environment (IDE), provides comprehensive facilities to programmers for softwareconstruction by integrating a set of developmenttools. The choices of development environmentscan affect the efficiency and quality of softwareconstruction.In additional to basic code editing functions,modern IDEs often offer other features like compilation and error detection from within the editor, integration with source code control, build/test/debugging tools, compressed or outlineviews of programs, automated code transforms,and support for refactoring.5.2. GUI Builders[1*]A GUI (Graphical User Interface) builder is asoftware development tool that enables the developer to create and maintain GUIs in a WYSIWYG (what you see is what you get) mode.
AGUI builder usually includes a visual editorfor the developer to design forms and windowsand manage the layout of the widgets by dragging, dropping, and parameter setting. Some GUIbuilders can automatically generate the sourcecode corresponding to the visual GUI design.Because current GUI applications usually follow the event-driven style (in which the flow ofthe program is determined by events and eventhandling), GUI builder tools usually providecode generation assistants, which automate themost repetitive tasks required for event handling.The supporting code connects widgets with theoutgoing and incoming events that trigger thefunctions providing the application logic.Some modern IDEs provide integrated GUIbuilders or GUI builder plug-ins.
There are alsomany standalone GUI builders.[1*] [2*]Unit testing verifies the functioning of softwaremodules in isolation from other software elementsthat are separately testable (for example, classes,routines, components). Unit testing is often automated. Developers can use unit testing toolsand frameworks to extend and create automatedtesting environment. With unit testing tools andframeworks, the developer can code criteria intothe test to verify the unit’s correctness under various data sets. Each individual test is implementedas an object, and a test runner runs all of the tests.During the test execution, those failed test caseswill be automatically flagged and reported.5.4. Profiling, Performance Analysis, andSlicing Tools[1*]Performance analysis tools are usually used tosupport code tuning.
The most common performance analysis tools are profiling tools. Anexecution profiling tool monitors the code whileit runs and records how many times each statement is executed or how much time the programspends on each statement or execution path. Profiling the code while it is running gives insightinto how the program works, where the hot spotsare, and where the developers should focus thecode tuning efforts.Program slicing involves computation of theset of program statements (i.e., the program slice)that may affect the values of specified variablesat some point of interest, which is referred to asa slicing criterion. Program slicing can be usedfor locating the source of errors, program understanding, and optimization analysis.
Programslicing tools compute program slices for variousprogramming languages using static or dynamicanalysis methods.Software Construction 3-131. SoftwareConstructionFundamentalsc2, c3,c7-c9,1.1. Minimizingc24, c27,Complexityc28, c31,c32, c34c3–c5,1.2. Anticipatingc24, c31,Changec32, c34c8,1.3. Constructing forc20–Verificationc23, c31,c341.4. Reuse1.5. Standards inc4Construction2. ManagingConstruction2.1. Construction inc2, c3,Life Cycle Modelsc27, c29c3, c4,2.2. Constructionc21,Planningc27–c292.3. Constructionc25, c28Measurement3. PracticalConsiderations3.1. Constructionc3, c5,Designc243.2. Constructionc4Languagesc5–c19,3.3. Codingc25–c26c16Silberschatz et al. 2008[7*]Null and Lobur 2006[6*]Mellor and Balcer 2002[5*]Gamma et al. 1994[4*]Clements et al.