对日软件开发体会(转)

对日软件开发体会之一

以前从事对日软件外包工作,觉得很多日本企业的开发流程过于死板,开发框架也过于老套,对开发人员的技术要求极低。但他们的文档要求却不是一般的高了。在文档这一点上我们是不是可以参考一下他们的做法。

日本人的需求文档的作者一般是项目负责人,这类人需要有很强的代码功力,因为需求文档上需要写下详细的逻辑设计,细到一个判断语句,细到一条SQL 语句。可能你认为这样很BT,因为我们总是认为设计归设计,SQL之类的都是开发人员的事情不需要在文档上写明,但这样做的好处是只要开发人员一拿到需求 文档只要完全按照文档上的思路来实现代码,原则上只要文档的思路没有错误就不允许修改逻辑(有时需求上的逻辑判断很冗余,比如a>b并且 a>c的情况下去判断b大于c,其实这样的判断逻辑开发人员觉得可以改为(a>b)&&(b>c)看起来更清晰更优 化,但这是不允许的)。因为一旦实现的代码和文档上的需求逻辑对不上就不利于维护,以后需求有变更的时候文档的修改和代码得不到统一,这样容易产生风险; 同时也不利于测试人员的用例设计(对日软件的测试倾向于白盒测试),测试人员是根据需求文档的逻辑来写case的,一旦代码的实现和需求上的逻辑不统一, 用例就不能完全覆盖代码,这样也容易产生风险。

在这一年的对日软件开发中,我体会到日本人主要把精力放在了前期的需求文档上,文档包含了代码的实现逻辑,SQL语句的编写等等,使得在开发上花很少很少的时间就可以实现程序,产生的bug率会很低。

当然我们的UC不可能像日本人那样连代码的逻辑思路也写完整,但UC需求是不是应该由开发人员来写我这里有个疑问。首先,开发对需求了解的度应该不 是百分之百的,由他他来写UC是不是会容易遗漏细节(很多遗漏的细节在UC评审中可能会被忽略);其次,开发写UC容易根据自己主观上的代码实现的难易程 度来适当的调整需求(他们总是有理由说如果不这样做会代码的难度会增加多少倍,但换位思考一下,要知道用户并不会因为实现技术有多难而体谅我们,用户只关 心结果)。

我觉得UC的编写是不是可以让PD或者项目经理来完成呢?由他们编写出来的需求文档我想后期需要改动的地方会很少,实现的页面用户体验也高,相对来说可以很好的减少测试人员和开发人员的沟通成本。

对日软件开发体会之二

多数日本企业在软件开发流程中各个组的组长一般只做review工作,review你的用例是否全面覆盖了你的需求,review你提交的成果物有 没有错误。Review是一份很细致的工作,需要对需求的把握十分理解。除了组长做review工作外,测试和测试之间还要做交叉测试,各自造不同的数 据,在提交成果物之前确保找出所有的bug。

这种交叉review和交叉测试的过程其实每个企业都有提到,但一方面是人力的问题,另一方面是时间的问题,似乎很少有企业能真正做到位。

然后对日软件开发中测试人员的要求比开发人员的要求高,在项目的时间计划安排上也是测试时间远远要比开发时间多,一般开发时间安排为1人/日的话, 测试时间起码是2.5人/日。因为在前面文章中我已提到需求文档上已经把所有的代码实现逻辑写好了,开发人员几乎在开发时只要将需求上的逻辑加一件“外 套”,就像现在我们使用的ruby脚本一样,在业务流代码已经完成的基础上我们只要给将业务流代码加个驱动方法使它跑起来就结束工作了;而测试人员比较辛 苦,开发人员在开发的这段时间一般还不够测试人员写TC的;在测试的时候还要保留证据证明你是完全按照case来执行测试的。比如在执行某一个用例的时候 用到了哪些数据,如果是测试前台页面的,那就需要将页面上文本框的内容截图出来,如果是测试后台批处理程序的,那么需要做一个输入数据文档,同时将程序跑 出来的日志、生成的各类统计文档等全都保留下来,将这些文档的内容和预期结果做对照,来判定测试的用例是否通过。

当然我们是否也需要花那么多的时间去做这一系列的产出物我觉得需要探讨?就目前我们的业务来说,我个人觉得没有必要,但那样做确实有一定的好处,首先很规范,不会马马虎虎一测了之;其次,一系列的输入数据文档便于回归测试,也便于下次业务有变动后可以节省造数据的时间。

对日软件开发体会之三

多数日本企业在软件开发流程中喜欢把模块细分化,细分到一个很小很小的功能点,比如一个弹出框,一个查询按钮等等,然后每个细分好了的功能点写一本需求文档,这样做也有一定的好处。

首先,对测试人员来说容易写testcase(相对一个有很多很多操作链接的复杂页面来说,确实这样细分了的话写case的思路会清晰很多),然后写出来的case对需求的覆盖率几乎是百分之百的;

第二,对开发人员来说相同的机能点无需再次开发(比如淘江湖中的投票模块有一个“分享给好友”的好友选择功能,在推荐模块中也同样有这么一个功能,我们在做的时候却是分别开发,这样对测试人员来说不仅增加了工作量,而且往往开发出来的两个机能点的风格不统一)。

第三,对测试人员来说对不同模块的想同机能点无需再次测试。比如淘江湖的评论模块,几乎在淘江湖的各个子产品中(如推荐、投票等)均有评论功能,在投票项目中如果已经测试了评论,那么在后期添加进来的推荐模块就不需要再次测试评论功能了,因为用的都是同一个封装。

第四,维护起来方便。可能你会认为这样的模块细分化的程度有些过分,本来我一个页面写一页UC就可以了,现在却要一个功能点写一个需求(一个页面上 会有很多个功能点,比如删除、查询、添加等),会增加很多工作量,同时在代码整合的时候也需要很多的时间。其实在新增功能模块的情况下却是如此,但如果这 个功能模块需要经常变动的情况下你会发现维护起来很方便,比如现在需要优化“分享给好友”这个机能,那我们只要将“分享给好友”这本需求文档做一下变动就 可以了,然后开发人员和测试人员只要关注这本需求的改动背景和改动点就可以了,代码调用的接口还是一样的,无需再次整合,从而可以大大地缩短维护时间。

当然这个模块细分化的概念对淘宝可能并不适合,毕竟我们的项目和日常非常多,需要快速的发布产品,没有那么多的时间来搞这么多的文档,但是从中我们 是否可以借鉴到某些方法来适用到淘宝呢?我想应该是有的,比如我们可以将模块细分化到一定的程度,不需要把他拆解到最小单位,这样应该能够很好的把握这个 度。

本文出自:Taobao QA Team

对日软件开发体会(转)

时间: 2024-10-07 09:00:09

对日软件开发体会(转)的相关文章

对日软件开发流程(转)

1.SA 系统分析 这个阶段比较重要的工作是分析客户的业务,进行业务建模,理解并发掘客户现在面临的问题,提出改进的模型,以及运行时的管理. 提交的文档是需求定义式样书等. 2.RD 要件定义 3.UR User要件 4.SR 系统要件定义 5.BD 基本设计 也叫外部设计,所谓外部,就是面向外部的用户的设计,不需要关心程序的具体实现.包括业务流程的定义,架构的划分,数据库的设计( ER 图和数据字典等),画面的设计(画面的布局和迁移),对外接口的设计等等. 提交的文档是外部设计式样书等. 6.F

阅读一些关于软件开发本质和开发方法的文章的体会与心得

在本次软件工程课程当中,我已经经历了一次比较成功的个人项目,一次比较失败的结对编程项目,以及即将开始的团队项目alpha阶段.在这段时间,应教师的要求,我开始阅读一些有关软件开发本质和开发方法的文章,在此记录一些体会与心得. 文章一: No Silver Bullet: Essence and Accidents of Software Engineering by Frederick P. Brooks, Jr. 文章网址: http://www.cs.umd.edu/class/spring

阅读作业中软件开发书籍阅读后的一些体会

No Silver Bullet: Essence and Accidents of Software Engineering(Frederick P. Brooks, Jr.) 在这篇文章中,作者将内容分成了三大部分,第一部分介绍了软件开发中根本的——软件特性中固有的困难,而这些困难是:软件实体的复杂性.软件和其它接口的一致性.软件实体的可变性以及软甲本身的不可见性.这是这些根本的特性导致了软件开发的困难. 第二部分讲了次要的——出现在目前生产上的那些困难.作者列举了软件领域中取得的最富有成效

Day4 - Python基础4 迭代器、装饰器、软件开发规范

Python之路,Day4 - Python基础4 (new版) 本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 1.列表生成式,迭代器&生成器 列表生成式 孩子,我现在有个需求,看列表[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],我要求你把列表里的每个值加1,你怎么实现?你可能会想到2种方式 >>> a [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>

Python_Day5_迭代器、装饰器、软件开发规范

本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 1.列表生成式,迭代器&生成器 列表生成 >>> a = [i+1 for i in range(10)] >>> a [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 生成器 通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的.而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访

软件开发质量管理的一些思考

PMBOK里关于质量管理主要有3个过程: 制定质量管理计划 质量保证(QA) 质量控制(QC) 书看了5-6次,还是发现比较抽象,难以理解. 实际项目中,如何才能合理的考虑各种资源制约,更好的执行质量管理呢? 一般的正规流程大致如下: 需求分析-> 客户评审与确认-> 概要设计->内部评审-> 详细设计->内部评审->编码-> 代码审查->单体测试 -> 集成测试->问题修复-> 代码评审-> 测试确认-> alpha测试-&g

软件工程:传统软件工程 vs 敏捷软件开发

前言 软件工程(Software Engineering): 是一种层次化技术. 将系统化的.规范的.可量化的方法应用于软件的开发.运行和维护,即将工程化的方法应用于软件. 研究"建立和使用一套合理的工作原则,以便经济地获得可靠的.可以在实际机器上高效运行的软件"的方法. 敏捷软件开发(Agile software development): 一种应对快速变化的需求的一种软件开发方法.基于迭代和增量开发,通过自组织,跨团队,沟通协作完成开发工作. 一.传统软件工程 (一)产生背景 随着

软件开发中的单一职责(转至INFOQ)

最近在实践微服务化过程中,对其“单一职责”原则深有体会.那么只有微服务化才可以单一职责,才可以解耦吗?答案是否定的. 单一职责原则是这样定义的:单一的功能,并且完全封装起来. 我们做后端Java开发的,应该最熟悉的就是标准的3层架构了,尤其是使用Spring.io体系的:Controller.Service.Dao/Repository.为什么要分层?就是为了保证单一职责,数据模型的事情交给Controller,业务逻辑的事情交给Service,和数据打交道的事情就交给Dao/Repositor

精益软件开发与精益管理:从一家关闭的汽车厂重焕青春说起

“把工厂搞砸的是系统,不是人!” 弗里蒙特汽车装配厂是通用汽车于1982年关闭的工厂,当时劳资关系几近崩溃,工人们边工作边酗酒和赌博.1984年通用与丰田成立了合资企业:NUMMI,启动了弗里蒙特的工厂并重新雇用了原来的工人.这些工人被送到日本的丰田城学习丰田生产系统(TPS),之后短短三个月内,NUMMI就生产出了质量近乎完美的汽车,而且成本比以前工厂时期低很多. 持续改善 当你倾听那些从弗里蒙特装配工厂开始一直坚持到NUMMI结束的工人们谈话时,一个反复被提及的主题就是团队协作.这也许有些老