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


简介

电脑应用软件开发指根据用户要求,基于PC平台建造出软件系统或者系统中软件部分的一个产品开发过程。软件一般是通过某种或数种程序设计语言、在特定的计算机平台上实现的。通常采用软件开发工具可以进行开发。

评判标准

如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

常见的应用开发环境

Microsoft Visual Studio

开发者 Microsoft
初始版本 Visual Studio 97 / 1997年
发行版本 2007年11月,微软发布了 Visual Studio 2008、2010年4月12,微软发布了 Visual Studio 2010、2012年9月12日,微软在西雅图发布 Visual Studio 2012、2013年11月13日,微软发布 Visual Studio 2013、2014年11月,微软发布 Visual Studio 2015 、2017年3月8日,微软发布 Visual Studio 2017、2019年4月2日,微软发布Visual Studio2019。
编程语言 C# 、C++、Visual Basic、F#、Python、HTML/JavaScript等
官方网站 https://visualstudio.microsoft.com/

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

Visual Studio是最流行的Windows平台应用程序的集成开发环境。最新版本为 Visual Studio 2019 版本,基于.NET Framework 4.5.2 。

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程序,比如控制台工具和服务器。

Eclipse

开发者 Eclipse基金会
初始版本 IO3.1(主要版本发行日期)/2005年
编程语言 java
官方网站 https://www.eclipse.org/downloads/

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台,用于通过插件组件构建开发环境。

易语言(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),等等。和其它敏捷方法相比,精益软件更重要的是不断完善开发过程的一种思维方式。因此,将精益模式与其他敏捷开发模式一起使用将会取得很好的效果。

组织结构

部门分工

由于不同公司之间部门分工不同 这里只介绍一般软件公司开发部门的人员结构以及人员的分工和职责

项目经理 (Project Manager,简称PM)

当项目总目标已经确定,项目经理的职责就是将目标项目分解,划分主要工作内容和工作量,确定项目阶段性目标的实现标志。 项目经理必须非常熟悉软件的开发流程,具有良好的管理能力与沟通协调能力,精通项目管理。工作内容主要为:

  • 负责团队人员组建、人员管理以及各种资源的分配和协调
  • 负责与客户协商,参与项目的需求分析
  • 负责与产品、架构、研发、质量保证等部门进行沟通,推动项目管理流程,让项目按计划稳步进行
  • 定期收集产品线项目度量数据并进行分析,以及持续改进流程及规定、数据统计、项目成绩评估

系统架构师

目前一般的系统架构师需要拥有5年或5年以上的软件开发经验,拥有大项目开发经验,非常熟悉软件的开发流程,能够理解和理性分析客户的业务需求,确立项目或产品的技术架构和技术路线。工作内容主要为:

  • 保证自己完整并准确的理解用户的需求。在需求规格说明书完成后,需求规格书必须得到架构师的认可
  • 确立架构。依据用户需求,架构师需要将系统整体分解为更小的子系统和组件,确立各层的接口,层与层之间的关系(此工作称为纵向分解),还要对统一逻辑层分块(此工作为横向分解),形成架构
  • 根据产品的架构选择主要的实现技术
  • 指定技术规格说明。保证开发者理解各自承担的子系统或者模块

UI设计师/美工

UI设计师需要具有创新精神,能够提出构思新颖、高度吸引力的创意设计,充分的理解产品的策划思路以及理念,结合自身经验实现产品的各种用户界面的视觉设计。建立完善产业的视觉设计规范,具有软件工程师背景和相应的编程能力。工作内容主要为:

  • 负责页面内容的设计、开发及维护
  • 产品的图形设计、交互界面设计以及用户测试/研究
  • 收集和分析用户对于GUI(图形用户界面 Graphical User Interface,简称GUI,又称图形用户接口)的需求,对页面进行优化,使得用户操作更趋于人性化

开发人员

开发人员要求掌握基本的软件工程开发思想,熟悉开发流程,至少掌握一门开发语言,将需求变现。工作内容主要为:

  • 负责软件的编码工作
  • 撰写有关技术文档
  • 协助测试工程师制定的测试计划,定位发现问题
  • 配合项目经理和系统架构师完成相关任务目标
  • 参与代码维护和备份的工作

测试人员

当整体编码或部分编码结束后将交付测试人员进行软件测试。 测试人员不仅需要了解测试专业技能,还要了解软件编程技能,才可以胜任诸如单元测试、集成测试、性能测试等难度较大的测试工作。工作内容为:

  • 负责产品的测试工作
  • 基于产品特点进行测试方案设计,包括测试框架优化及开发,测试代码实现等
  • 根据实际测试需求,进行测试流程或测试工具、框架方面的改进优化及创新

上述介绍为一般软件开发公司的开发部门人员结构和人员分工,很多公司还会有系统分析师、需求分析师、配置管理人员、数据库工程师等等,每个人员的分工更加细致,更加模块化,而这里就不赘述了。

开发流程

对于一个新项目的开发,从可行性研究到产品验收交付基本需要如下8个阶段

  • 可行性分析阶段
  • 立项阶段
  • 需求分析阶段
  • 开发策划阶段
  • 设计阶段
  • 编码实现阶段
  • 测试阶段
  • 验收交付阶段

以下将详细介绍各阶段的工作内容

可行性研究阶段

可行性研究通常是由公司技术负责人根据公司产品规划和市场需求等方面进行分析,在确立新项目之前的前期调研工作,可行性研究负责人会对产品的市场需求、技术发展、市场定位、功能需求、经济回报、进展需求、风险估计与分析等角度对产品的可行性进行可行性研究。提供产品的立项建议并撰写可行性分析报告。 本阶段需要提交的文档:

  • 项目可行性研究任务书
  • 项目可行性研究报告
  • 项目集成合同

立项阶段

可行性分析评审通过后,将交付开发部门的部门经理上报立项申请书,审批通过后下达开发任务书。批准立项后,一切进度应以立项申请书为准。 本阶段需要提交的文档:

  • 项目立项申请报告
  • 开发任务书

需求分析阶段

本阶段将与用户进行反复沟通,保证最终完整的理解用户的需求。由产品经理及其他人员配合撰写产品规格说明书,由项目经理负责撰写软件需求规格说明书。本阶段完毕后将对需求分析进行评审,提交需求分析评审报告。 本阶段需要提交的文档:

  • 产品规格说明书
  • 需求规格说明书
  • 需求分析评审报告

开发策划阶段

根据项目要求和软件需求,由配置管理人员配合项目经理编写质量保证计划、配置管理计划和项目综合计划。在制定计划时,应为计划、设计、测试、改错、再测试、变更、以及编制文档留出足够的时间。 本阶段涉及的文档:

  • 软件质量保证计划
  • 配置管理计划
  • 项目综合计划

设计阶段

概要设计

概要设计会将复杂的系统按照不同的功能进行模块化,理清模块之间的层次关系以及调用关系、确定模块间的接口以及用户界面。 本阶段涉及的文档:

  • 产品概要设计说明书
  • 数据库设计说明
  • 项目进度预计

详细设计

详细设计将对概要设计中产生的功能模块进行过程描述设计,设计功能模块的内部细节,包括算法和数据结构,为编写源代码提供必要的说明。 本阶段涉及的文档:

  • 软件详细设计说明书

编码实现阶段

根据软件详细设计说明、对各程序模块进行编码、调试、静态分析和单元测试,验证程序单元与设计说明的一致性。 本阶段涉及的文档:

  • 项目进度月报
  • 项目周计划和周总结
  • 项目开发人员周计划
  • 工作日志

测试阶段

单元测试

按照详细设计的结构,根据软件单元测试计划,对软件进行测试。 本阶段涉及的文档:

  • 测试计划
  • 测试设计
  • 测试问题报告单

集成测试

根据软件需求规格说明书中定义的全部功能和性能要求及集成测试计划,对软件进行集成测试。 本阶段涉及的文档:

  • 测试计划
  • 测试设计
  • 测试问题报告单

验收交付阶段

对完成测试的软件进行检查,确认软件达到了软件任务书的要求,验收通过的软件将向软件交办单位进行交付。 本阶段涉及的文档:

  • 验收报告

一般产品交付后软件开发公司都会进行系统维护等后续工作。

系统维护与版本更新

软件维护针对软件运行过程中发现的问题而进行改正维护,以及可能出现的由于软件运行环境的改变而进行的适应性维护,版本更新指未能满足用户部分需求或增加软件运行稳定而附加的更新等。 本阶段涉及的文档:

  • 软件维护报告
  • 软件更新报告

经营设计

需求分析

目标界定

总体结构设计

详细结构设计

参数设计

设计实施

原材料

主料

硬件

CPU

GPU

内存

硬盘

主板

显示器

键盘

鼠标

辅料

头发

可选原料

设计和规划

位置与环境

投资与评估

规模与功能

风格与形式

成本

税费

金融成本

原材料成本

房租成本

能耗成本

人工成本

设备折旧

收益管理

消费曲线

时间分布

空间分布

目标群体

容量控制

风险控制

行业

国内市场

产量

消费量

国际市场

产量

消费量

主要公司

标准

文档

编辑成员
33 人

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

评论(7)

你需要登录发表评论。
UpMuling 2020-02-08 00:04:23
加油!!
米灿宇 2020-01-08 11:01:09
加油!
Lesliewxj 2019-07-20 12:12:48
共同进步
刘权 2019-05-30 10:17:19
软件开发条目被拆分了,请各位编辑者注意
衡络 2019-05-30 10:15:46
共同完善,共同进步,加油!
12
回形针手册-icons