首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2022年国内软件质量调查,一起关注质量、提升质量,是一种责任,任重道且长。

2022年国内软件质量调查,一起关注质量、提升质量,是一种责任,任重道且长。

作者头像
汀丶人工智能
发布2022-12-21 18:04:14
3750
发布2022-12-21 18:04:14
举报
文章被收录于专栏:NLP/KGNLP/KG

今年,软件质量报道公众号、CSDN社区、QECon组委会 联合 异步社区、腾讯WeTest社区、Testin云测试社区、MeterSphere开源社区、掌动智能国产化社区、龙测社区、Eolink API社区、禅道项目管理软件社区、测试窝(排名不分先后)继续发起“2022年国内软件质量调查”。将在调查数据的基础上进行整理、分析和总结,最终发布一份高质量的软件质量调查分析报告。

https://activity.csdn.net/creatActivity?id=10272

1.关于软件质量的思考

在软件开发团队中,由于质量被视为软件产品的生命。那么什么是软件质量?软件质量:与软件产品满足明确或隐含需求的能力有关的特征和特征的总和,它反映了三个方面的问题:

1、能满足客户需求的特性之全体;

2、利用各种质量标准体系,指导软件开发人员开发软件;

3、是否满足用户隐含需求。软件质量管理的目的是建立对项目的软件产品质量的定量理解,和实现特定的质量目标;着重于确定软件产品的质量目标、制定达到这些目标的计划,并监控及调整软件计划、软件工作产品、活动及质量目标以满足顾客及最终用户对高质量产品的需要及期望。

2.软件质量管理的现状

在现实软件开发过程中,许多软件产品却时常陷入质量低下、甚至软件不符合用户需求的旋涡。究其根源,有以下几个方面:

1、软件质量保证技术(审查、复审和测试)没有贯穿到整个软件开发全过程中去。

2、在于这些软件产品对其质量内涵的把握,仅仅停留在减少软件运行错误、加强软件测试,避免软件缺陷的一般性层面,而对整个软件开发生命周期的全过程质量管理,缺乏总体架构。

3、测试管理的一些误区也会导致严重的质量问题。没有按照测试原则进行尽早测试、连续测试与自动化测试。是测试本省变得的形式化。

4、质量是全过程的,不仅是测试。质量管理者应该将质量控制与保证着眼于整个软件开发生存周期内。而事实上,质量管理者仅仅认为通过严格的测试就可以保证软件质量。

3.软件质量保证

1、在软件开发中,可以采用以下措施保证软件的质量;

2、审查。在生命周期每个阶段结束之前,都要使用标准对该阶段生产的软件配置进行严格的技术审查;

3、复查和管理复审。复查是检查已有的材料,以断定某阶段的工作是否能够开始或继续;管理复审是向开发组织或使用部门的管理人员,提供有关项目的总体状况、成本和进度等方面的情况,以便他们从管理角度对开发工作进行审查。

4、测试。通过测试计划、测试过程与测试结果对软件质量进行保证;

5、软件质量保证活动。以上各项活动内容都须写入质量保证计划,并由质量保证小组监督实施。由此可见,质量保证既是技术活动,也是管理活动;

6、软件评审。评审是以提高软件质量为目的的技术活动。要通过对软件的规格说明、可靠性、性能实现、可修改性、可扩充性、可移植性、可测试性、可复用性以及评审的实施等方面对软件项目做好严格的评审,以确保软件质量;

7、采用质量保证标准。质量标准用于实现质量管理的组织结构、责任、规程、过程和资源。采用ISO质量保证模型。可以用于质量计划、质量控制、质量保证和质量改经所需的组织结构、规程、过程和资源;

8、结构化的软件测试。经过严格的软件测试,尽可能找出软件计划、总体设计、详细设计、软件编码的错误,并加以纠正,才能提高软件的质量。测试要覆盖整个软件的生存周期,而不限于程序的编码阶段。

9、软件维护。采用结构化维护,完整的软件配置为基础,通过完善性维护、纠错性维护、适应性维护及预防性维护提高软件质量。

2.1 软件质量管理的检查方式:验证

验证的目的在于确保工作产品符合其指定的需求。

软件验证的过程可以抽象为以下3个部分:验证的准备工作、验证的执行工作、纠正措施。

所有验证准则都必须包含3个要素:输入、操作步骤和期望的输出。

书中提到验证的方法:

  • 同行评审
  • 单元测试
  • 集成测试
  • 性能测试(压力测试是检测在巨大的工作压力负荷下应用程序的运行情况。)
  • 系统测试

软件测试人员在进行验证的过程中也要把握尺度,通常所遵循原则如下:

①软件各种测试方法的目的是为了发现存在的缺陷,但永远不能证明软件系统不存在缺陷。因为软件产品对于测试人员来说就是一个“黑盒子”,而软件的缺陷却已经在生产的过程中产生了。

②要想在有限的时间和资源下进行无穷尽的测试是不可能的,因此软件测试也要适可而止。

③测试要尽早介入,由于软件的复杂性和抽象性,在软件生命周期各个阶段都可能产生错误,所以不应把软件测试仅仅看做是软件开发的一个独立阶段的工作,而应当把它贯穿到软件开发的各个阶段中。

④帕雷托的80/20原则,80%的缺陷是因为20%的错误原因导致的。

⑤相同的测试用例反复使用是没有效果的,因为测试人员也会产生“审美疲劳”。

3.一道有趣的测试面试题目:来思考“软件质量”

题目:在A文件夹下有多个子文件夹(a1、b1、c1),每个子文件夹下有好几张jpg图片,要求写一段代码(用PythonorShell),把这些图片全部拷贝并存在B文件夹下。

有趣的讨论:

  • 聪明的Cookie同学:考点就是如何遍历一个文件夹下的文件,需要考虑的是文件路径深度,需要用到递归。
  • 诚实的黑山老妖同学:我觉得对我来说,难点是操作文件的方法,之前没怎么用过,递归遍历啥的倒是小问题。
  • 经验老道的剪烛同学:如果拿这个题目面试测试工程师,这个肯定还需要你提问的(考你需求分析),不仅仅是说写个脚本,等你写完了(考你编程熟悉),还会让你针对你写的代码进行测试(考你用例设计),都是套路。
  • 爆炸的hellohell同学:我再想,如果我碰到这个问题,是否能当场给出正确答案?估计不成,因为API全忘掉了。确实记性不好。如果给我个本儿,给上网机会,多费点时间,能搞出来;甚至用了递归,生成器,精简了代码(篡成一行),做了判断。jpg是个目录咋办?不同目录下文件同名咋办?以及其他

python解答:

import os,shutil
def movefile(srcfile,dstfile):
    fpath,fname=os.path.split(srcfile)
    if os.path.isfile(os.path.join(dstfile,fname)):
        print("%s exist!"%str(os.path.join(dstfile,fname)))
    elif not os.path.isfile(srcfile):
        print("%s not exist!")%(srcfile)
    else:
        fpath,fname=os.path.split(dstfile)
        if not os.path.exists(fpath):
            os.makedirs(fpath)
        shutil.move(srcfile,dstfile)
def getfile(path):
    paths = []
    for root, dirs, files in os.walk(path):
        for file in files:
            paths.append(os.path.join(root,file))
    return paths
def main():
    path = "/path/A"
    pathto = "/path/B"
    paths = getfile(path)
    for pathfrom in paths:
        print(pathfrom)
        movefile(pathfrom,pathto)
if __name__ == '__main__':
    main()

 java解答:

public void copyImages(File from, File to) throws IOException {
    if(from == null || to == null) {
        throw new RuntimeException("From or To is empty.");
    }
    if(from.isFile()) {
        throw new RuntimeException("From is not directory.");
    }
    if(to.isFile()) {
        throw new RuntimeException("To is not directory.");
    }
    File[] images = from.listFiles(new FileFilter() {
        @Override
        public boolean accept(File pathname) {
            boolean result = false;
            if(pathname.isFile()) {
                String path = pathname.getAbsolutePath().toLowerCase();
                if(path.lastIndexOf(".jpg") > -1
                    || path.lastIndexOf(".png") > -1
                    || path.lastIndexOf(".jpeg") > -1
                    || path.lastIndexOf(".bmp") > -1) {
                    result = true;
                }
            } else {
                result = false;
            }
            return result;
        }
    });
    for(File image : images) {
        copyImagesHelper(image, to);
    }
    File[] dirs = from.listFiles(new FileFilter() {
        @Override
        public boolean accept(File pathname) {
            return pathname.isDirectory();
        }
    });
    for(File dir : dirs) {
        copyImages(from, to);
    }
}
private void copyImagesHelper(File image, File dir) throws IOException {
    String cmd =
        String.format("cp %s %s", image.getAbsolutePath(), dir.getAbsolutePath());
    Runtime runtime = Runtime.getRuntime();
    runtime.exec(cmd);
}

 shell解答:

find  ./A/ -maxdepth 2  -name '*.jpg' -exec cp {} ./B \;

4.软件测试推荐书籍:把控“质量安全”

测试理论与实践:《软件测试经验与教训》《有效软件测试:提高测试水平的 50 条建议》《软件测试基础教程》《Google 测试之道:像 Google 一样进行软件测试》《探索吧!深入理解探索式软件测试》《实例化需求:团队如何交付正确的软件》《Scrum 要素》《海盗派测试分析》

性能测试:性能之巅:洞悉系统、企业与云计算》《应用程序性能测试的艺术》《软件性能测试过程详解与案例剖析》

安全测试:《渗透测试实践指南:必知必会的工具与方法》

自动化测试:自动化测试最佳实践》《测试之美》

编程语言与开发技能:《Effective Java(第3版)》《Java编程思想 (第4版)》《Python 核心编程(第三版)》《流畅的 Python》《算法(第4版)》《鸟哥的 Linux 私房菜》《SQL 必知必会》《正则表达式必知必会》《高性能 MySQL》《Spring 揭秘》

微服务、DevOps、持续交付:微服务设计》《DevOps 实践指南》《持续交付1.0:发布可靠软件的系统方法》《持续交付2.0:业务引领的DevOps精要》

软件工程软件开发心理学》《Head First 设计模式》《代码整洁之道》《架构整洁之道》《重构:改善既有代码的设计》《人月神话》

通用软技能:程序员健康指南》《软技能 —— 代码之外的生存指南》《高效能人士的 7 个习惯》《金字塔原理》《学会提问》《非暴力沟通》

管理技能:《赢》《格鲁夫给经理人的第一课》《你的灯亮着吗?:发现问题的真正所在》《管理团队:成败启示录》《团队角色:在工作中的应用》

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-12-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.关于软件质量的思考
  • 2.软件质量管理的现状
  • 3.软件质量保证
    • 2.1 软件质量管理的检查方式:验证
    • 3.一道有趣的测试面试题目:来思考“软件质量”
    • 4.软件测试推荐书籍:把控“质量安全”
    相关产品与服务
    CODING DevOps
    CODING DevOps 一站式研发管理平台,包括代码托管、项目管理、测试管理、持续集成、制品库等多款产品和服务,涵盖软件开发从构想到交付的一切所需,使研发团队在云端高效协同,实践敏捷开发与 DevOps,提升软件交付质量与速度。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档