Structural modeling is used to illustrate a software application’s physical or logical model from the perspective of its composition, architecture, componentization, and/or organization. A structural model visually establishes the delineation between the software product being modeled and the external environment in which the software is intended to operate.
Some common structural modeling constructs include:
A specialized form of structural modeling called information modeling focuses specifically on the data perspective and the flow of information within an organization and software solution. Information modeling is used to identify and define important data entities, properties, relations, and constraints, apart from how these will ultimately be physically implemented. The goal is to provide increased formalism and context regarding the informational aspects of the software domain being modeled.
The conceptual or semantic data model formulated through information modeling presents an abstraction of the data and information from the point of view of the problem space rather than the solution space. It includes only those concepts, attributes, relationships, and rules needed to properly conceptualize a real-world view of the information landscape for the organization or business.
Through successive model transformations, the conceptual information model is elaborated into logical data models and, finally, physical data models as the software architecture takes shape. These latter models address how the information will be technically represented and managed within the software solution infrastructure.
Relevant UML structure diagram types that can be used for structural modeling include class, component, object, deployment, and package diagrams. These provide different static structural views of the software architecture and composition.
Software engineering methods provide an organized, systematic approach for specifying, designing, constructing, testing, and verifying the resulting software products and associated work items involved in developing computer software applications. The methods impose a certain structure, set of steps, practices, and procedures on the software engineering effort to make it more methodical, repeatable, and ultimately more success-oriented.
There are numerous software engineering methods available from which to choose when undertaking a development project. When software developers and project teams with the right complementary skill sets employ these methods aided by proper tools and techniques, they are able to visualize the software from varying perspectives and at different levels of abstraction and detail. Understanding the software ecosystem helps drive informed decision-making throughout the engineering process. The methods provide an efficient path to transforming the software representations into a fully functional set of executable code, data stores, interfaces, and operational documentation that collectively deliver value to the end users.
Heuristic methods constitute a category of experience-based software engineering methods that are fairly well-established and widely practiced throughout the software industry. These methods provide rational unified process approaches for developing software using informal sets of “rules of thumb” that have developed over time.
Heuristic software engineering methods do not rely on mathematically rigorous formalism or absolute proofs. Rather, they leverage lessons learned, time-tested strategies, and pragmatic guidelines to structure the development process in an efficient and productive manner.
Some of the most common subcategories of heuristic software engineering methods include:
Structured Analysis and Design – This software development process focuses on systematically developing the software model primarily from a functional, behavioral perspective. The process starts with a high-level architectural view of the software system being built, encompassing major logical control and data elements. Through successive iterations of refinement, the functional components are elaborated and decomposed into increasingly detailed design blueprints. These design details gradually converge to specific software component specifications that can in turn be transformed (by hand, automated tools, or a combination) into coded modules ready for integration.
Data Modeling – In contrast to structured analysis and design techniques, the data modeling approach centers on constructing the logical and physical data model of the software system strictly from the viewpoint of the organizational data and information flows. Data tables, schemas, attributes, relationships, and transactions serve as the basis for defining the models. This data-centric method is used most prominently in business software development life cycle, where data is actively managed as an enterprise systems resource or asset. The resulting data models form the foundation for database designs and persistent data repositories.
Object-Oriented Analysis and Design – The object-oriented analysis and design paradigm represents the software under construction as a network of interacting objects. These objects encapsulate both data persistence and relationships along with behavior in the form of methods that can be invoked to request services from other objects. Objects can represent real-world physical or conceptual entities or purely virtual constructs. Various diagrams and process model views are built using the notation and semantics of the object-oriented modeling language. This high-level representation is iteratively refined into a detailed design capturing all facets required ultimately for code implementation.
Aspect-Oriented Development – This approach seeks to solve the problems of scattering and tangling of crosscutting concerns that naturally arise in complex software system designs. Logging, authentication, transaction management, and data marshaling are examples of functionality that crosscut the traditional modular software decomposition. Aspect-oriented software development methodology proposes decomposing the system into modules representing these crosscutting concerns and keeping them encapsulated from other modules throughout the sdlc model.
Model-Driven and Model-Based Development – Model-driven development (MDD) refers to a software development model in which models are the primary artifacts of the development process. In the most extreme vision of MDD, even executable code could be auto-generated from the models. Model-based development (MBD) implies development in which models still play an important role but are not necessarily the key development artifact. Both MDD and MBD center on evolving incremental model toward implementation.
Formal methods comprise a specialized class of software engineering methods that apply a rigorous, mathematics-based notation and language for specifying, developing, and verifying computer software. They provide an approach to software construction rooted in mathematical proofs and formal logic rather than empirical heuristics.
This category of methods centers around the following key themes and techniques:
Specification Languages – These textual languages allow software specifications and requirements to be expressed in a formal, mathematical notation that removes ambiguity. Examples are Extended BNF (Backus-Naur Form) and Z notation.
Program Refinement and Derivation – The goal here is to create a provably correct software design model through a succession of semantics-preserving transformations from an initial high-level specification.
Formal Verification – An example verification technique is model checking, which performs an exhaustive state-space exploration to verify that a software model design preserves critical properties under all possible scenario paths and conditions.
Logical Inference – This technique enables predicting extreme programming behavior based on axioms and rules of inference rather than executing the software.
Software engineering models and methods bring systematization and repeatability to software development, increasing the likelihood of success. Models provide abstraction, perspective, and communication. Structural and behavioral models address different concerns. Analysis verifies whether models are complete, consistent, and correct. A variety of software engineering methods exist, spanning formal mathematical specification to lightweight agile methodology. The methods selected dramatically impact the effectiveness of a project. Careful modeling combined with appropriate engineering methods help ensure software fully meets the needs of stakeholders in a cost-effective manner.
Read more about software engineering models and methods in the Software Engineer Book of Knowledge (SWEBOK)
DOWNLOAD SWEBOK