zoukankan      html  css  js  c++  java
  • 浅谈工程化软件开发和维护(瞎写的凑活看看)

    写这篇论文的初衷是来自老师的一个考试题目,在三个题目里我选择了这个,(结合实际案例,阐述为什么要采用工程的概念、原理、技术和方法来开发和维护软件)。题目不难,工程化思想在软件开发和维护的作用。以下是论文部分,很多东西都很肤浅,很多概念我也不是很清楚,也有很多地方是在网上查找到不能算我个人的东西,当个玩物看看就好。各位看官,如有雷同,莫怪莫怪。

    浅谈工程化软件开发和维护

     

    摘要:工程化思想如今被广泛应用在各行各业的生产活动,同样在软件的开发和维护过程中也得到了普及。工程化的开发和维护从提出和实现至今展现出了它不俗的威力。

    关键词:工程化思想;开发和维护

    1. 工程化的概念、原理、技术和方法

    工程化即系统化、模块化、规范化的一个过程。指将具有一定规模数量的单个系统或功能部件,按照一定的规范,组合成一个模块鲜明、系统性强的整体。工程化往往包含大量学科和学科分支的知识,是一个复杂的系统工程过程。

    1.1 系统化、模块化、规范化

    系统化,指采用一定的方式,对已经制定颁布的规范性文件或者流程进行归类、整理或加工,使其集中起来作有系统的排列,以便于使用的活动。

    模块化,指解决一个复杂问题时自顶向下逐层把系统划分成若干模块的过程,有多种属性,分别反映其内部特性。

    规范化,指在经济、技术和科学及管理等社会实践中,对重复性事物和概念,通过制定、发布和实施标准(规范、规程和制度等)达到统一,以获得最佳秩序和社会效益。

    1.2 工程化方法

    工程化方法的定义是将工作中的每一步工作事先都计划好,对多个人的工作方法和调查所用的表格、图例都统一规范化处理,以使群体之间都能相互沟通。

    可以抽象的理解为,工程化的方法就是将一个工程具体细化分为多个阶段或过程,并提前设计好每个阶段或过程中需要使用的材料、方法、环境条件、人力等所需资源,从而按照合理的可依赖的流程顺序化的完成整个工程。

    1.3 软件工程思想

    软件工程思想,是指以系统性的、规范化的、可定量的过程化方法去开发和维护软件的思想。也就是以有标准性、顺序性地实现从现实空间到计算机空间的软件代码之间的映射与转换。这种思想可概括为:概念和形式模型、抽象层次、大问题的复杂性(分治、复用、折中、一致性和完备性、效率、演化)。

    2. 工程化在软件开发和维护中的应用

    自1968年北大西洋公约组织的计算机科学家在联邦德国召开的国际会议提出“软件工程”以来,软件工程的内涵经历了相当大的变革,到如今,整个软件工程都被包含于工程化思想中。软件工程过程是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。

    在完成开发任务时必须进行一些开发活动,并使用适当的资源(人员、时间、计算机硬件、软件工具等),在过程结束时将输入(如软件需求)转化为输出(如软件产品),因此,ISO9000将过程定义为“把输入转化为输出的一组彼此相关的资源和 活动”。过程定义了运用方法的顺序、应该交付的资料文档、为保证软件质量和协调变化所需要采取的管理措施,以及标志软件开发的各个阶段任务完成的里程碑。为获得高质量的软件产品,软件工程过程必须合理、科学。

    概括的说,软件工程的软件生命周期由软件定义、软件开发和软件维护3个时期组成,每个时期又可进一步划分为若干个阶段,以下将分别阐述各个部分的内容

    2.1软件定义

    软件定义时期的任务是确定软降开发过程必须完成的总任务目标;确定工程的可行性;导出实现工程目标应该采用的策略及系统必须完成的功能;估计完成该项工程需要的资源和成本,并且制定工程进度表。这个时期的工作通常又被称为系统分析,由系统分析员负责完成。通过调研,系统分析员应该提出关于问题性质、工程目标和工程规模的书面报告,并且需要得到客户对这份报告的确认。

    软件定义时期通常进一步划分为3个阶段,即问题定义、可行性研究和需求分析。

    2.2软件开发

    软件开发时期具体设计和实现在前一个时期定义的软件,它通常由下述4个阶段组成:概要设计、详细设计、编码和单元测试、综合测试。其中前两个阶段又被称为系统设计,后两个阶段又被称为系统实现。

    与一开始随心所欲的软件开发不同,工程化的开发过程充满了条理性。按照传统方法的软件开发过程被细分为结构化分析和结构化设计、结构化实现。需要说明的是,在这种框架下的开发过程,分析和设计占了绝大部分,原本核心的实现过程成了最不需要考虑的部分。

    结构化的分析,可分为问题陈述(与客户访谈访谈、提供给客户模型获取需求等)、问题定义、可行性研究、需求分析四个部分。

    结构化设计,最主要的部分是模块独立(耦合和内聚)、面向数据流设计(变换、事务)、面向数据结构设计(Jaskson方法)、人—机界面设计、面向过程设计这五种。需要指出的是虽然面向的方向不同,但结构化设计的最终目的都是将分析的结果分解成多个模块,在各模块完成后再将各模块整合在一起。这种方法的核心在于模块的分解是否合理,只有合适的分解才能保证后续过程的完善。

    结构化实现,可概括为编码和测试,编码的部分这里不作出解释,测试是额外需要注意的部分。在软件工程化应用之前,很多人认为,程序员只需要负责好将代码编译完成就可以了一个软件的实现而之后软件的适用与否不需要程序员关心,事实上程序员完成的编码部分根本不足以说是完成了软件的开发,软件质量的好坏还是取决于测试。测试人员在对软件的基本实现、条件、数据流等做完测试后,最后就是将软件去交给客户,客户对软件的质量有绝对评价的权利。

    2.3软件维护

    运行维护时期的主要任务是使软件持久地满足用户的需要。具体地说,当软件在使用过程中发现错误时应该加以改正;当环境发生改变时因该修改软件以适应新的环境;当用户有新的需求时应该及时改进软件以满足用户的新需要。通常对维护时期不再进行下一步的具体划分,但是每一次维护活动本质上都是一次压缩和简化的定义和开发过程。

    通常有4类维护活动:改进性维护、适应性维护、完善性维护、预防性维护。

    3. 工程化开发和维护的作用

    在20世纪50年代至20世纪60年代中期,是计算机系统发展的早期。在这个时期通用硬件已经相当普遍,软件却是专门为每个具体应用而专门编写的,大多数人认为软件开发是无须预先计划的事情。这期间的软件实际上就是规模较小的程序,但在需求的不断扩大之后,软件的规模也越来越大,即使人们已经有计划的展开编程,但仍然不能很好地实现目标。这期间内的案例表明,只有42%的软件项目完成时达到了预期的范围和功能。事实上,许多系统只完成了部分预期的需求。因此,软件的开发是一个很困难的活动,要求很仔细的计划和执行。在这样的背景下,软件的工程化应运而生。

    举个例子,现在要求开发一个图书馆信息系统,即图书馆MIS。这是一项软件工程,为了完成这项任务,首先要选择软件开发模型,确定开发方法,准备开发工具,设计开发环境和运行环境,然后进行需求分析、概要设计、详细设计、编程、测试、试运行、正式运行、验收和交付,最后是系统维护或系统升级换代。这一系列的软件开发过程和管理过程,这就是软件工程。而通过软件工程成功的案例非常多,美国微软公司之所以到现在还能是行业龙头,与其工程化的项目开展不无关系;在这之后,2000年左右中国兴起了一波软件革命浪潮,其中拔尖的有以腾讯的QQ、网易的163邮箱等,这些案例都告诉人们一个合理的工程化对软件开发和维护有多么重要。

    工程化的软件开发和维护的作用,主要体现在使开发过程更加规范、见效,以生产具有正确性、可用性以及开销合宜的产品。正确性指软件产品达到预期功能的程度。可用性指软件基本结构、实现及文档为用户可用的程度。开销合宜是指软件开发、运行的整个开销满足用户要求的程度。这些目标的实现不论在理论上还是在实践中均存在很多待解决的问题,它们形成了对过程、过程模型及工程方法选取的约束。

    软件工程的原则是指围绕工程设计、工程支持以及工程管理在软件开发过程中必须遵循的原则。把系统化的,规范的,可度量的途径应用于软件开发,运行和维护的过程,也就是把工程化应用于软件中。

    世界上有 10 种程序员。一种是遵守软件工程开发规则的,我们称之为工程师;一种是不遵守软件工程开发规则的,我们称之为码农。

    软件工程,是为了让程序员能够更好地写代码、写出更好地代码。这两个好,都有多层次的含义,但本质上,都是在长期的跨度内,减少程序员的工作量并提高代码质量。

    然而,世事总是不随人愿:长期跨度内的好,往往和短期利益会存在冲突。这也就是「短视」或者「目光短浅」的由来。在软件工程中,「写注释」、「保持良好的命名习惯」、「单元测试」、「设计思想」、「总结分析」、「时间记录」,这些是无数前辈总结出来的强而有效的工具。但是,从短期效果来看,使用这些工具(或者进行这些练习),无疑是耗费时间的——只要写出代码来就好了,谁管那么多事?

    对此,我的解释是:软件开发,是一个长期的、不断变化迭代的过程,而不是一个短期的、一锤子买卖的活动。既然如此,已经明确了软件开发不是一个短期活动,那么为了短期利益,放弃长远打算,显然是不明智的。

    4. 结语

    很明显,工程化带给软件开发和维护的,就是更加有计划性、更富有相信想象力、更富有组织性和结构性。这种改变是本质性的,也让软件工程由此真正成为了一门伟大的学科。

    近二十年来计算机软件已经成为现代科学研究和解决工程问题的基础,以及管理部门,生产部门,和服务行业中的关键因素,渗透到了各个领域,成为当今世界不可缺少的一部分。展望二十一世纪,软件工程仍将成为驱动软件迅猛发展的稳定基石。

    作者:赵瑞鑫。支持原创,从你我做起。
  • 相关阅读:
    四则运算
    屏蔽恶意IP
    Vue企业级优雅实战05-框架开发01-登录界面
    Vue企业级优雅实战04-组件开发01-SVG图标组件
    Vue企业级优雅实战03-准备工作04-全局设置
    Vue企业级优雅实战02-准备工作03-提交 GIT 平台
    802.11ax TWT
    leetcode338
    春招实习面经(已拿阿里/腾讯/亚马逊)
    leetcode weekly contest138
  • 原文地址:https://www.cnblogs.com/Winer-Jiu/p/13393349.html
Copyright © 2011-2022 走看看