软件开发方法主要关注软件生产过程中如何组织和管理各项工作。它涉及一系列的步骤和流程,旨在有效地完成一个运行的系统及其支持文档。这些方法通常包括如何分析问题、设计系统、编写代码、进行测试以及维护软件等。
开发方法有很多种分类,不同标准有不同的分类:
从开发风范分,可分为自顶向下和自底向上的开发方法;
从开发性质看,可分为形式化方法和非形式化方法;
从适用范围看,可分为整体性方法和局部性方法。
结构化方法,作为一种整体性方法,在软件开发的不同阶段中均发挥着核心作用,其核心理念是将软件的开发过程划分为多个相互关联且有序的步骤,确保每个阶段的工作都基于清晰、准确的需求和规范进行。这种方法又被称为面向过程方法,它强调软件开发的系统性、层次性和模块化,有助于降低开发的复杂性和提高软件的可维护性。
特点:
用户至上
严格区分工作阶段,每个阶段都有明确的任务和结果
强调系统开发过程的整体性和局限性
系统开发过程工程化、文档资料标准化
基本思想:自顶向下,逐步分解(求解),把一个复制的系统拆分,化繁为简,形成一个个的构件
结构化方法,又称面向过程方法,是整体性方法,在软件开发的不同阶段中均发挥着核心作用,如:
结构化分析(SA):分层数据流图(DFD)、数据字典、ER图、判定表、判定数等工具
结构化设计:分层数据流图(DFD)、ER图、IPO图(Input-Process-Output Diagram)、UML中流程图等工具
结构化程序设计
特点:
更好的复用性
关键在于建立一个全面、合理、统一的模型
自底向上,与现实实物结合,将万物抽象成一个个对象
分析、设计、实现三个阶段界限不明确
一些常见的面向对象方法采用到的工具:
UML(Unified Modeling Language,统一建模语言):这是一种标准的图形化建模语言,用于对软件密集系统进行可视化建模。UML包括了多种类型的图,如用例图、类图、顺序图、状态图等,用于描述系统的不同方面。
用例建模:通过用例图和用例来描述和说明用户需求。
静态建模:通过类图或对象图描述系统中的对象如何组成系统。
动态建模:描述系统的动态行为和控制结构,包括顺序图、协作图、状态图、活动图等。
实现模型:描述系统实现时的特性,即物理架构,包括组件图和部署图。
设计模式和框架:设计模式是在面向对象设计中经常遇到的问题的解决方案,如单例模式、工厂模式等。而框架则是一组预先编写好的类和方法,用于快速构建应用程序。这些工具和资源可以极大地提高面向对象开发的效率和代码质量。
版本控制系统:如Git、SVN等,用于管理代码的版本和协作开发。在面向对象开发中,版本控制系统能够确保团队成员之间的代码同步和协作,避免冲突和重复工作。
特点:
SOA方法有三个主要的抽象级别:操作
、服务
、业务流程
。
SOAD(面向服务的架构与设计)分为三层次:基础设计层
、应用结构层
和业务组织层
。
服务建模:分为服务发现
、服务规约
和服务实现
三个阶段。
SOA方法(面向服务的架构)的三个主要抽象级别如下:
操作:代表单个逻辑工作单元,执行具体任务或功能。执行操作通常会导致读、写或修改一个或多个持久性数据。
服务:由一组相关操作组成,具有明确的接口和契约,服务是SOA中的核心抽象,提供可重用、可组合和可管理的功能单元。
业务流程:由多个服务按照特定顺序和规则组合而成,通过编排服务,可以构建出复杂的业务流程,以满足企业的业务需求。
这三个抽象级别共同构成了SOA的核心概念,使得企业能够构建出灵活、可扩展和可维护的分布式系统。
SOAD(面向服务的架构与设计)分为三个层次,具体为:
基础设计层(底层服务构件):作为SOAD的基石,该层包含系统所需的基本服务元素,为上层应用提供功能和数据支持。
应用结构层(服务之间的接口和服务级协定):在基础设计层之上,应用结构层定义了服务间的交互方式、接口定义、通信协议和消息格式。该层确保服务之间的可互操作性和可重用性,是系统协同工作的关键。
业务组织层(业务流程建模和服务流程编排):作为SOAD的最高层次,它关注于业务流程的建模和编排,将基础服务组合成满足业务需求的流程。这一层使得系统能够灵活地适应业务需求的变化。
这三个层次共同构成了SOAD的框架体系,为面向服务的架构设计和实现提供了指导。
服务建模的三个阶段分别为:
服务发现:通过分析业务需求和现有系统,识别并确定服务的候选者。这通常包括业务领域的分解、流程分析以及变化点的识别,以确定哪些功能或组件可以被封装为服务。
服务规约:对服务候选者进行分类和筛选,确定哪些服务需要被暴露和复用。同时,制定服务的接口定义、消息格式、通信协议等规约,确保服务之间的互操作性和可重用性。此外,还包括服务编排、服务库和服务总线等中间件模式的设计。
服务实现:根据服务规约,将服务的实现分配到相应的服务构件中,并确定服务的具体实现方式。这可能包括利用现有系统提供的功能、重新开发新功能或利用合作伙伴提供的服务。服务实现需要确保服务符合规约要求,并能够满足业务需求。
这三个阶段共同构成了服务建模的全过程,是实现SOA(面向服务的架构)的关键步骤。下面,以电子商务网站服务建模为例子来说明服务建模的三个阶段:
服务发现
业务分析:在电子商务网站的业务中,我们可以识别出几个关键的业务领域,如商品管理、用户管理、订单处理、支付处理、物流管理等。
候选服务识别:在每个业务领域下,我们可以进一步细分并确定服务的候选者。例如,在商品管理领域,我们可能有“商品查询服务”、“商品添加服务”、“商品修改服务”等;在用户管理领域,我们可能有“用户注册服务”、“用户登录服务”、“用户信息修改服务”等。
服务规约
服务分类:根据服务的业务重要性和复用性,我们可以将服务分为核心服务、基础服务和辅助服务等。例如,“用户注册服务”、“商品查询服务”和“订单处理服务”可能是核心服务,而“日志记录服务”则可能是辅助服务。
接口定义:为每个服务定义明确的输入、输出和异常处理机制。例如,“用户注册服务”的接口可能包括用户名、密码、邮箱等输入参数,返回一个表示注册是否成功的状态码和消息,以及处理用户名已存在等异常情况的逻辑。
服务编排:确定服务之间的调用关系和流程。例如,当用户下单时,“订单处理服务”会调用“商品查询服务”来验证商品的库存和价格信息,然后调用“用户支付服务”来处理支付流程,最后调用“物流分配服务”来安排发货。
服务实现
技术选型:根据业务需求和技术要求,选择适合的技术栈和框架来实现服务。例如,我们可以使用Spring Boot框架来构建RESTful风格的Web服务,使用MySQL数据库来存储数据。
服务开发:按照服务规约的定义,编写服务代码实现具体的业务逻辑。这可能包括数据库操作、业务规则验证、异常处理等。
测试与部署:对服务进行单元测试、集成测试和性能测试,确保服务的正确性和性能满足要求。然后,将服务部署到生产环境中,并进行监控和维护。
通过以上三个阶段的服务建模过程,我们可以将电子商务网站的业务功能拆分成多个独立、可重用的服务,并通过服务之间的协作来实现复杂的业务流程。这种面向服务的架构(SOA)可以提高系统的可扩展性、可维护性和灵活性,满足不断变化的业务需求。
原型法是一种注重快速迭代、用户参与和灵活调整的开发方法,有助于提高软件开发的效率和质量。适用场景:适用于需求不明确的情况,通过快速构建和迭代原型来明确需求
原型法主要分为以下三种类型:
递增式原型法:
特点:先根据较准确的用户需求,产生一个总体的系统框架,各功能单元的结构和功能较清楚,但尚未具体实现。用递增的方式对各功能模块进行原型法开发,逐步完善各个功能单元。
优点:通过迭代确保系统满足需求,控制成本和风险。
缺点:需要明确且稳定的用户需求,高开发环境要求。
适用场景:适用于需求相对稳定但系统复杂的大型项目,允许逐步迭代和完善系统功能。
抛弃式原型法(也称为抛弃型原型):
特点:主要用于快速获取和澄清界面设计需求,需求确定或设计得到验证之后可抛弃。
优点:能够快速获取用户反馈并调整设计,有助于在早期阶段发现潜在问题。
缺点:由于只关注界面设计,可能无法全面反映系统的功能和性能需求。
适用场景:适用于需求不明确或需要快速验证设计概念的界面设计或需求探索阶段。
演化式原型法(或演化模型)(也称为进化型原型或原型模型):
特点:通过快速构建原型并反复评价和修改来逐步完善系统。
优点:能够迅速响应用户需求的变化,并在开发过程中不断进行优化和改进。
缺点:易出现质量缺陷,开发过程难以控制,不适用于大型系统。若用户合作不好或盲目纠错,可能会拖延开发进程。
适用场景:适用于需求不明确或需要频繁变更的项目,特别是Web项目或快速响应市场变化的产品。
在选择原型法时,需根据项目具体情况和需求综合考虑,同时保持与用户的良好沟通和合作。
原型设计过程通常包括以下四个关键步骤:
确定需求:
在开始设计之前,首先明确产品或服务的需求。这通常包括功能需求、用户需求、业务目标等。通过与用户、利益相关者或产品经理的沟通,确保对需求有清晰的理解。
创建原型:
基于确定的需求,开始创建原型。原型的类型可以是低保真(快速、简单,主要用于测试和验证基本功能)或高保真(更接近于最终产品的外观和感觉,用于更详细的用户测试)。
使用原型设计工具(如Sketch、Figma、Axure等)或快速原型制作软件(如InVision、Framer、Proto.io等)来创建原型。
验证原型:
将创建的原型展示给目标用户或利益相关者,以获取他们的反馈和意见。这可以通过用户测试、焦点小组、问卷调查等方式进行。
验证原型的目的是评估其是否满足用户需求、是否易于使用、是否存在问题等。根据反馈,可以了解用户对产品的真实感受,并发现潜在的问题和改进点。
迭代改进:
根据用户反馈和测试结果,对原型进行迭代改进。这可能包括修改功能、调整界面设计、优化交互等。
重复进行验证和迭代的过程,直到原型达到预期的效果和满意度。在迭代过程中,保持与用户的沟通,并根据他们的反馈持续优化产品。
通过以上四个步骤,可以逐步完善和优化原型设计,使其更贴近用户需求和市场要求。原型设计是一个迭代和循环的过程,需要不断测试、反馈和改进。