10.3: 软件开发
- Page ID
- 172335
软件开发
上面讨论的许多方法都用于管理软件开发,因为编程很复杂,有时错误很难发现。 我们在第 2 章中了解到软件是通过编程创建的,而编程是使用编程语言为数字设备创建一组逻辑指令的过程。 编程过程有时被称为 “编码”,因为编程语言的语法不是每个人都能理解的形式,而是在 “代码” 中。
开发好软件的过程通常不像坐下来写一些代码那么简单。 没错,有时候程序员可以快速编写一个简短的程序来解决需求。 但是在大多数情况下,软件的创建是一个资源密集型过程,涉及组织中的几个不同的人群。 在以下各节中,我们将回顾几种不同的软件开发方法。
侧边栏:项目管理质量三角形
在开发软件或任何产品或服务时,开发人员与不同的利益相关者群体(例如管理层、用户和投资者)之间存在紧张关系。 图 10.5 说明了项目经理需要权衡的三个要求之间的矛盾:时间、成本和质量。 从软件开发的速度(时间)到要花多少钱(成本),再到构建效果如何(质量)。 质量三角形是一个简单的概念。 它指出,您只能解决以下两个问题:正在开发的任何产品或服务的时间、成本和质量。
那么,你只能解决三个问题中的两个是什么意思呢? 这意味着成品的质量取决于三个变量:范围、时间表和分配的预算。 这三个变量中任何一个的变化都会影响另外两个变量,从而影响质量。
例如,如果添加了一项功能,但没有在计划中增加额外的开发和测试时间,则即使增加了更多的资金,代码的质量也可能会受到影响。 有时候,进行权衡甚至不可行。 例如,在成员不堪重负以至于没有时间管理或培训新员工的项目中增加更多人员。 总的来说,这个模型可以帮助我们了解在开发新产品和服务时必须做出的权衡。
编程语言
项目团队需要做出的重要决定之一是决定在开发过程中要使用哪种编程语言和相关工具。 如第 3 章所述,软件开发人员使用几种编程语言之一创建软件。 编程语言是一种形式语言,它为程序员提供了一种创建结构化代码的方法,以计算机硬件可以执行的格式传递逻辑。 在过去的几十年中,许多不同的编程语言已经发展起来,可以满足许多不同的需求。
没有一种方法可以对语言进行分类。 尽管如此,它们通常按类型(即查询、脚本编写)分组,或者按时间顺序分组,按引入时间(例如,Fortran 于 1954 年引入)、它们的 “生成”、机器代码的翻译方式或执行方式进行分组。 在本章中,我们将讨论几个类别。
几代编程语言
早期的语言是特定于必须编程的硬件类型;每种类型的计算机硬件都有不同的低级编程语言(事实上,即使在今天,较低级别的编程语言也存在差异,尽管更高级别的编程语言现在掩盖了它们)。 在这些早期语言中,必须逐行输入精确的指令,这是一个繁琐的过程。
下面总结了一些共同特征,以说明这几代人之间的一些差异:
第一代 (1GL) |
第二代 (2GL) |
第三代 (3GL) |
第四代 (4GL) |
第五代 (5GL) |
|
---|---|---|---|---|---|
时间介绍了(美国东部标准时间)。 |
1940 年代或更早 |
1950 |
1950 年代至 1970 年代 |
1970 年代至 1990 年代 |
1980 年代至 1900 年代 |
指令 |
它们由 0 和 1 的二进制数组成 |
使用一组人类和程序员均可阅读的语法 |
语法更加结构化,由更像人类的语言组成 |
该语法对非程序员很友好 |
仍在进行中。 |
类别 |
取决于机器 机器代码 |
取决于机器 低级汇编语言 |
独立于机器 高等级 |
独立于机器 高级抽象, 高级 3GL |
逻辑编程 |
优势 |
速度非常快,不需要 “转换” 为 0 和 1 |
与学习机器代码相比,程序员可以更轻松地读取和编写代码 |
更加独立于机器 对程序员更友好 通用 |
简单易学 |
可能不需要程序员来编写程序 |
缺点 |
取决于机器,不是便携式的 |
必须转换为机器代码,仍然依赖于机器 |
可能要经过多个步骤才能转换为机器代码 |
更专业 |
还处于采用阶段的初期 |
今天的用法 |
如果需要直接与硬件交互,例如驱动程序(即 USB 驱动程序) |
如果需要直接与硬件交互,例如驱动程序(即 USB 驱动程序) |
现代 3GL 更常用。 早期的 3GL 用于维护现有的商业计划或科学计划 |
数据库、网页开发 |
限量 视觉工具,人工智能研究 |
示例 |
机器语言 |
汇编语言 |
早期的 3GL:COBOL、Fortran 现代 3PLS:C、C++、Java、Javascrip |
Perl、php、Python、SQL、Ruby |
水星,OPS5 |
Statista.com报告说,到2020年初,Javascript已成为全球开发者中最常用的语言。 要查看完整列表,请访问 Statista.com 了解更多详情。
侧边栏:语言示例
第一代语言:机器码。 在机器代码中,编程是通过使用二进制代码直接设置实际一和零(位)来完成的。 这是一个示例程序
使用机器语言添加 1234 和 4321:
10111001 |
00000000 |
11010010 |
10100001 |
00000100 |
00000000 |
10001001 |
00000000 |
00001110 |
10001011 |
00000000 |
00011110 |
00000000 |
00011110 |
00000000 |
00000010 |
10111001 |
00000000 |
11100001 |
00000011 |
00010000 |
11000011 |
10001001 |
10100011 |
00001110 |
00000100 |
00000010 |
00000000 |
第二代语言。 汇编语言为机器代码指令提供类似英语的短语,使其更易于编程。 汇编语言程序必须通过汇编程序运行,汇编程序会将其转换为机器代码。 以下是使用汇编语言添加 1234 和 4321 的示例程序:
MOV CX,1234 MOV DS: [0],CX MOV CX,4321 MOV AX,DS: [0]
MOV BOX,DS: [2] ADD AX,BOX
移动广告:[4],MAX
第三代语言并不特定于它们运行的硬件类型,更像是口头语言。 大多数第三代语言都必须进行编译,这是将它们转换为机器代码的过程。 著名的第三代语言包括 BASIC、C、Pascal 和 Java。 以下是使用 BASIC 的示例:
A=1234 B=4321 C=A+B 结束
第四代语言是一类编程工具,可使用直观的界面和环境实现快速应用程序开发。 很多时候,第四代语言有特定的用途,例如数据库交互或报告写作。 这些工具可供那些几乎没有接受过正式编程培训的人使用,并允许快速开发应用程序和/或功能。 第四代语言的示例包括 Clipper、FOCUS、FoxPro、SQL 和 SPSS。
为什么有人在需要更多工作时想用较低级别的语言进行编程? 答案与为什么有些人更喜欢驾驶变速杆汽车而不是自动变速箱的原因类似:控制和效率。 较低级别的语言,例如汇编语言,效率要高得多,执行速度也要快得多。 您也可以更好地控制硬件。 有时,将较高和较低级别的语言混合在一起以获得两全其美的效果:程序员将使用更高级别的语言创建整体结构和接口,但在程序中需要更高精度的任意位置使用较低级别的语言。
编译与解释
除了根据编程语言的生成对其进行分类外,还可以将其归类为编译或解释语言。 据我们所知,计算机语言是以人类可读的形式编写的。 在编译语言中,程序代码被翻译成一种机器可读的形式,称为可以在硬件上运行的可执行文件。 一些著名的编译语言包括 C、C++ 和 COBOL。
解释型语言需要安装运行时程序才能执行。 然后,这个运行时程序逐行解释程序代码并运行它。 解释型语言通常更易于使用,但速度较慢,需要更多的系统资源。 流行的解释性语言的示例包括 BASIC、PHP、PERL 和 Python。 诸如HTML和Javascript之类的网络语言也将被视为解释型语言,因为它们需要浏览器才能运行。
Java 编程语言是这种分类的一个有趣的例外,因为它实际上是两者的混合体。 使用 Java 编写的程序经过部分编译以创建 Java 虚拟机 (JVM) 可以理解的程序。 每种类型的操作系统都有自己的 JVM,必须安装该虚拟机,从而允许 Java 程序在许多不同类型的操作系统上运行。
程序化与面向对象
过程编程语言旨在允许程序员定义程序的特定起点,然后按顺序执行。 所有早期的编程语言都是这样工作的。 随着用户界面变得更具交互性和图形化,编程语言的发展以允许用户定义程序的流程是有意义的。 面向对象的编程语言被设置为定义可以根据用户输入采取某些操作的 “对象”。 换句话说,程序程序侧重于要执行的活动顺序;面向对象的程序侧重于被操纵的不同项目。
例如,在人力资源系统中,需要一个 “EMPLOYEE” 对象。 如果程序需要检索或设置有关员工的数据,它将首先在程序中创建一个员工对象,然后设置或检索所需的值。 每个对象都有属性,这些属性是与该对象相关的描述性字段。 在以下示例中,员工对象的属性为 “姓名”、“员工编号”、“出生日期” 和 “雇用日期”。 一个对象还有 “方法”,可以执行与该对象相关的操作。 在示例中,有两种方法。 第一个是 “ComputePay ()”,它将返回当前欠员工的金额。 第二个是 “listEmployees ()”,它将检索向该员工报告的员工名单。
员工对象
对象:员工 |
First_Name 姓氏 员工 ID 出生日期 雇用日期 |
ComputePay () 列出员工 () |
编程工具
在开发 IS 期间需要做出的另一个决定是编写程序所需的一组工具。 要编写程序,程序员需要工具来输入代码,检查代码的语法,以及一些将其代码转换为机器代码的方法。 为了提高编程效率,程序员使用集成工具,例如集成开发环境 (IDE) 或计算机辅助软件工程 (CASE) 工具。
集成开发环境 (IDE)
对于大多数编程语言,可以使用 IDE。 IDE 为程序员提供各种工具,所有工具都集中在一个地方,具有一致的用户界面。 IDE 通常包括:
- 用于编写程序的编辑器,该程序将对编程语言中的关键字进行颜色编码或突出显示;
- 提供有关编程语言的详细文档的帮助系统;
- 编译器/解释器,它将允许程序员运行程序;
- 调试工具,它将向程序员提供有关程序执行的详细信息,以解决代码中的问题;以及
- 签入/签出机制允许一组程序员在项目上共同工作,而不必写下彼此的代码更改。
Statista.com报告称,从2018年到2019年,全球有80%的软件开发人员使用GitHub等源代码协作工具,77%使用Eclipse等独立IDE,69%使用微软Visual Studio。 如需完整列表,请访问 stat ista.com 。
计算机辅助软件工程 (CASE) 工具
尽管 IDE 提供了多种工具来帮助程序员编写程序,但仍必须编写代码。 计算机辅助软件工程 (CASE) 工具使设计人员无需编程或无需编程即可开发软件。 相反,CASE 工具为设计人员编写代码。 CASE 工具有很多种类,但它们的目标是根据设计人员的输入生成高质量的代码。
构建与购买或订阅
当组织决定需要开发新的软件程序时,他们必须确定自己构建软件程序还是从外部公司购买更有意义。 这是 “建造还是购买” 的决定。 现在,这个 “购买” 决定包括订阅而不是直接购买的选项。
从外部公司购买软件有很多好处。 首先,购买软件包的成本通常比构建软件包便宜。 其次,购买软件包时,它的可用速度比内部构建软件包要快得多。 第三,公司或消费者支付一次性费用,即可在许可证允许的时间内保留软件,也可能在您拥有软件的时间长度内,甚至在供应商停止支持该软件之后。 软件应用程序可能需要数月或数年的时间才能构建;购买的软件包可以在一个月内启动并运行。 购买的软件包已经过测试,许多错误已经解决,可以购买额外的支持合同。 系统集成商的职责是使各种购买的系统与组织中的现有系统协同工作。
购买软件也有缺点。 首先,竞争对手可以使用您正在使用的相同软件。 如果一家公司试图根据购买的软件中的业务流程来使自己脱颖而出,那么如果其竞争对手使用相同的软件,则很难做到这一点。 购买软件的另一个缺点是定制过程。 如果您从供应商处购买软件包然后对其进行自定义,则每次供应商提供升级时都必须管理这些自定义。 随着安全和隐私的提高,公司可能缺乏快速响应的内部专业知识。 安装各种更新和处理遇到的错误也可能是 IT 人员和用户的负担。 这可能会成为管理上的麻烦。
混合解决方案是订阅。 订阅意味着,供应商现在不再单独销售产品,而是提供一种订阅模式,用户可以定期租用和付款,例如按月、按年。 租赁模式已被用于电影、书籍等许多其他行业,最近还进入了高科技行业。 正如我们在前面的章节中所讨论的那样,公司和消费者现在几乎可以订阅所有内容,从Google Drive或Microsoft Onedrive等电子邮件平台中的额外存储空间到Quickbooks、Microsoft Office 365等软件,再到亚马逊AWS等托管和网络支持服务。 供应商受益于将一次性销售转化为定期销售并提高客户忠诚度。 客户可以从安装更新、自动处理软件支持和更新这一麻烦中受益,因为他们知道软件会不断更新新功能。 现在,订阅模式已成为消费者和企业的普遍选择。
即使一个组织决定购买或订阅,通过许多相同的分析来比较自己构建它的成本和收益仍然是有意义的。 这是一项重要的决定,可能会对组织产生长期的战略影响。
网络服务
第 3 章指出,向云计算的迁移允许将软件视为一种服务。 如今,一种选择是公司可以许可其他公司提供的功能,而不是自己编写代码。 它们被称为 Web 服务,它们可以极大地简化网站功能的添加。
例如,假设一家公司希望提供一张地图,显示已拨打支持热线的某人的位置。 通过使用谷歌地图 API 网络服务,他们可以在自己的应用程序中直接构建谷歌地图。 或者,制鞋公司可以通过提供零售商可以直接嵌入其网站的鞋子尺码的网络服务,使零售商更容易在网上销售鞋子。
Web 服务可能会模糊 “构建与购买” 之间的界限。 公司可以选择自己构建软件应用程序,但随后从供应商那里购买功能以补充其系统。
最终用户计算或影子 IT
在许多组织中,应用程序开发不仅限于信息技术部门的程序员和分析人员。 尤其是在大型组织中,其他部门会开发自己的部门特定应用程序。 构建这些软件的人不一定受过编程或应用程序开发方面的培训,但他们往往精通计算机。 例如,精通特定软件包(例如电子表格或数据库包)的人员可能会被要求构建较小的应用程序供其自己的部门使用。 这种现象被称为最终用户开发、终端用户计算或影子 IT。
终端用户计算可以为组织带来许多优势。 首先,它使应用程序的开发更接近将要使用它们的人。 由于 IT 部门有时会大量积压,因此它也提供了一种更快地创建软件的方法。 许多组织鼓励终端用户计算以减轻 IT 部门的压力。
最终用户计算也有其缺点。 如果组织内的部门是
开发自己的应用程序,该组织最终可能会得到几个执行相似功能的应用程序,这种方法效率低下,因为它会重复工作。 有时,同一应用程序的这些不同版本会提供不同的结果,从而在部门交互时造成混乱。 这些应用程序通常由很少或根本没有接受过正规编程培训的人开发。 在这些情况下,开发的软件可能存在必须由IT部门解决的问题。 最终用户计算可能对组织有利,但应该对其进行管理。 IT 部门应为想要创建自己的解决方案的部门制定指导方针并提供工具。
部门之间的沟通将大大有助于成功使用最终用户计算。
侧边栏:构建移动应用程序
软件开发通常包括构建在台式机、服务器或大型机上运行的应用程序。 但是,网络的商业化创造了额外的软件开发类别,例如网页设计、内容开发、网络服务器。 与网络相关的互联网开发工作现在称为网络开发。 早期的网站开发活动包括建立网站以支持企业或建立电子商务系统,并使诸如HTML之类的技术在网页设计师中非常受欢迎,Perl、Python、Java等编程语言在程序员中很受欢迎。 现在,消费者无需学习 HTML 或雇用网页设计师即可购买预打包的网站。 例如,想要创办面包店的企业家现在可以购买带有购物车的预建网站,所有人都可以开始创业,而无需花费昂贵的费用来自己建造。
随着手机的兴起,一种称为移动应用程序开发的新型软件开发应运而生。 St@@ atista.com 预测,移动应用程序收入将从2014年的980亿美元大幅增加到2023年的9,350亿美元以上。 这意味着对移动应用程序开发人员的需求也增加了。
在许多方面,为移动设备构建应用程序与为传统计算机构建应用程序相同。 了解应用程序需求、设计界面、与用户合作——所有这些步骤仍然需要执行。 选择正确的编程语言和工具的决策过程保持不变。
但是,程序员在为移动设备构建应用程序时必须考虑一些特定的差异。 它们是:
- 用户界面必须有所不同,以适应不同的屏幕尺寸
- 使用手指作为指针或在桌面上键入文本,而不是键盘和鼠标
- 必须满足操作系统供应商的特定要求,才能将该应用程序纳入每个商店(即苹果的App Store或Android的Play商店)
- 与桌面或云端集成以同步数据
- 与其他内置硬件(如摄像头、生物识别或运动传感器)紧密集成。
- 可用内存、存储空间和处理能力减少
现在,移动应用程序几乎适用于所有内容,并且还在继续增长。
参考文献:
Javascript 是全球开发者中最常用的语言(2020 年)。 检索于 2020 年 12 月 10 日,来自 S atistica.com
谷歌地图平台文档。 检索于 2020 年 12 月 10 日,来自 https://developers.google.com/maps/documentation
从 2018 年到 2019 年(2020 年),全球软件开发人员使用的编程/开发工具。 检索于 2020 年 12 月 10 日,来自 S tatista.com
2014 年至 2023 年(2010 年)的全球移动应用程序收入 检索于 2020 年 12 月 10 日,来自 Statista.com