信息传输/软件/信息技术服务
电脑应用软件
开发
电脑应用软件开发


Stylesheet css/basic.css not found, using css/basic.less instead. Please contact developer of "starter" template.
Stylesheet ../dokuwiki/css/_search.css not found, using ../dokuwiki/css/_search.less instead. Please contact developer of "starter" template.
Stylesheet ../dokuwiki/css/_admin.css not found, using ../dokuwiki/css/_admin.less instead. Please contact developer of "starter" template.
Stylesheet css/structure.css not found, using css/structure.less instead. Please contact developer of "starter" template.
Stylesheet css/design.css not found, using css/design.less instead. Please contact developer of "starter" template.
Stylesheet css/content.css not found, using css/content.less instead. Please contact developer of "starter" template.
Stylesheet css/includes.css not found, using css/includes.less instead. Please contact developer of "starter" template.
Stylesheet css/title.css not found, using css/title.less instead. Please contact developer of "starter" template.
Stylesheet css/list.css not found, using css/list.less instead. Please contact developer of "starter" template.
Stylesheet css/auth.css not found, using css/auth.less instead. Please contact developer of "starter" template.
Stylesheet css/mobile.css not found, using css/mobile.less instead. Please contact developer of "starter" template.
Stylesheet css/print.css not found, using css/print.less instead. Please contact developer of "starter" template.

简介

针对用户不同实用需求进行的软件开发。例如一个音乐播放器,一个网页浏览器。通俗地说,就是你手机上或者电脑上的“APP(应用程序,Application的缩写)”。

评判标准

如CMMI 软件过程能力成熟度衡量标准。

能力成熟度等级

对软件过程的改进是在完成一个一个小的改进步骤基础之上不断进行的渐进过程,而不是一蹴而就的彻底革命。CMM结构把软件过程从无序到有序的进化过程分成5个阶段,并把这些阶段排序,形成5个逐层提高的等级。这5个成熟度等级定义了一个有序的尺度,用以测量软件组织的软件过程成熟度和评价其软件过程能力。此外,这些等级还能帮助软件组织把应做的改进工作排出优先次序。成熟度等级是妥善定义的向成熟软件组织前进途中的平台,每一个成熟度等级都为过程的继续改进提供一个台阶。CMM通过定义能力成熟度的5个等级,引导软件开发组织不断识别出其软件过程的缺陷,并指出应该做哪些改进。但是,它并不提供做这些改进的具体措施。 能力成熟度的5个等级从低到高是:初始级、可重复级、已定义级、已管理级和优化级。

  • 初始级
    软件过程的特征是无序的,有时甚至是混乱的。
  • 可重复级
    建立了基本的项目管理过程,以追踪成本、进度和功能性。必要的过程规范已经建立起来了,使得可以重复以前类似项目所取得的成功。
  • 已定义级
    用于管理和工程活动的软件过程已经文档化和标准化,并且已经集成到整个组织的软件过程中。所有项目都使用文档化的、组织批准的过程来开发和维护软件。这一级包含了第2级的所有特征。
  • 已管理级
    已收集了软件过程和产品质量的详细度量数据,使用这些详细的度量数据,能够定量地理解和控制软件过程和产品。这一级包含了第3级的所有特征。
  • 优化级
    通过定量的反馈能够实现持续的过程改进,这些反馈是从过程及对新想法和技术的测试中获得的。这一级包含了第4级的所有特征。

种类

相应的技术是根据相应的需求决定的,以下例举常用的技术:

  • Android Java,Kotlin,React Native,Weex,Flutter(Dart)
  • iOS/macOS Swift,Objective-C,Flutter
  • Windows QT(C++),AWT/Swing/JavaFx(Java),WPF,GTK+
  • Web HTML /CSS /JavaScript,PHP,Spring Framework(Java),Django (Python),Flask(Python), Go
  • Linux QT(C++),AWT/Swing/JavaFx(Java),GTK+
  • 数据存储 SQL Server,MySql,Oracle, Nosql
  • 缓存存储 Redis、MongoDB、HBase

常见的应用开发环境

Visual Studio

开发者 Microsoft
初始版本 Visual Studio 97 / 1997年
编程语言 C# 、C++、Visual Basic、F#、Python、HTML/JavaScript等
官方网站 https://visualstudio.microsoft.com/

Visual Studio是美国微软公司的开发工具包系列产品。Visual Studio是一个基本完整的开发工具集,它包括了整个软件生命周期中所需要的大部分工具,如UML工具、代码管控工具、集成开发环境(IDE)等等。所写的目标代码适用于微软支持的所有平台,包括Microsoft Windows、Windows Mobile、Windows CE、.NET Framework、.NET Compact Framework和Microsoft Silverlight 及Windows Phone。

IntelliJ IDEA

开发者 JetBrains
初始版本 1.0 / 2001年1月
编程语言 java
官方网站 https://www.jetbrains.com/idea/

IDEA 全称 IntelliJ IDEA,是java编程语言开发的集成环境。IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能代码助手、代码自动提示、重构、J2EE支持、各类版本工具(git、svn等)、JUnit、CVS整合、代码分析、 创新的GUI设计等方面的功能可以说是超常的。IDEA是JetBrains公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主。它的旗舰版本还支持HTML,CSS,PHP,MySQL,Python等。免费版只支持Python等少数语言。

Unity引擎

开发者 Unity Technologies
初始版本 1.0 / 2005年6月8日
编程语言 C# 、UnityScript(Unity 2017.2 已经弃用) 、BOO(2014年已经弃用)、C++(仅使用在核心引擎)
官方网站 https://www.unity.com/

Unity 是一款由 Unity Technologies 研发的跨平台2D / 3D 游戏引擎,可用于开发 Windows、MacOS 及 Linux 平台的单机游戏,PlayStation、XBox、Wii、3DS 和 任天堂Switch 等游戏主机平台的视频游戏,或是 iOS、Android 等移动设备的游戏。

Adobe XD

开发者 Adobe Systems Incorporated
初始版本 1.0 / 2017年10月18日
编程语言 未知
官方网站 https://www.adobe.com/cn/products/xd.html

Adobe XD是一站式UX/UI设计平台,在这款产品上面用户可以进行移动应用和网页设计与原型制作。同时它也是唯一一款结合设计与建立原型功能,并同时提供工业级性能的跨平台设计产品。设计师使用Adobe XD可以更高效准确的完成静态编译或者框架图到交互原型的转变。

Android Studio

开发者 Google Inc.
初始版本 0.3.1 / 2013年5月16日
编程语言 Java
官方网站 https://developer.android.google.cn/studio

Android Studio 是谷歌推出的一个Android集成开发工具,基于IntelliJ IDEA. 类似 Eclipse ADT,Android Studio 提供了集成的 Android 开发工具用于开发和调试。面向Android平台与Android平台的Wear OS(安卓手表)、Android TV(安卓电视)、Chrome OS(Chromebook)、Android Auto(搭载安卓系统车辆的音频应用)

Xcode

开发者 Apple Inc.
初始版本 1.0 / 2003年
编程语言 C、C++、Fortran、Objective-C、Objective-C++、Java、AppleScript、Python、Ruby 、GNU Pascal,Free Pascal, Ada, C#, Perl, Haskell 、D
官方网站 https://developer.apple.com/cn/xcode/

Xcode 是运行在操作系统Mac OS X上的集成开发工具(IDE),由Apple Inc开发。Xcode是开发 macOS 和 iOS 应用程序的最快捷的方式。Xcode 具有统一的用户界面设计,编码、测试、调试都在一个简单的窗口内完成。

Qt Creator

开发者 Digia
初始版本 QT 0.90(第一个公开发行版本) / 1995年5月20日
编程语言 C++
官方网站 https://blog.qt.io/

QT是一个1991年由Qt Company开发的跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。

易语言 (E语言)

开发者 吴涛
初始版本 易语言 1.0(第一个公开发行版本) / 2000年9月11日
编程语言 中文编程
官方网站 http://www.dywt.com.cn/

易语言是国内第一款使用中文代码进行编程的编程语言,其以“易”著称,以中国人的思维编写程序,不用再去学习西方思维,易语言的诞生极大的降低了编程的门槛和学习的难度。解决了一部分人“想学编程但英语又不好”的问题。该语言是可以支持跨平台,但实际支持跨平台的指令相对较少。

工作流程

瀑布模型

瀑布模型是由W.W.Royce在1970年最初提出的软件开发模型。因为开发过程难以逆转,需求常常难以明确,文档量巨大等原因,在现代软件开发中几乎被业界抛弃。

  1. 需求分析(Requirements) 分析用户提出的需求,得到其真实的需求,确定软件应该具备的功能。
  2. 设计(Design) 设计程序的结构,功能实现的方式。
  3. 实现(Implementation) 进行具体的编程开发,将设计转化为可以使用的程序。
  4. 测试(Verification) 测试软件是否正常运行,并达到了预期的目标。
  5. 维护(Maintenance) 进一步改善已有功能和增加需要的功能。

快速原型模型

快速原型的关键在于尽可能快速地建造出软件原型,一旦确定了客户的真正需求,所建造的原型将被丢弃。因此,原型系统的内部结构并不重要,重要的是必须迅速建立原型,随之迅速修改原型,以反映客户的需求。其步骤如下:

  • 建造一个快速原型 实现客户或未来的用户与系统的交互,用户或客户对原型进行评价,进一步细化待开发软件的需求。

快速原型通过逐步调整原型使其满足客户的要求,开发人员可以确定客户的真正需求是什么;

  • 针对客户评价细化开发 在第一步的基础上开发客户满意的软件产品。

显然,快速原型方法可以克服瀑布模型的缺点,减少由于软件需求不明确带来的开发风险,具有显著的效果。

增量模型

增量模型也称为渐增模型,如下所示。使用增量模型开发软件时,把软件产品作为一系列的增量构件来设计、编码、集成和测试。每个构件由多个相互作用的模块构成,并且能够完成特定的功能。

分析->设计->编码->测试
        分析->设计->编码->测试
                分析->设计->编码->测试
                        分析->设计->编码->测试

能在较短时间内向用户提交可完成一些有用的工作的产品,是增量模型的一个优点。增量模型的另一个优点是,逐步增加产品功能可以使用户有较充裕的时间学习和适应新产品,从而减少一个全新的软件可能给客户组织带来的冲击。

  • 使用增量模型的困难 在把每个新的增量构件集成到现有软件体系结构中时,必须不破坏原来已经开发出的产品。

此外,必须把软件的体系结构设计得便于按这种方式进行扩充,向现有产品中加入新构件的过程必须简单、方便。也就是说,软件体系结构必须是开放的。从长远观点看,具有开放结构的软件拥有真正的优势,这种软件的可维护性明显好于封闭结构的软件。

尽管采用增量模型比采用瀑布模型和快速原型模型需要更精心的设计,但在设计阶段多付出的劳动将在维护阶段获得回报。如果一个设计非常灵活而且足够开放、足以支持增量模型,那么这样的设计将允许在不破坏产品的情况下进行维护。

螺旋模型

使用原型及其他方法来尽量降低风险。理解这种模型的一个简便方法,是把它看做在每个阶段之前都增加了风险分析过程的快速原型模型。如图所示,图中带箭头的点画线的长度代表当前累计的开发费用,螺线旋过的角度值代表开发进度。

优点

  1. 对可选方案和约束条件的强调有利于已有软件的重用,也有助于把软件质量作为软件开发的一个重要目标
  2. 减少了过多测试(浪费资金)或测试不足(产品故障多)所带来的风险
  3. 维护只是模型的另一个周期,在维护和开发之间并没有本质区别。

螺旋模型主要适用于内部开发的大规模软件项目。如果进行风险分析的费用接近整个项目的经费预算,则风险分析是不可行的。事实上,项目越大,风险也越大,因此,进行风险分析的必要性也越大。 螺旋模型的主要优势在于,它是风险驱动的,但是,这也可能是它的一个弱点

喷泉模型

迭代是软件开发过程中普遍存在的一种内在属性。 经验表明,软件过程各个阶段之间的迭代或一个阶段内各个工作步骤之间的迭代,在面向对象范型中比在结构化范型中更常见。 如图所示的喷泉模型是典型的面向对象生命周期模型。“喷泉”这个词体现了面向对象软件开发过程迭代和无缝的特性。

为避免使用喷泉模型开发软件时开发过程过分无序,应该把一个线性过程(例如,快速原型模型或螺旋模型中的中心垂线)作为总目标。但是,同时也应该记住,面向对象范型本身要求经常对开发活动进行迭代或求精。

V模型

注重测试的模型。
流程:需求分析(这里把客户需求和需求分析合并)→概要设计→详细设计→软件编码→单元测试→集成测试→系统测试→验收测试
各个步骤和测试关于正当中的箭头左右一一对应。
价值:表明了测试过程中的不同级别以及测试的重要性。
缺点:忽视了测试对需求分析,系统设计的验证,需求的满足情况一直到后期的验收测试才被验证。

XP方法

XP方法是一种轻量(敏捷)、高效、低风险、柔性、可预测、科学而且充满乐趣的软件开发方式。
与其他方法论相比,其最大的不同在于:
(1)在更短的周期内,更早地提供具体、持续的反馈信息。
(2)迭代地进行计划编制,首先在最开始迅速生成一个总体计划,然后在整个项目开发过程中不断地发展它。
(3)依赖于自动测试程序来监控开发进度,并及早地捕获缺陷。
(4)依赖于口头交流、测试和源程序进行沟通。
(5)倡导持续的演化式的设计。
(6)依赖于开发团队内部的紧密协作。
(7)尽可能达到程序员短期利益和项目长期利益的平衡。
如图所示,XP由价值观、原则、实践和行为四个部分组成,它们彼此相互依赖、关联,并通过行为贯穿于整个生命周期。
原则:快速反馈,简单性假设,逐步修改,提倡更改,优质工作
12个最佳实践:计划游戏、小型发布、隐喻、简单设计、测试先行、重构、结对编程、集体代码所有制、持续集成、每周工作40小时、现场客户、编码标准。

敏捷软件开发

敏捷不是某一种方法论、过程或框架,也不是字面意义上的敏捷,而是一组价值观和原则。这些价值观和原则由17位软件开发领域的领军人物在2001年通过《敏捷宣言》传递给世界,也在那个时候宣告了全球敏捷开发运动的开始。 敏捷宣言:

个体与交互 重于 过程和工具

可用的软件 重于 完备的文档

客户协作 重于 合同谈判

响应变化 重于 遵循计划

敏捷12原则:

  1. 我们的最高目标是,通过尽早和持续地交付有价值的软件来满足客户。
  2. 欢迎对需求提出变更——即使是在项目开发后期。要善于利用需求变更,帮助客户获得竞争优势。
  3. 要不断交付可用的软件,周期从几周到几个月不等,且越短越好。
  4. 项目过程中,业务人员与开发人员必须在一起工作。
  5. 要善于激励项目人员,给他们以所需要的环境和支持,并相信他们能够完成任务。
  6. 无论是团队内还是团队间,最有效的沟通方法是面对面的交谈。
  7. 可用的软件是衡量进度的主要指标。
  8. 敏捷过程提倡可持续的开发。项目方、开发人员和用户应该能够保持持续稳定的进展速度。
  9. 对技术的精益求精以及对设计的不断完善将提升敏捷性。
  10. 要做到简洁,即尽最大可能减少不必要的工作。这是一门艺术。
  11. 最佳的架构、需求和设计出自于自组织的团队。
  12. 团队要定期反省如何能够做到更有效,并相应地调整团队的行为。

  符合敏捷价值观及原则的主流敏捷开发方法包括:极限编程(eXtreme Prgramming),精益软件开发(Lean Software Development),动态系统开发方法(DSDM),Scrum等等。

一.敏捷的优势

  敏捷方法主要通过迭代过程来应对需求和技术的变化。在每一次迭代周期结束时,都应交付用户一个可用的,可部署的系统,使得用户可以尽早的体验系统并给予反馈。每次迭代周期应尽可能短,以便能及时频繁地处理需求变化和用户反馈。
  采用敏捷开发方式将会给企业和用户带来诸多好处:

  交付用户需要的软件。它将带给用户其真正需要的软件系统。瀑布模式通常会在产品的起点与最终结果之间划出一条直线,然后沿着直线不断往前走。然而当项目完成时,用户通常会发现终点已经不是他们真正的目的地。而敏捷方法则采用小步的方式前行,每走完一步,都需要及时调整并确定下一步的方向,直到抵达真正的终点。

  更高的质量。敏捷对迭代周期的产出有严格的质量要求。敏捷提倡使用测试驱动开发(test-driven development),即在正式开发功能代码之前,先开发该功能的测试代码。这为敏捷项目的整个开发周期提供了可靠的质量保证。

  更快的将产品推向市场。敏捷提倡避免大规模的前期计划,认为那是一种很大的浪费。因为很多预先的计划的东西都会发生改变,大而全的前期计划通常是徒劳的。敏捷提倡逐步完善的计划。敏捷团队只专注于开发项目中当前最需要的、最具价值的部分。这样能尽早地投入开发,缩短产品上市的时间,或者说使得软件可以更早的交付使用。

二. 主要的敏捷方法 2.1 Scrum   Scrum最早由Jeff Sutherland在1993年提出,Ken Schwaber 在1995年OOPSLA会议上形式化了Scrum开发过程,并向业界公布。目前Scrum是应用最为广泛的敏捷方法之一。Scrum中的主要角色包括:

  Scrum Master: Scrum教练和团队带头人,确保团队合理的运作Scrum,并帮助团队扫除实施中的障碍;

  产品负责人: 确定产品的方向和愿景,定义产品发布的内容、优先级及交付时间,为产品投资报酬率负责;

  开发团队: 一个跨职能的小团队,人数5-9人,团队拥有交付可用软件需要的各种技能。

  在每一次冲刺或迭代当中,开发团队创建可用的软件的一个增量。每一个迭代所要实现的功能来自产品订单。产品订单按照优先级排列工作需求。在迭代计划会议中,产品负责人告诉开发团队需要完成产品订单中的哪些订单项。开发团队决定在下一次迭代中他们能够承诺完成多少订单项。在迭代的过程中,没有人能够变更迭代订单,这意味着在一个迭代中需求是被冻结的。

  Scrum中通过三个活动进行检验和适应:每日例会检验Sprint目标的进展,做出调整,从而优化次日的工作价值;Sprint评审和计划会议检验发布目标的进展,做出调整,从而优化下一个Sprint的工作价值;Sprint回顾会议是用来回顾已经完成的Sprint,并且确定做出什么样的改善可以使接下来的Sprint更加高效、更加令人满意,并且工作更快乐。

2.2 极限编程(eXtreme Prgramming)   极限编程(eXtreme Prgramming),是一种软件工程方法学。如同其他敏捷方法学,极限编程和传统方法学的本质不同在于它更强调可适应性而不是可预测性。极限编程的支持者认为软件需求的不断变化是很自然的现象,是软件项目开发中不可避免的、也是应该欣然接受的现象;他们相信,和传统的在项目起始阶段定义好所有需求再费尽心思的控制变化的方法相比,有能力在项目周期的任何阶段去适应变化,将是更加现实更加有效的方法。极限编程规定了一些实践和简单规则,包括:编写用户故事、架构规范、实施规划、迭代计划、代码开发、单元测试、验收测试等等。

  像所有其他敏捷方法一样,极限编程预期并积极接受变化。它具有以下的价值观或原则:

  互动交流。团队成员不是通过文档来交流,文档不是必须的。团队成员之间通过日常沟通、简单设计、测试、系统隐喻以及代码本身来沟通产品需求和系统设计。

  反馈。反馈是一种信息的交流,能使系统更加完善。反馈也和交流密切相关,客户的实际使用、功能测试、单元测试等都能为开发团队提供反馈信息。同时,开发团队也可以通过估计和设计用户案例的方式将信息反馈给客户。

  简单。极限编程提倡简单的设计,简单的解决方案。极限编程总是从一个简单的系统入手,并且只创建今天可能需要的功能模块。因为它认为,创建明天需要的功能模块可能会由于需求的变化而成为浪费。

  勇气。极限编程理论中的“系统开发中的勇气”最好用一组实践来诠释。其中之一就是“只为今天的需求设计以及编码,不要考虑明天”这条戒律。这是努力避免陷入设计的泥潭、而在其他问题上花费了太多不必要的精力。勇气使得开发人员在需要重构他们的代码时能感到舒适。这意味着重新审查现有系统并完善它会使得以后出现的变化需求更容易被实现。另一个勇气的例子是了解什么时候应该完全丢弃现有的代码。每个程序员都有这样的经历:他们花了一整天的时间纠缠于自己设计和代码中的一个复杂的难题却无所得,而第二天回来以一个全新而清醒的角度来考虑,在半小时内就轻松解决了问题。

  团队。极限编程提倡团队合作,相互尊重。极限编程以建立并激励团队为一项重要任务。同时它把互相尊重和实际的开发习惯相结合。比如,为了尊重其他团队成员的劳动成果,每个人不得将未通过单元测试的代码集成到系统中。因此,每个人的代码质量必须过关。

2.3 精益软件开发(Lean Software Development)   精益思想的核心思想是查明和消除浪费。在软件开发过程中,bugs,没用的功能,等待以及其他任何对实现结果没有益处的东西都是浪费。浪费及其源头必须被分析查明,然后设法消除。精益开发的其它原则包括:

  强调学习。软件开发过程是一个不断学习的过程。每个团队成员都需要从日常的失败,互动,交流以及信息反馈中学习,不断改进所开发的产品和开发效率。

  在最后时刻做决定。这样可以避免在可能改变的事情上做无谓的努力,从而有效的避免浪费。

  用最快的速度交付用户。较短的迭代周期能够加速产品的开发及交付,加快交流,提高生产力。

  给团队自主权。激励团队并让所有团队成员自我管理始终是所有敏捷方法获得成功的基本因素之一。

  诚信。确保整个系统正常工作,真正满足客户的需求是整个团队需要努力坚持的诚信和和对用户的承诺。

  全局观。精益开发强调整体优化的系统。无论开发的组织还是被开发的产品, 从整体上考虑优化比从各个局部去优化更高效。

  对于上述的每个原则,都有一些相应的实现工具。这些工具包括价值流图(Value Stream Mapping),基于集合的开发(set-based development),拉系统(pull system),排队论(queuing theory),等等。和其它敏捷方法相比,精益软件更重要的是不断完善开发过程的一种思维方式。因此,将精益模式与其他敏捷开发模式一起使用将会取得很好的效果。

组织结构

部门分工

人员分工

经营设计

需求分析

目标界定

总体结构设计

详细结构设计

参数设计

设计实施

原材料

主料

辅料

可选原料

设计和规划

位置与环境

投资与评估

规模与功能

风格与形式

成本

税费

金融成本

原材料成本

房租成本

能耗成本

人工成本

设备折旧

收益管理

消费曲线

时间分布

空间分布

目标群体

容量控制

风险控制

行业

国内市场

产量

消费量

国际市场

产量

消费量

主要公司

标准

这里存放条目相关的国家标准

文档

这里存放于条目相关的其他文档

编辑成员
30 人

木又, Leslie, 你怎么可以这么萌!, Gromy, shuhari, pluvet, 颠覆者, MikeWu597, 穆锋, 人生风云, Ahren, AAA, 劳伦斯, Manli439, Wang.T, 热心青年, RiceMarch, Johnson, 明月逐人归, Sober, Mojo Jojo, Gyyza, 海随风, Mike, sheepthefather, Vandagod, 八鬼骑士, SmallBlackEgg, 乐天, 黑煤球

评论(5)

你需要登录发表评论。
Lesliewxj 2019-07-20 12:12:48
共同进步
刘权 2019-05-30 10:17:19
软件开发条目被拆分了,请各位编辑者注意
衡络 2019-05-30 10:15:46
共同完善,共同进步,加油!
bendi 2019-05-30 10:15:46
人多力量大:)
Hrenx 2019-05-30 10:15:46
哇,完整的很快速啊,前几天还什么都没有的。
1
回形针手册-icons