Creating new methods from existing ones. Method engineering in the “field of information systems is the discipline to construct new methods from existing methods”.[2] It focuses on “the design, construction and evaluation of methods, techniques and support tools for information systems development“.[3] Furthermore, method engineering “wants to improve the usefulness of systems development methods by creating an adaptation framework whereby methods are created to match specific organisational situations”.[4] Types [edit] Computer aided method engineering [edit] The meta-process modeling process is often not supported through software tools, called computer aided method engineering (CAME) tools, or MetaCASE tools (Meta-level Computer Assisted Software Engineering tools). Often the instantiation technique “has been utilised to build the repository of Computer Aided Method Engineering environments”.[5] There are many tools for meta-process modeling.[6][7][8][9][10] Method tailoring [edit] In the literature, different terms refer to the notion of method adaptation, including ‘method tailoring’, ‘method fragment adaptation’ and ‘situational method engineering’. Method tailoring is defined as: A process or capability in which human agents through responsive changes in, and dynamic interplays between contexts, intentions, and method fragments determine a system development approach for a specific project situation.[11] Potentially, almost all agile methods are suitable for method tailoring. Even the DSDM method is being used for this purpose and has been successfully tailored in a CMM context.[12] Situation-appropriateness can be considered as a distinguishing characteristic between agile methods and traditional software development methods, with the latter being relatively much more rigid and prescriptive. The practical implication is that agile methods allow project teams to adapt working practices according to the needs of individual projects. Practices are concrete activities and products that are part of a method framework. At a more extreme level, the philosophy behind the method, consisting of a number of principles, could be adapted.[11] Situational method engineering [edit] Situational method engineering is the construction of methods which are tuned to specific situations of development projects.[13] It can be described as the creation of a new method by selecting appropriate method components from a repository of reusable method components, tailoring these method components as appropriate, and integrating these tailored method components to form the new situation-specific method. This enables the creation of development methods suitable for any development situation. Each system development starts then, with a method definition phase where the development method is constructed on the spot.[4] In case of mobile business development, there are methods available for specific parts of the business model design process and ICT development. Situational method engineering can be used to combine these methods into one unified method that adopts the characteristics of mobile ICT services. Method engineering process [edit] The developers of the IDEF modeling languages, Richard J. Mayer et al. (1995), have developed an early approach to method engineering from studying common method engineering practice and experience in developing other analysis and design methods. The following figure provides a process-oriented view of this approach. This image uses the IDEF3 Process Description Capture method to describe this process where boxes with verb phrases represent activities, arrows represent precedence relationships, and “exclusive or” conditions among possible paths are represented by the junction boxes labeled with an “X.”.[1] This image provides a general overview of the IDEF Method engineering process approach. According to this approach there are three basic strategies in method engineering:[1] Reuse: one of the basic strategies of methods engineering is reuse. Whenever possible, existing methods are adopted. Tailormade: find methods that can satisfy the identified needs with minor modification. This option is an attractive one if the modification does not require a fundamental change in the basic concepts or design goals of the method. New development: Only when neither of these options is viable should method designers seek to develop a new method. This basic strategies can be developed in a similar process of concept development Knowledge engineering approach [edit] A knowledge engineering approach is the predominant mechanism for method enhancement and new method development. In other words, with very few exceptions, method development involves isolating, documenting, and packaging existing practice for a given task in a form that promotes reliable success among practitioners. Expert attunements are first characterized in the form of basic intuitions and method concepts. These are often initially identified through analysis of the techniques, diagrams, and expressions used by experts. These discoveries aid in the search for existing methods that can be leveraged to support novice practitioners in acquiring the same attunements and skills.[1] New method development is accomplished by establishing the scope of the method, refining characterizations of the method concepts and intuitions, designing a procedure that provides both task accomplishment and basic apprenticeship support to novice practitioners, and developing a language(s) of expression. Method application techniques are then developed outlining guidelines for use in a stand-alone mode and in concert with other methods. Each element of the method then undergoes iterative refinement through both laboratory and field testing.[1] Method language design process [edit] The method language design process is highly iterative and experimental in nature. Unlike procedure development, where a set of heuristics and techniques from existing practice can be identified, merged, and refined, language designers rarely encounter well-developed graphical display or textual information capture mechanisms. When potentially reusable language structures can be found, they are often poorly defined or only partially suited to the needs of the method.[1] A critical factor in the design of a method language is clearly establishing the purpose and scope of the method. The purpose of the method establishes the needs the method must address. This is used to determine the expressive power required of the supporting language. The scope of the method establishes the range and depth of coverage which must also be established before one can design an appropriate language design strategy. Scope determination also involves deciding what cognitive activities will be supported through method application. For example, language design can be confined to only display the final results of method application (as in providing IDEF9 with graphical and textual language facilities that capture the logic and structure of constraints). Alternatively, there may be a need for in-process language support facilitating information collection and analysis. In those situations, specific language constructs may be designed to help method practitioners
source: wikipedia Software design is the process of conceptualizing how a software system will work before it is implemented or modified.[1] Software design also refers to the direct result of the design process – the concepts of how the software will work which consists of both design documentation and undocumented concepts. Software design usually is directed by goals for the resulting system and involves problem-solving and planning – including both high-level software architecture and low-level component and algorithm design. In terms of the waterfall development process, software design is the activity of following requirements specification and before coding.[2] General process [edit] The design process enables a designer to model various aspects of a software system before it exists. Creativity, past experience, a sense of what makes “good” software, and a commitment to quality are success factors for a competent design. However, the design process is not always a straightforward procedure. The software design model can be compared to an architected plan for a house. High-level plans represent the totality of the house (e.g., a three-dimensional rendering of the house). Lower-level plans provide guidance for constructing each detail (e.g., the plumbing lay). Similarly, the software design model provides a variety of views of the proposed software solution. Iterative Design for Software Components [edit] Software systems inherently deal with uncertainties, and the size of software components can significantly influence a system’s outcomes, both positively and negatively. Neal Ford and Mark Richards propose an iterative approach to address the challenge of identifying and right-sizing components. This method emphasizes continuous refinement as teams develop a more nuanced understanding of system behavior and requirements.[3] The approach typically involves a cycle with several stages:[3] A high-level partitioning strategy is established, often categorized as technical or domain-based. Guidelines for the smallest meaningful deployable unit, referred to as “quanta,” are defined. While these foundational decisions are made early, they may be revisited later in the cycle if necessary. Initial components are identified based on the established strategy. Requirements are assigned to the identified components. The roles and responsibilities of each component are analyzed to ensure clarity and minimize overlap. Architectural characteristics, such as scalability, fault tolerance, and maintainability, are evaluated. Components may be restructured based on feedback from development teams. This cycle serves as a general framework and can be adapted to different domains. Value [edit] Software design documentation may be reviewed or presented to allow constraints, specifications and even requirements to be adjusted prior to coding. Redesign may occur after a review of a programmed simulation or prototype. It is possible to design software in the process of coding, without a plan or requirement analysis,[4] but for more complex projects this is less feasible. A separate design prior to coding allows for multidisciplinary designers and subject-matter experts (SMEs) to collaborate with programmers in order to produce software that is useful and technically sound. Requirements analysis [edit] One component of software design is software requirements analysis (SRA). SRA is a part of the software development process that lists specifications used in software engineering. The output of the analysis is smaller problems to solve. In contrast, the design focuses on capabilities, and thus multiple designs for the same problem can exist. Depending on the environment, the design often varies, whether it is created from reliable frameworks or implemented with suitable design patterns. Artifacts [edit] A design process may include the production of artifacts such as flow chart, use case, Pseudocode, Unified Modeling Language model and other Fundamental modeling concepts. For user centered software, design may involve user experience design yielding a storyboard to help determine those specifications. Sometimes the output of a design process is design documentation. Design principles [edit] Basic design principles enable a software engineer to navigate the design process. Davis[5] suggests a set of principles for software design, which have been adapted and extended in the following list: The design process should not suffer from “tunnel vision”. A good designer should consider alternative approaches, judging each based on the requirements of the problem, the resources available to do the job. The design should be traceable to the analysis model. Because a single element of the design model can often be traced back to multiple requirements, it is necessary to have a means for tracking how requirements have been satisfied by the design model. The design should not reinvent the wheel. Systems are constructed using a set of design patterns, many of which have likely been encountered before. These patterns should always be chosen as an alternative to reinvention. Time is short and resources are limited; design time should be invested in representing (truly new) ideas by integrating patterns that already exist (when applicable). The design should “minimize the intellectual distance” between the software and the problem as it exists in the real world. That is, the structure of the software design should, whenever possible, mimic the structure of the problem domain. The design should exhibit uniformity and integration. A design is uniform if it appears fully coherent. In order to achieve this outcome, rules of style and format should be defined for a design team before design work begins. A design is integrated if care is taken in defining interfaces between design components. The design should be structured to accommodate change. The design concepts discussed in the next section enable a design to achieve this principle. The design should be structured to degrade gently, even when aberrant data, events, or operating conditions are encountered. Well-designed software should never “bomb”; it should be designed to accommodate unusual circumstances, and if it must terminate processing, it should do so in a graceful manner. Design is not coding, coding is not design. Even when detailed procedural designs are created for program components, the level of abstraction of the design model is higher than the source code. The only design decisions made at the coding level should address the small implementation details that enable the procedural design to be coded. The design should be assessed for quality as it is being created, not after the fact. A variety of design concepts and design measures are available to assist the designer in assessing quality throughout the development process. The design should be reviewed to minimize conceptual (semantic) errors. There is sometimes a tendency to focus on minutiae when the design is reviewed, missing the forest for the trees. A