软件是怎么开发出来的?
发布时间:2020-05-15

软件开发流程

先上一个软件开发的整体流程图,这就是大名鼎鼎的“瀑布模型(Waterfall Model)”。据说由温斯顿·罗伊斯(Winston Royce)在1970年提出。

瀑布模型

瀑布模型的特点为:上一阶段的结果为本阶段的输入,开发进程从一个阶段“流动”到下一个阶段。

(图中右侧括号中为每个阶段的输出物。)

一般软件售前人员对这个流程比较熟悉,这其中项目规划、可行性论证报告、需求说明书等,通常都由IT售前人员提供。

如果将瀑布模型的设计部分分为总体设计、详细设计两部分,即“软件开发的8个流程”:

1、问题定义阶段

用户提出一个软件开发需求以后,分析人员首先要明确软件的实现目标、规模及类型:如它是数据处理问题还是实时控制问题,是科学计算问题还是人工智能问题等。

2、可行性研究

基本任务:“对于上一个阶段所确定的问题有行得通的解决办法吗”?

内容包括经济可行性、技术可行性、法律可行性、不同方案。

结束标准:提出关于问题性质、工程目标和规模的问题定义书面报告;提出可行性研究报告。

3. 需求分析

基本任务:“为了解决这个问题,目标系统必须做什么?”

确定系统必须具有的功能和性能,系统要求的运行环境,并且预测系统发展的前景。

结束标准:软件需求规格说明书(specification)

4. 总体设计(概要设计)

基本任务:“概括地说,应如何解决这个问题?”

设计出实现目标系统的几种可能的方案。推荐一个最佳方案。

结束标准:概要设计文档

5. 详细设计

基本任务:“应该怎样具体地实现这个系统呢?”

结束标准:设计出程序的详细规格说明。

6. 编码

基本任务:写出正确的容易理解、容易维护的程序模块

结束标准:以某种程序设计语言表示的源程序清单

7. 测试(单元测试和综合测试)

基本任务:在设计测试用例的基础上检验软件的各个组成部分是否达到预定的要求。

结束标准:软件合格,能交付用户使用。

8. 软件维护

基本任务:使系统持久地满足用户的需要。

改正性维护,适应性维护,完善性维护,预防性维护。

虽然后来提出很多模型,如演化模型(evolutionary model)、增量模型(incremental model)、原型模型(prototyping model)等,但现在软件开发的流程,依然总体遵循瀑布模型。

如何搭建一个系统

说完流程,再说说系统是如何被开发人员搭建出来的。

系统的百度百科定义为:软件系统(Software Systems)是指由系统软件、支撑软件和应用软件组成的计算机软件系统,它是计算机系统中由软件组成的部分。

搭建系统可以分为三个步骤:环境部署、软件开发、软件部署。

系统部署步骤图

1、环境部署

准备服务器,部署操作系统、软件环境、安全软件、FTP服务器等。数据库和应用可分开布置在多个服务器,也可布置在同一服务器。

准备网络,分为内网和外网。外网需要购买公网IP和域名。

负责人:网络管理员

2、软件开发

包括开发语言选择、架构设计、数据库设计等工作,并进行编码、编译、测试、打包。

负责人:程序员

3、软件部署

将程序文件上传到服务器,进行部署、配置,成功后即可通过客户端访问项目。

负责人:软件实施

软件开发阶段

下面以java语言开发为例,简单讲讲程序员是如何进行软件开发的。

(本部分参考了“软帝在线”公众号、博客园“架构与我”的文章)。

1、新建java文件(或工程)

java源代码本质上就是普通的文本文件,可以用txt等工具编辑java代码(程序员一般采用源代码编辑工具,如:Notepad++;或集成开发工具IDE,如:Eclipse)。txt编写后需将文件扩展名改成java。

2、编写代码

以“Hello World”举例编写代码:

publicclassHelloWorld{publicstaticvoidmain(String[] args){System.out.println("Hello World");}}

该程序表示的意思是输出Hello World这样一段话。

3、编译程序

Java程序之所以能做到跨平台运行,是因为Java程序运行在JVM中的,然而JVM只能够识别字节码文件,而不能直接识别Java文件。所以需要先将Java文件编译成字节码文件,即class文件,然后字节码文件才能够在JVM中运行。

编译文件,可以通过手动执行Dos命令javac,或直接用编译器如Eclipse完成。

4、运行程序

可在Dos命令窗口中输入java命令,按回车,输出Hello World;

或在编译器的控制台中看到输出结果。

5、单元测试

单元测试(模块测试)是开发者对编写的一小段代码,检验一个很小的、很明确的功能是否正确。

通常采用JUnit框架(多数java开发环境已集成)进行测试,即所谓白盒测试,叫“白盒”是因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。

测试通过后,就完成了软件开发阶段,可以打包部署了。