Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
Software design
(section)
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
== Design considerations == There are many aspects to consider in the design of a piece of software. The importance of each consideration should reflect the goals and expectations that the software is being created to meet. Some of these aspects are: * Compatibility - The software is able to operate with other products that are designed for interoperability with another product. For example, a piece of software may be backward-compatible with an older version of itself. * [[Extensibility]] - New capabilities can be added to the software without major changes to the underlying architecture. * [[Modularity]] - the resulting software comprises well defined, independent components which leads to better maintainability. The components could be then implemented and tested in isolation before being integrated to form a desired software system. This allows division of work in a software development project. * [[Fault-tolerance]] - The software is resistant to and able to recover from component failure. * [[Maintainability]] - A measure of how easily bug fixes or functional modifications can be accomplished. High maintainability can be the product of modularity and extensibility. * Reliability ([[Software durability]]) - The software is able to perform a required function under stated conditions for a specified period of time. * [[Reusability]] - The ability to use some or all of the aspects of the preexisting software in other projects with little to no modification. * [[Fault-tolerant system|Robustness]] - The software is able to operate under stress or tolerate unpredictable or invalid input. For example, it can be designed with resilience to low memory conditions. * [[Computer security|Security]] - The software is able to withstand and resist hostile acts and influences. * [[Usability]] - The software [[user interface]] must be usable for its target user/audience. Default values for the parameters must be chosen so that they are a good choice for the majority of the users.<ref>{{cite book|editor-last=Carroll|editor-first=John|title=Scenario-Based Design: Envisioning Work and Technology in System Development|year=1995|publisher=John Wiley & Sons|location=New York|isbn=0471076597}}</ref> * [[Computer performance|Performance]] - The software performs its tasks within a time-frame that is acceptable for the user, and does not require too much memory. * [[Software portability|Portability]] - The software should be usable across a number of different conditions and environments. * [[Scalability]] - The software adapts well to increasing data or added features or number of users. According to Marc Brooker: "a system is scalable in the range where [[marginal cost]] of additional workload is nearly constant." [[Serverless computing|Serverless]] technologies fit this definition but you need to consider total cost of ownership not just the infra cost.<ref>{{Cite book |title=Building Serverless Applications on Knative |publisher=O'Reilly Media |isbn=9781098142049}}</ref>
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)